aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorChetan Loke <loke.chetan@gmail.com>2012-05-15 14:34:09 -0400
committerJames Bottomley <JBottomley@Parallels.com>2012-05-22 06:12:47 -0400
commita6eb3c9f73deaa318f17a19c7ad012b3ebe750c3 (patch)
tree686ce06b73984e2364f633d105de8f60546991bc /drivers/scsi
parent9e336520c5f673d911642035a5d84fa331ff127f (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.c19
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) {