cciss: Set the performant mode bit in the scsi half of the driver
authorStephen M. Cameron <scameron@beardog.cce.hp.com>
Mon, 19 Jul 2010 18:44:45 +0000 (13:44 -0500)
committerJens Axboe <jaxboe@fusionio.com>
Sat, 7 Aug 2010 16:52:10 +0000 (18:52 +0200)
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>
drivers/block/cciss_scsi.c

index 8e0a709286df6948882926f61b36dfecfc2aa801..3604b72f2af90d9c55ca205967d30af4c40d1f1c 100644 (file)
@@ -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;
 }