Commit 0d437906 authored by Douglas Gilbert's avatar Douglas Gilbert Committed by Martin K. Petersen

scsi: core: scsi_io_completion hints on fastpath

Add likely() and unlikely() hints to conditionals on or near the fastpath.
Signed-off-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: default avatarBart Van Assche <bart.vanassche@wdc.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 4ae61c68
...@@ -1042,17 +1042,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) ...@@ -1042,17 +1042,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
struct request *req = cmd->request; struct request *req = cmd->request;
blk_status_t blk_stat = BLK_STS_OK; blk_status_t blk_stat = BLK_STS_OK;
if (result) /* does not necessarily mean there is an error */ if (unlikely(result)) /* a nz result may or may not be an error */
result = scsi_io_completion_nz_result(cmd, result, &blk_stat); result = scsi_io_completion_nz_result(cmd, result, &blk_stat);
if (blk_rq_is_passthrough(req)) { if (unlikely(blk_rq_is_passthrough(req))) {
/* /*
* scsi_result_to_blk_status may have reset the host_byte * scsi_result_to_blk_status may have reset the host_byte
*/ */
scsi_req(req)->result = cmd->result; scsi_req(req)->result = cmd->result;
scsi_req(req)->resid_len = scsi_get_resid(cmd); scsi_req(req)->resid_len = scsi_get_resid(cmd);
if (scsi_bidi_cmnd(cmd)) { if (unlikely(scsi_bidi_cmnd(cmd))) {
/* /*
* Bidi commands Must be complete as a whole, * Bidi commands Must be complete as a whole,
* both sides at once. * both sides at once.
...@@ -1065,7 +1065,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) ...@@ -1065,7 +1065,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
} }
} }
/* no bidi support for !blk_rq_is_passthrough yet */ /* no bidi support yet, other than in pass-through */
BUG_ON(blk_bidi_rq(req)); BUG_ON(blk_bidi_rq(req));
/* /*
...@@ -1081,13 +1081,13 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) ...@@ -1081,13 +1081,13 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
* handle. Failed, zero length commands always need to drop down * handle. Failed, zero length commands always need to drop down
* to retry code. Fast path should return in this block. * to retry code. Fast path should return in this block.
*/ */
if (blk_rq_bytes(req) > 0 || blk_stat == BLK_STS_OK) { if (likely(blk_rq_bytes(req) > 0 || blk_stat == BLK_STS_OK)) {
if (!scsi_end_request(req, blk_stat, good_bytes, 0)) if (likely(!scsi_end_request(req, blk_stat, good_bytes, 0)))
return; /* no bytes remaining */ return; /* no bytes remaining */
} }
/* Kill remainder if no retries. */ /* Kill remainder if no retries. */
if (blk_stat && scsi_noretry_cmd(cmd)) { if (unlikely(blk_stat && scsi_noretry_cmd(cmd))) {
if (scsi_end_request(req, blk_stat, blk_rq_bytes(req), 0)) if (scsi_end_request(req, blk_stat, blk_rq_bytes(req), 0))
BUG(); BUG();
return; return;
...@@ -1097,7 +1097,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes) ...@@ -1097,7 +1097,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
* If there had been no error, but we have leftover bytes in the * If there had been no error, but we have leftover bytes in the
* requeues just queue the command up again. * requeues just queue the command up again.
*/ */
if (result == 0) if (likely(result == 0))
scsi_io_completion_reprep(cmd, q); scsi_io_completion_reprep(cmd, q);
else else
scsi_io_completion_action(cmd, result); scsi_io_completion_action(cmd, result);
......
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