aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorStephen M. Cameron <scameron@beardog.cce.hp.com>2010-07-19 14:44:45 -0400
committerJens Axboe <jaxboe@fusionio.com>2010-08-07 12:52:10 -0400
commit373b45f7b691bf7faafeed46b0b3dcd5b281cd5f (patch)
treef7a1e66e95c0df96d5b58c2a0055d824ddf9a1c2 /drivers
parentd54142c71f05b608b7360d80bdab74eed0f17a98 (diff)
cciss: Set the performant mode bit in the scsi half of the driver
cciss: Set the performant mode bit in the scsi half of the driver In a couple of places, the performant mode bit wasn't being set in the scsi half of the driver, causing commands to seem to hang. Use enqueue_cmd_and_start_io() where appropriate. This fixes a bug that echo engage scsi > /proc/driver/cciss/cciss0 would hang. Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/block/cciss_scsi.c20
1 files changed, 2 insertions, 18 deletions
diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c
index 8e0a709286df..3604b72f2af9 100644
--- a/drivers/block/cciss_scsi.c
+++ b/drivers/block/cciss_scsi.c
@@ -921,7 +921,6 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c,
921 unsigned char *buf, int bufsize, 921 unsigned char *buf, int bufsize,
922 int direction) 922 int direction)
923{ 923{
924 unsigned long flags;
925 DECLARE_COMPLETION_ONSTACK(wait); 924 DECLARE_COMPLETION_ONSTACK(wait);
926 925
927 cp->cmd_type = CMD_IOCTL_PEND; // treat this like an ioctl 926 cp->cmd_type = CMD_IOCTL_PEND; // treat this like an ioctl
@@ -948,14 +947,7 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c,
948 bufsize, DMA_FROM_DEVICE); 947 bufsize, DMA_FROM_DEVICE);
949 948
950 cp->waiting = &wait; 949 cp->waiting = &wait;
951 950 enqueue_cmd_and_start_io(c, cp);
952 /* Put the request on the tail of the request queue */
953 spin_lock_irqsave(CCISS_LOCK(c->ctlr), flags);
954 addQ(&c->reqQ, cp);
955 c->Qdepth++;
956 start_io(c);
957 spin_unlock_irqrestore(CCISS_LOCK(c->ctlr), flags);
958
959 wait_for_completion(&wait); 951 wait_for_completion(&wait);
960 952
961 /* undo the dma mapping */ 953 /* undo the dma mapping */
@@ -1525,15 +1517,7 @@ cciss_scsi_queue_command (struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd
1525 break; 1517 break;
1526 } 1518 }
1527 cciss_scatter_gather(c, cp, cmd); 1519 cciss_scatter_gather(c, cp, cmd);
1528 1520 enqueue_cmd_and_start_io(c, cp);
1529 /* Put the request on the tail of the request queue */
1530
1531 spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1532 addQ(&c->reqQ, cp);
1533 c->Qdepth++;
1534 start_io(c);
1535 spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1536
1537 /* the cmd'll come back via intr handler in complete_scsi_command() */ 1521 /* the cmd'll come back via intr handler in complete_scsi_command() */
1538 return 0; 1522 return 0;
1539} 1523}