Commit e6bb7a96 authored by FUJITA Tomonori's avatar FUJITA Tomonori Committed by Jens Axboe

scsi: simplify the bidi completion

Let's use blk_end_request_all() instead of blk_end_bidi_request().
Signed-off-by: default avatarFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 1822952b
...@@ -672,33 +672,6 @@ void scsi_release_buffers(struct scsi_cmnd *cmd) ...@@ -672,33 +672,6 @@ void scsi_release_buffers(struct scsi_cmnd *cmd)
} }
EXPORT_SYMBOL(scsi_release_buffers); EXPORT_SYMBOL(scsi_release_buffers);
/*
* Bidi commands Must be complete as a whole, both sides at once. If
* part of the bytes were written and lld returned scsi_in()->resid
* and/or scsi_out()->resid this information will be left in
* req->resid_len and req->next_rq->resid_len. The upper-layer driver
* can decide what to do with this information.
*/
static void scsi_end_bidi_request(struct scsi_cmnd *cmd)
{
struct request *req = cmd->request;
req->resid_len = scsi_out(cmd)->resid;
req->next_rq->resid_len = scsi_in(cmd)->resid;
/* The req and req->next_rq have not been completed */
BUG_ON(blk_end_bidi_request(req, 0, blk_rq_bytes(req),
blk_rq_bytes(req->next_rq)));
scsi_release_buffers(cmd);
/*
* This will goose the queue request function at the end, so we don't
* need to worry about launching another command.
*/
scsi_next_command(cmd);
}
/* /*
* Function: scsi_io_completion() * Function: scsi_io_completion()
* *
...@@ -772,12 +745,22 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) ...@@ -772,12 +745,22 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
if (!sense_deferred) if (!sense_deferred)
error = -EIO; error = -EIO;
} }
req->resid_len = scsi_get_resid(cmd);
if (scsi_bidi_cmnd(cmd)) { if (scsi_bidi_cmnd(cmd)) {
/* will also release_buffers */ /*
scsi_end_bidi_request(cmd); * Bidi commands Must be complete as a whole,
* both sides at once.
*/
req->next_rq->resid_len = scsi_in(cmd)->resid;
blk_end_request_all(req, 0);
scsi_release_buffers(cmd);
scsi_next_command(cmd);
return; return;
} }
req->resid_len = scsi_get_resid(cmd);
} }
BUG_ON(blk_bidi_rq(req)); /* bidi not support for !blk_pc_request yet */ BUG_ON(blk_bidi_rq(req)); /* bidi not support for !blk_pc_request yet */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment