diff options
author | Stephen M. Cameron <scameron@beardog.cce.hp.com> | 2010-07-19 14:44:45 -0400 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2010-08-07 12:52:10 -0400 |
commit | 373b45f7b691bf7faafeed46b0b3dcd5b281cd5f (patch) | |
tree | f7a1e66e95c0df96d5b58c2a0055d824ddf9a1c2 /drivers/block/cciss_scsi.c | |
parent | d54142c71f05b608b7360d80bdab74eed0f17a98 (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/block/cciss_scsi.c')
-rw-r--r-- | drivers/block/cciss_scsi.c | 20 |
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 | } |