diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2009-10-13 18:16:51 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-12-04 13:00:13 -0500 |
commit | 531a82d1bd73152130b9e3b1f3e2e875c6cff7cd (patch) | |
tree | 4d906a9e333764b7446847ee45d72891ec974ce4 | |
parent | 9ca1d01f7aa035553501a34054ea17e7537eb07e (diff) |
[SCSI] qla2xxx: Properly re-register FC4/FDMI after physical and logical link disruptions.
Original code would not register FC4 nor FDMI information after a
logical tear-down of an VFC link. Code now triggers registration
date during processing of a 'Report ID Acquisition IOCB', which
is submitted after a FLOGI or FDISC completes.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 1 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 11 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mid.c | 2 |
3 files changed, 8 insertions, 6 deletions
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index c8b24b65e529..b74924b279ef 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -277,7 +277,6 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha) | |||
277 | vha->marker_needed = 0; | 277 | vha->marker_needed = 0; |
278 | ha->isp_abort_cnt = 0; | 278 | ha->isp_abort_cnt = 0; |
279 | ha->beacon_blink_led = 0; | 279 | ha->beacon_blink_led = 0; |
280 | set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); | ||
281 | 280 | ||
282 | set_bit(0, ha->req_qid_map); | 281 | set_bit(0, ha->req_qid_map); |
283 | set_bit(0, ha->rsp_qid_map); | 282 | set_bit(0, ha->rsp_qid_map); |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 791f792a05ce..05d595d9a7ef 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -2782,8 +2782,10 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, | |||
2782 | vp_idx, MSB(stat), | 2782 | vp_idx, MSB(stat), |
2783 | rptid_entry->port_id[2], rptid_entry->port_id[1], | 2783 | rptid_entry->port_id[2], rptid_entry->port_id[1], |
2784 | rptid_entry->port_id[0])); | 2784 | rptid_entry->port_id[0])); |
2785 | if (vp_idx == 0) | 2785 | |
2786 | return; | 2786 | vp = vha; |
2787 | if (vp_idx == 0 && (MSB(stat) != 1)) | ||
2788 | goto reg_needed; | ||
2787 | 2789 | ||
2788 | if (MSB(stat) == 1) { | 2790 | if (MSB(stat) == 1) { |
2789 | DEBUG2(printk("scsi(%ld): Could not acquire ID for " | 2791 | DEBUG2(printk("scsi(%ld): Could not acquire ID for " |
@@ -2806,8 +2808,11 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, | |||
2806 | * response queue. Handle it in dpc context. | 2808 | * response queue. Handle it in dpc context. |
2807 | */ | 2809 | */ |
2808 | set_bit(VP_IDX_ACQUIRED, &vp->vp_flags); | 2810 | set_bit(VP_IDX_ACQUIRED, &vp->vp_flags); |
2809 | set_bit(VP_DPC_NEEDED, &vha->dpc_flags); | ||
2810 | 2811 | ||
2812 | reg_needed: | ||
2813 | set_bit(REGISTER_FC4_NEEDED, &vp->dpc_flags); | ||
2814 | set_bit(REGISTER_FDMI_NEEDED, &vp->dpc_flags); | ||
2815 | set_bit(VP_DPC_NEEDED, &vha->dpc_flags); | ||
2811 | qla2xxx_wake_dpc(vha); | 2816 | qla2xxx_wake_dpc(vha); |
2812 | } | 2817 | } |
2813 | } | 2818 | } |
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index e07b3617f019..a47d34308a3a 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c | |||
@@ -382,8 +382,6 @@ qla24xx_create_vhost(struct fc_vport *fc_vport) | |||
382 | vha->mgmt_svr_loop_id = 10 + vha->vp_idx; | 382 | vha->mgmt_svr_loop_id = 10 + vha->vp_idx; |
383 | 383 | ||
384 | vha->dpc_flags = 0L; | 384 | vha->dpc_flags = 0L; |
385 | set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); | ||
386 | set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags); | ||
387 | 385 | ||
388 | /* | 386 | /* |
389 | * To fix the issue of processing a parent's RSCN for the vport before | 387 | * To fix the issue of processing a parent's RSCN for the vport before |