[SCSI] dpt_i2o: Remove DPTI_STATE_IOCTL
authorHannes Reinecke <hare@suse.de>
Wed, 23 Oct 2013 08:51:15 +0000 (10:51 +0200)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 25 Oct 2013 10:36:26 +0000 (11:36 +0100)
scsi_block_host/scsi_unlock_host provides the required
functionality.

[jejb: checkpatch fixes]
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/dpt_i2o.c
drivers/scsi/dpti.h

index 19e1b422260a40ec648d3c2f548dfe198d9c1e07..d13517dd0c198bc52be4799eee46e0e93d23151f 100644 (file)
@@ -448,15 +448,7 @@ static int adpt_queue_lck(struct scsi_cmnd * cmd, void (*done) (struct scsi_cmnd
        }
 
        rmb();
        }
 
        rmb();
-       /*
-        * TODO: I need to block here if I am processing ioctl cmds
-        * but if the outstanding cmds all finish before the ioctl,
-        * the scsi-core will not know to start sending cmds to me again.
-        * I need to a way to restart the scsi-cores queues or should I block
-        * calling scsi_done on the outstanding cmds instead
-        * for now we don't set the IOCTL state
-        */
-       if(((pHba->state) & DPTI_STATE_IOCTL) || ((pHba->state) & DPTI_STATE_RESET)) {
+       if ((pHba->state) & DPTI_STATE_RESET) {
                pHba->host->last_reset = jiffies;
                pHba->host->resetting = 1;
                return 1;
                pHba->host->last_reset = jiffies;
                pHba->host->resetting = 1;
                return 1;
@@ -1811,21 +1803,23 @@ static int adpt_i2o_passthru(adpt_hba* pHba, u32 __user *arg)
        }
 
        do {
        }
 
        do {
-               if(pHba->host)
+               /*
+                * Stop any new commands from enterring the
+                * controller while processing the ioctl
+                */
+               if (pHba->host) {
+                       scsi_block_requests(pHba->host);
                        spin_lock_irqsave(pHba->host->host_lock, flags);
                        spin_lock_irqsave(pHba->host->host_lock, flags);
-               // This state stops any new commands from enterring the
-               // controller while processing the ioctl
-//             pHba->state |= DPTI_STATE_IOCTL;
-//             We can't set this now - The scsi subsystem sets host_blocked and
-//             the queue empties and stops.  We need a way to restart the queue
+               }
                rcode = adpt_i2o_post_wait(pHba, msg, size, FOREVER);
                if (rcode != 0)
                        printk("adpt_i2o_passthru: post wait failed %d %p\n",
                                        rcode, reply);
                rcode = adpt_i2o_post_wait(pHba, msg, size, FOREVER);
                if (rcode != 0)
                        printk("adpt_i2o_passthru: post wait failed %d %p\n",
                                        rcode, reply);
-//             pHba->state &= ~DPTI_STATE_IOCTL;
-               if(pHba->host)
+               if (pHba->host) {
                        spin_unlock_irqrestore(pHba->host->host_lock, flags);
                        spin_unlock_irqrestore(pHba->host->host_lock, flags);
-       } while(rcode == -ETIMEDOUT);  
+                       scsi_unblock_requests(pHba->host);
+               }
+       } while (rcode == -ETIMEDOUT);
 
        if(rcode){
                goto cleanup;
 
        if(rcode){
                goto cleanup;
index beded716f93f4cbf4e929e9a354bba46d4c18be2..aeb046186c84e4043e204736ba9505f856f44607 100644 (file)
@@ -202,7 +202,6 @@ struct adpt_channel {
 
 // HBA state flags
 #define DPTI_STATE_RESET       (0x01)
 
 // HBA state flags
 #define DPTI_STATE_RESET       (0x01)
-#define DPTI_STATE_IOCTL       (0x02)
 
 typedef struct _adpt_hba {
        struct _adpt_hba *next;
 
 typedef struct _adpt_hba {
        struct _adpt_hba *next;