From 718abbdca79f8ad87b359cc2cbcc4b1cb3aa6759 Mon Sep 17 00:00:00 2001 From: Sawan Chandak Date: Thu, 9 Apr 2015 15:00:07 -0400 Subject: qla2xxx: Restore physical port WWPN only, when port down detected for FA-WWPN port. For FA-WWPN is enabled port, if NPIV created on that port and, if port link is brought down, then WWPN was restored from flash for both physical and NPIV port. This will result in NPIV port and physical port sharing same WWPN. Any application refreshing ports information will not be able to scan NPIV port because of this behavior. So while restoring WWPN, only restore physical port WWPN. Signed-off-by: Sawan Chandak Signed-off-by: Himanshu Madhani Reviewed-by: Hannes Reinecke Signed-off-by: James Bottomley --- drivers/scsi/qla2xxx/qla_isr.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'drivers/scsi/qla2xxx') diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 72dfbc162856..6dc14cd782b2 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -756,14 +756,23 @@ skip_rio: /* * In case of loop down, restore WWPN from * NVRAM in case of FA-WWPN capable ISP + * Restore for Physical Port only */ - if (ha->flags.fawwpn_enabled) { - void *wwpn = ha->init_cb->port_name; + if (!vha->vp_idx) { + if (ha->flags.fawwpn_enabled) { + void *wwpn = ha->init_cb->port_name; + memcpy(vha->port_name, wwpn, WWN_SIZE); + fc_host_port_name(vha->host) = + wwn_to_u64(vha->port_name); + ql_dbg(ql_dbg_init + ql_dbg_verbose, + vha, 0x0144, "LOOP DOWN detected," + "restore WWPN %016llx\n", + wwn_to_u64(vha->port_name)); + } - memcpy(vha->port_name, wwpn, WWN_SIZE); + clear_bit(VP_CONFIG_OK, &vha->vp_flags); } - clear_bit(VP_CONFIG_OK, &vha->vp_flags); vha->device_flags |= DFLG_NO_CABLE; qla2x00_mark_all_devices_lost(vha, 1); } -- cgit v1.2.3-59-g8ed1b