aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2009-10-13 18:16:51 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-12-04 13:00:13 -0500
commit531a82d1bd73152130b9e3b1f3e2e875c6cff7cd (patch)
tree4d906a9e333764b7446847ee45d72891ec974ce4 /drivers
parent9ca1d01f7aa035553501a34054ea17e7537eb07e (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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c1
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c11
-rw-r--r--drivers/scsi/qla2xxx/qla_mid.c2
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
2812reg_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