[SCSI] mpt2sas: fix internal device reset for older firmware prior to MPI Rev K
authorKashyap, Desai <kashyap.desai@lsi.com>
Tue, 4 Jan 2011 06:04:17 +0000 (11:34 +0530)
committerJames Bottomley <James.Bottomley@suse.de>
Mon, 24 Jan 2011 15:15:38 +0000 (09:15 -0600)
The "internal device reset complete" event is not supported
for older firmware prior to MPI Rev K We added
a check in the driver so the "internal device reset" event is
ignored for older firmware.  When ignored, the tm_busy flag doesn't
get set nor cleared.  Without this fix, IO queues would be froozen
indefinetly after the "internal device reset" event, as the "complete" event
never sent to clear the flag.

Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com>
Cc: stable@kernel.org
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/mpt2sas/mpt2sas_scsih.c

index 95d82743d7b1cacfec630705ae297755b6c22f78..a16f2a05736ff3d3fd73562b01248d2372bc987e 100644 (file)
@@ -5002,6 +5002,12 @@ _scsih_sas_device_status_change_event(struct MPT2SAS_ADAPTER *ioc,
                     event_data);
 #endif
 
+       /* In MPI Revision K (0xC), the internal device reset complete was
+        * implemented, so avoid setting tm_busy flag for older firmware.
+        */
+       if ((ioc->facts.HeaderVersion >> 8) < 0xC)
+               return;
+
        if (event_data->ReasonCode !=
            MPI2_EVENT_SAS_DEV_STAT_RC_INTERNAL_DEVICE_RESET &&
           event_data->ReasonCode !=