Boaz Harrosh 6f9a35e2da [SCSI] bidirectional command support
At the block level bidi request uses req->next_rq pointer for a second
bidi_read request.
At Scsi-midlayer a second scsi_data_buffer structure is used for the
bidi_read part. This bidi scsi_data_buffer is put on
request->next_rq->special. Struct scsi_cmnd is not changed.

- Define scsi_bidi_cmnd() to return true if it is a bidi request and a
  second sgtable was allocated.

- Define scsi_in()/scsi_out() to return the in or out scsi_data_buffer
  from this command This API is to isolate users from the mechanics of
  bidi.

- Define scsi_end_bidi_request() to do what scsi_end_request() does but
  for a bidi request. This is necessary because bidi commands are a bit
  tricky here. (See comments in body)

- scsi_release_buffers() will also release the bidi_read scsi_data_buffer

- scsi_io_completion() on bidi commands will now call
  scsi_end_bidi_request() and return.

- The previous work done in scsi_init_io() is now done in a new
  scsi_init_sgtable() (which is 99% identical to old scsi_init_io())
  The new scsi_init_io() will call the above twice if needed also for
  the bidi_read command. Only at this point is a command bidi.

- In scsi_error.c at scsi_eh_prep/restore_cmnd() make sure bidi-lld is not
  confused by a get-sense command that looks like bidi. This is done
  by puting NULL at request->next_rq, and restoring.

[jejb: update to sg_table and resolve conflicts
also update to blk-end-request and resolve conflicts]

Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
2008-01-30 13:03:41 -06:00
..
2007-10-31 15:21:35 +00:00
2007-04-01 10:10:04 -05:00
2008-01-23 11:29:34 -06:00
2008-01-11 18:22:30 -06:00
2006-09-12 17:12:31 -05:00
2006-09-12 17:12:31 -05:00
2008-01-25 09:22:12 -06:00
2006-09-12 17:12:31 -05:00
2007-10-22 21:19:53 +02:00
2008-01-11 18:27:59 -06:00
2007-05-31 17:30:04 -04:00
2008-01-11 18:28:51 -06:00
2008-01-30 13:03:40 -06:00
2006-09-12 17:12:31 -05:00
2008-01-23 13:44:31 -06:00
2007-10-19 11:53:42 -07:00
2007-07-18 11:16:32 -05:00
2008-01-30 13:03:40 -06:00
2008-01-30 13:03:40 -06:00
2007-07-14 19:12:15 -05:00
2008-01-30 13:03:40 -06:00
2008-01-23 11:29:29 -06:00
2007-07-31 10:44:01 -05:00
2007-10-24 08:55:40 +02:00
2007-05-31 17:30:04 -04:00
2006-11-15 16:43:50 -06:00
2007-10-19 23:22:55 +02:00