[SCSI] qla2xxx: Prevent CPU lockups when "ql2xdontresethba" module param is set.
authorSaurav Kashyap <saurav.kashyap@qlogic.com>
Tue, 16 Aug 2011 18:31:46 +0000 (11:31 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Mon, 29 Aug 2011 07:14:55 +0000 (00:14 -0700)
Driver is not releasing the lock if ql2xdontresethba is set, this might lead
to a lockup.

Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/qla2xxx/qla_nx.c

index b03c86b..fe9db22 100644 (file)
@@ -3761,10 +3761,15 @@ qla82xx_device_state_handler(scsi_qla_host_t *vha)
                        qla82xx_idc_lock(ha);
                        break;
                case QLA82XX_DEV_NEED_RESET:
-                   if (!ql2xdontresethba)
-                       qla82xx_need_reset_handler(vha);
+                       if (!ql2xdontresethba)
+                               qla82xx_need_reset_handler(vha);
+                       else {
+                               qla82xx_idc_unlock(ha);
+                               msleep(1000);
+                               qla82xx_idc_lock(ha);
+                       }
                        dev_init_timeout = jiffies +
-                               (ha->nx_dev_init_timeout * HZ);
+                           (ha->nx_dev_init_timeout * HZ);
                        break;
                case QLA82XX_DEV_NEED_QUIESCENT:
                        qla82xx_need_qsnt_handler(vha);