diff options
author | Stephen M. Cameron <scameron@beardog.cce.hp.com> | 2010-07-19 13:44:45 -0500 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2010-08-07 18:52:10 +0200 |
commit | 373b45f7b691bf7faafeed46b0b3dcd5b281cd5f (patch) | |
tree | f7a1e66e95c0df96d5b58c2a0055d824ddf9a1c2 /drivers/block | |
parent | d54142c71f05b608b7360d80bdab74eed0f17a98 (diff) | |
download | linux-373b45f7b691bf7faafeed46b0b3dcd5b281cd5f.tar.gz linux-373b45f7b691bf7faafeed46b0b3dcd5b281cd5f.tar.bz2 linux-373b45f7b691bf7faafeed46b0b3dcd5b281cd5f.zip |
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')
-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, unsigned char *buf, int bufsize, int direction) { - unsigned long flags; DECLARE_COMPLETION_ONSTACK(wait); cp->cmd_type = CMD_IOCTL_PEND; // treat this like an ioctl @@ -948,14 +947,7 @@ cciss_scsi_do_simple_cmd(ctlr_info_t *c, bufsize, DMA_FROM_DEVICE); cp->waiting = &wait; - - /* Put the request on the tail of the request queue */ - spin_lock_irqsave(CCISS_LOCK(c->ctlr), flags); - addQ(&c->reqQ, cp); - c->Qdepth++; - start_io(c); - spin_unlock_irqrestore(CCISS_LOCK(c->ctlr), flags); - + enqueue_cmd_and_start_io(c, cp); wait_for_completion(&wait); /* undo the dma mapping */ @@ -1525,15 +1517,7 @@ cciss_scsi_queue_command (struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd break; } cciss_scatter_gather(c, cp, cmd); - - /* Put the request on the tail of the request queue */ - - spin_lock_irqsave(CCISS_LOCK(ctlr), flags); - addQ(&c->reqQ, cp); - c->Qdepth++; - start_io(c); - spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags); - + enqueue_cmd_and_start_io(c, cp); /* the cmd'll come back via intr handler in complete_scsi_command() */ return 0; } |