diff options
author | Giridhar Malavali <giridhar.malavali@qlogic.com> | 2010-09-03 18:20:55 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-09-05 14:36:21 -0400 |
commit | 3fadb80b0f39b193caafeed615a219aae57279fe (patch) | |
tree | 875f9bbc7011147845be457c7cd7c6fa42101c5e /drivers/scsi/qla2xxx | |
parent | b1d46989c12ec4d93f274ca8378bb1a6014d244a (diff) |
[SCSI] qla2xxx: Clear local references of rport on device loss timeout notification from FC transport.
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>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_attr.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 560641aa3a5c..c9781050c9ed 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
@@ -1547,22 +1547,22 @@ qla2x00_dev_loss_tmo_callbk(struct fc_rport *rport) | |||
1547 | if (!fcport) | 1547 | if (!fcport) |
1548 | return; | 1548 | return; |
1549 | 1549 | ||
1550 | if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags)) | ||
1551 | return; | ||
1552 | |||
1553 | if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) { | ||
1554 | qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); | ||
1555 | return; | ||
1556 | } | ||
1557 | |||
1558 | /* | 1550 | /* |
1559 | * Transport has effectively 'deleted' the rport, clear | 1551 | * Transport has effectively 'deleted' the rport, clear |
1560 | * all local references. | 1552 | * all local references. |
1561 | */ | 1553 | */ |
1562 | spin_lock_irq(host->host_lock); | 1554 | spin_lock_irq(host->host_lock); |
1563 | fcport->rport = NULL; | 1555 | fcport->rport = fcport->drport = NULL; |
1564 | *((fc_port_t **)rport->dd_data) = NULL; | 1556 | *((fc_port_t **)rport->dd_data) = NULL; |
1565 | spin_unlock_irq(host->host_lock); | 1557 | spin_unlock_irq(host->host_lock); |
1558 | |||
1559 | if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags)) | ||
1560 | return; | ||
1561 | |||
1562 | if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) { | ||
1563 | qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); | ||
1564 | return; | ||
1565 | } | ||
1566 | } | 1566 | } |
1567 | 1567 | ||
1568 | static void | 1568 | static void |