]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
megaraid_sas: Introduce module parameter for SCSI command timeout
authorSumit Saxena <sumit.saxena@avagotech.com>
Thu, 28 Jan 2016 15:34:34 +0000 (21:04 +0530)
committerChuck Anderson <chuck.anderson@oracle.com>
Wed, 16 Mar 2016 13:37:37 +0000 (06:37 -0700)
Orabug: 22620626

This patch will introduce module-parameter for SCSI command timeout
value and fix setting of resetwaittime beyond a value.

Signed-off-by: Kashyap Desai <kashyap.desai@avagotech.com>
Signed-off-by: Sumit Saxena <sumit.saxena@avagotech.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit e3d178ca773ff997c6c94989d0b14a2c0eae761c)
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas_base.c
drivers/scsi/megaraid/megaraid_sas_fusion.c

index 310af50c01a9289eaf5c1f6b4139c67df1aad06b..b5a3aac7e72e79a7b28371e305abf3a9c3b54a6f 100644 (file)
@@ -84,7 +84,7 @@ module_param(throttlequeuedepth, int, S_IRUGO);
 MODULE_PARM_DESC(throttlequeuedepth,
        "Adapter queue depth when throttled due to I/O timeout. Default: 16");
 
-int resetwaittime = MEGASAS_RESET_WAIT_TIME;
+unsigned int resetwaittime = MEGASAS_RESET_WAIT_TIME;
 module_param(resetwaittime, int, S_IRUGO);
 MODULE_PARM_DESC(resetwaittime, "Wait time in seconds after I/O timeout "
                 "before resetting adapter. Default: 180");
@@ -101,6 +101,10 @@ unsigned int dual_qdepth_disable;
 module_param(dual_qdepth_disable, int, S_IRUGO);
 MODULE_PARM_DESC(dual_qdepth_disable, "Disable dual queue depth feature. Default: 0");
 
+unsigned int scmd_timeout = MEGASAS_DEFAULT_CMD_TIMEOUT;
+module_param(scmd_timeout, int, S_IRUGO);
+MODULE_PARM_DESC(scmd_timeout, "scsi command timeout (10-90s), default 90s. See megasas_reset_timer.");
+
 MODULE_LICENSE("GPL");
 MODULE_VERSION(MEGASAS_VERSION);
 MODULE_AUTHOR("megaraidlinux.pdl@avagotech.com");
@@ -1851,7 +1855,7 @@ static int megasas_slave_configure(struct scsi_device *sdev)
         * The RAID firmware may require extended timeouts.
         */
        blk_queue_rq_timeout(sdev->request_queue,
-               MEGASAS_DEFAULT_CMD_TIMEOUT * HZ);
+               scmd_timeout * HZ);
 
        return 0;
 }
@@ -2646,7 +2650,7 @@ blk_eh_timer_return megasas_reset_timer(struct scsi_cmnd *scmd)
        unsigned long flags;
 
        if (time_after(jiffies, scmd->jiffies_at_alloc +
-                               (MEGASAS_DEFAULT_CMD_TIMEOUT * 2) * HZ)) {
+                               (scmd_timeout * 2) * HZ)) {
                return BLK_EH_NOT_HANDLED;
        }
 
@@ -5255,6 +5259,11 @@ static int megasas_init_fw(struct megasas_instance *instance)
                instance->throttlequeuedepth =
                                MEGASAS_THROTTLE_QUEUE_DEPTH;
 
+       if (resetwaittime > MEGASAS_RESET_WAIT_TIME)
+               resetwaittime = MEGASAS_RESET_WAIT_TIME;
+
+       if ((scmd_timeout < 10) || (scmd_timeout > MEGASAS_DEFAULT_CMD_TIMEOUT))
+               scmd_timeout = MEGASAS_DEFAULT_CMD_TIMEOUT;
 
        /* Launch SR-IOV heartbeat timer */
        if (instance->requestorId) {
index 383525c698cfe03129c86e413290bd17e85838b8..b54e0295a2e0ba74fd6d6c4c8a9b84acc9f9bdf9 100644 (file)
@@ -91,7 +91,7 @@ void megasas_start_timer(struct megasas_instance *instance,
                        struct timer_list *timer,
                         void *fn, unsigned long interval);
 extern struct megasas_mgmt_info megasas_mgmt_info;
-extern int resetwaittime;
+extern unsigned int resetwaittime;
 extern unsigned int dual_qdepth_disable;
 static void megasas_free_rdpq_fusion(struct megasas_instance *instance);
 static void megasas_free_reply_fusion(struct megasas_instance *instance);