[SCSI] mptsas : Send DID_NO_CONNECT for pending IOs of removed device
authorKashyap, Desai <kashyap.desai@lsi.com>
Wed, 2 Sep 2009 06:15:53 +0000 (11:45 +0530)
committerJames Bottomley <James.Bottomley@suse.de>
Sat, 12 Sep 2009 14:35:28 +0000 (09:35 -0500)
Driver is modified to return DID_NO_CONNECT for all pending I/O
requests for bus type SAS, if it founds the target is removed at
the firmware level.

Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/message/fusion/mptscsih.c

index 0e402eb..c295786 100644 (file)
@@ -628,6 +628,16 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                return 1;
        }
 
+       if (ioc->bus_type == SAS) {
+               VirtDevice *vdevice = sc->device->hostdata;
+
+               if (!vdevice || !vdevice->vtarget ||
+                   vdevice->vtarget->deleted) {
+                       sc->result = DID_NO_CONNECT << 16;
+                       goto out;
+               }
+       }
+
        sc->host_scribble = NULL;
        sc->result = DID_OK << 16;              /* Set default reply as OK */
        pScsiReq = (SCSIIORequest_t *) mf;
@@ -892,7 +902,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
 #endif
 
        } /* end of address reply case */
-
+out:
        /* Unmap the DMA buffers, if any. */
        scsi_dma_unmap(sc);