[SCSI] ipr: Remove extended delay bit on GSCSI reads/writes ops
authorWendy Xiong <wenxiong@linux.vnet.ibm.com>
Tue, 21 Jan 2014 18:16:39 +0000 (12:16 -0600)
committerJames Bottomley <JBottomley@Parallels.com>
Wed, 19 Mar 2014 22:04:38 +0000 (15:04 -0700)
This patch removes extended delay bit on GSCSI reads/writes ops, the
performance will be significanly better.

Signed-off-by: Wen Xiong <wenxiong@linux.vnet.ibm.com>
Acked-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/ipr.c
drivers/scsi/ipr.h

index 3f5b56a998920e02087fc79767add1c6d3d81612..7e1276a35e41a159763420a0c90931f4fc4ddfb4 100644 (file)
@@ -1143,6 +1143,7 @@ static void ipr_init_res_entry(struct ipr_resource_entry *res,
        res->add_to_ml = 0;
        res->del_from_ml = 0;
        res->resetting_device = 0;
+       res->reset_occurred = 0;
        res->sdev = NULL;
        res->sata_port = NULL;
 
@@ -5015,6 +5016,7 @@ static int __ipr_eh_dev_reset(struct scsi_cmnd *scsi_cmd)
        } else
                rc = ipr_device_reset(ioa_cfg, res);
        res->resetting_device = 0;
+       res->reset_occurred = 1;
 
        LEAVE;
        return rc ? FAILED : SUCCESS;
@@ -6183,8 +6185,10 @@ static int ipr_queuecommand(struct Scsi_Host *shost,
                        ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK;
 
                ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_LINK_DESC;
-               if (ipr_is_gscsi(res))
+               if (ipr_is_gscsi(res) && res->reset_occurred) {
+                       res->reset_occurred = 0;
                        ioarcb->cmd_pkt.flags_lo |= IPR_FLAGS_LO_DELAY_AFTER_RST;
+               }
                ioarcb->cmd_pkt.flags_lo |= IPR_FLAGS_LO_ALIGNED_BFR;
                ioarcb->cmd_pkt.flags_lo |= ipr_get_task_attributes(scsi_cmd);
        }
index 9ce38a22647e7a842afe1ea96da1008f12b3baa6..f66645c73492a797e9fd20ea8136dad871d2086a 100644 (file)
@@ -1252,6 +1252,7 @@ struct ipr_resource_entry {
        u8 add_to_ml:1;
        u8 del_from_ml:1;
        u8 resetting_device:1;
+       u8 reset_occurred:1;
 
        u32 bus;                /* AKA channel */
        u32 target;             /* AKA id */