[SCSI] qla2xxx: Clear local references of rport on device loss timeout notification...
authorGiridhar Malavali <giridhar.malavali@qlogic.com>
Fri, 3 Sep 2010 22:20:55 +0000 (15:20 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Sun, 5 Sep 2010 18:36:21 +0000 (15:36 -0300)
The clearing of local references to rport was blocked when abort is
active. This code clears the local references unconditionaly upon
device loss timeout callback from FC transport.

Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/qla2xxx/qla_attr.c

index 560641aa3a5c2ec4bbe29e60619dfaf57de8ddb1..c9781050c9ed793eaa1dfae3754ff8957dfff22b 100644 (file)
@@ -1547,22 +1547,22 @@ qla2x00_dev_loss_tmo_callbk(struct fc_rport *rport)
        if (!fcport)
                return;
 
-       if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags))
-               return;
-
-       if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) {
-               qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16);
-               return;
-       }
-
        /*
         * Transport has effectively 'deleted' the rport, clear
         * all local references.
         */
        spin_lock_irq(host->host_lock);
-       fcport->rport = NULL;
+       fcport->rport = fcport->drport = NULL;
        *((fc_port_t **)rport->dd_data) = NULL;
        spin_unlock_irq(host->host_lock);
+
+       if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags))
+               return;
+
+       if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) {
+               qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16);
+               return;
+       }
 }
 
 static void