diff options
author | Chetan Loke <loke.chetan@gmail.com> | 2012-05-15 14:34:09 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-22 06:12:47 -0400 |
commit | a6eb3c9f73deaa318f17a19c7ad012b3ebe750c3 (patch) | |
tree | 686ce06b73984e2364f633d105de8f60546991bc /drivers/scsi | |
parent | 9e336520c5f673d911642035a5d84fa331ff127f (diff) |
[SCSI] qla2xxx: Micro optimization in queuecommand handler
Optimized queuecommand handler's to eliminate double head-room checks.
The checks are moved inside the 1st if-loop otherwise you would end up checking twice when there is
enough head room.
Signed-off-by: Chetan Loke <loke.chetan@gmail.com>
Reviewed-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Reviewed-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_iocb.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index eac950924497..1ae0d1dbbdb4 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c | |||
@@ -385,9 +385,10 @@ qla2x00_start_scsi(srb_t *sp) | |||
385 | else | 385 | else |
386 | req->cnt = req->length - | 386 | req->cnt = req->length - |
387 | (req->ring_index - cnt); | 387 | (req->ring_index - cnt); |
388 | /* If still no head room then bail out */ | ||
389 | if (req->cnt < (req_cnt + 2)) | ||
390 | goto queuing_error; | ||
388 | } | 391 | } |
389 | if (req->cnt < (req_cnt + 2)) | ||
390 | goto queuing_error; | ||
391 | 392 | ||
392 | /* Build command packet */ | 393 | /* Build command packet */ |
393 | req->current_outstanding_cmd = handle; | 394 | req->current_outstanding_cmd = handle; |
@@ -1502,9 +1503,9 @@ qla24xx_start_scsi(srb_t *sp) | |||
1502 | else | 1503 | else |
1503 | req->cnt = req->length - | 1504 | req->cnt = req->length - |
1504 | (req->ring_index - cnt); | 1505 | (req->ring_index - cnt); |
1506 | if (req->cnt < (req_cnt + 2)) | ||
1507 | goto queuing_error; | ||
1505 | } | 1508 | } |
1506 | if (req->cnt < (req_cnt + 2)) | ||
1507 | goto queuing_error; | ||
1508 | 1509 | ||
1509 | /* Build command packet. */ | 1510 | /* Build command packet. */ |
1510 | req->current_outstanding_cmd = handle; | 1511 | req->current_outstanding_cmd = handle; |
@@ -1717,11 +1718,10 @@ qla24xx_dif_start_scsi(srb_t *sp) | |||
1717 | else | 1718 | else |
1718 | req->cnt = req->length - | 1719 | req->cnt = req->length - |
1719 | (req->ring_index - cnt); | 1720 | (req->ring_index - cnt); |
1721 | if (req->cnt < (req_cnt + 2)) | ||
1722 | goto queuing_error; | ||
1720 | } | 1723 | } |
1721 | 1724 | ||
1722 | if (req->cnt < (req_cnt + 2)) | ||
1723 | goto queuing_error; | ||
1724 | |||
1725 | status |= QDSS_GOT_Q_SPACE; | 1725 | status |= QDSS_GOT_Q_SPACE; |
1726 | 1726 | ||
1727 | /* Build header part of command packet (excluding the OPCODE). */ | 1727 | /* Build header part of command packet (excluding the OPCODE). */ |
@@ -2343,11 +2343,10 @@ sufficient_dsds: | |||
2343 | else | 2343 | else |
2344 | req->cnt = req->length - | 2344 | req->cnt = req->length - |
2345 | (req->ring_index - cnt); | 2345 | (req->ring_index - cnt); |
2346 | if (req->cnt < (req_cnt + 2)) | ||
2347 | goto queuing_error; | ||
2346 | } | 2348 | } |
2347 | 2349 | ||
2348 | if (req->cnt < (req_cnt + 2)) | ||
2349 | goto queuing_error; | ||
2350 | |||
2351 | ctx = sp->u.scmd.ctx = | 2350 | ctx = sp->u.scmd.ctx = |
2352 | mempool_alloc(ha->ctx_mempool, GFP_ATOMIC); | 2351 | mempool_alloc(ha->ctx_mempool, GFP_ATOMIC); |
2353 | if (!ctx) { | 2352 | if (!ctx) { |