[SCSI] qla2xxx: Properly re-register FC4/FDMI after physical and logical link disrupt...
authorAndrew Vasquez <andrew.vasquez@qlogic.com>
Tue, 13 Oct 2009 22:16:51 +0000 (15:16 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 4 Dec 2009 18:00:13 +0000 (12:00 -0600)
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>
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_mid.c

index c8b24b6..b74924b 100644 (file)
@@ -277,7 +277,6 @@ qla2x00_initialize_adapter(scsi_qla_host_t *vha)
        vha->marker_needed = 0;
        ha->isp_abort_cnt = 0;
        ha->beacon_blink_led = 0;
-       set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags);
 
        set_bit(0, ha->req_qid_map);
        set_bit(0, ha->rsp_qid_map);
index 791f792..05d595d 100644 (file)
@@ -2782,8 +2782,10 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
                    vp_idx, MSB(stat),
                    rptid_entry->port_id[2], rptid_entry->port_id[1],
                    rptid_entry->port_id[0]));
-               if (vp_idx == 0)
-                       return;
+
+               vp = vha;
+               if (vp_idx == 0 && (MSB(stat) != 1))
+                       goto reg_needed;
 
                if (MSB(stat) == 1) {
                        DEBUG2(printk("scsi(%ld): Could not acquire ID for "
@@ -2806,8 +2808,11 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,
                 * response queue. Handle it in dpc context.
                 */
                set_bit(VP_IDX_ACQUIRED, &vp->vp_flags);
-               set_bit(VP_DPC_NEEDED, &vha->dpc_flags);
 
+reg_needed:
+               set_bit(REGISTER_FC4_NEEDED, &vp->dpc_flags);
+               set_bit(REGISTER_FDMI_NEEDED, &vp->dpc_flags);
+               set_bit(VP_DPC_NEEDED, &vha->dpc_flags);
                qla2xxx_wake_dpc(vha);
        }
 }
index e07b361..a47d343 100644 (file)
@@ -382,8 +382,6 @@ qla24xx_create_vhost(struct fc_vport *fc_vport)
        vha->mgmt_svr_loop_id = 10 + vha->vp_idx;
 
        vha->dpc_flags = 0L;
-       set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags);
-       set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags);
 
        /*
         * To fix the issue of processing a parent's RSCN for the vport before