scsi: bnx2fc: Adjust bnx2fc_npiv_create_vports for WWNNs from NVRAM that are zero.
authorChad Dupuis <chad.dupuis@cavium.com>
Mon, 26 Jun 2017 15:59:35 +0000 (08:59 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 28 Jun 2017 01:39:09 +0000 (21:39 -0400)
Some vports addresses stored in NVRAM may have zero for the WWNN.  Adjust
the WWNN that we'll use to be the same as the WWPN.

Signed-off-by: Chad Dupuis <chad.dupuis@cavium.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/bnx2fc/bnx2fc_fcoe.c

index 0d313a15e677590ca63cc1ad13ca20acd2fecacd..71dd36756ca4db8c6179e594575d30369fd71842 100644 (file)
@@ -2139,6 +2139,9 @@ static uint bnx2fc_npiv_create_vports(struct fc_lport *lport,
 {
        struct fc_vport_identifiers vpid;
        uint i, created = 0;
+       u64 wwnn = 0;
+       char wwpn_str[32];
+       char wwnn_str[32];
 
        if (npiv_tbl->count > MAX_NPIV_ENTRIES) {
                BNX2FC_HBA_DBG(lport, "Exceeded count max of npiv table\n");
@@ -2157,11 +2160,23 @@ static uint bnx2fc_npiv_create_vports(struct fc_lport *lport,
        vpid.disable = false;
 
        for (i = 0; i < npiv_tbl->count; i++) {
-               vpid.node_name = wwn_to_u64(npiv_tbl->wwnn[i]);
+               wwnn = wwn_to_u64(npiv_tbl->wwnn[i]);
+               if (wwnn == 0) {
+                       /*
+                        * If we get a 0 element from for the WWNN then assume
+                        * the WWNN should be the same as the physical port.
+                        */
+                       wwnn = lport->wwnn;
+               }
+               vpid.node_name = wwnn;
                vpid.port_name = wwn_to_u64(npiv_tbl->wwpn[i]);
                scnprintf(vpid.symbolic_name, sizeof(vpid.symbolic_name),
                    "NPIV[%u]:%016llx-%016llx",
                    created, vpid.port_name, vpid.node_name);
+               fcoe_wwn_to_str(vpid.node_name, wwnn_str, sizeof(wwnn_str));
+               fcoe_wwn_to_str(vpid.port_name, wwpn_str, sizeof(wwpn_str));
+               BNX2FC_HBA_DBG(lport, "Creating vport %s:%s.\n", wwnn_str,
+                   wwpn_str);
                if (fc_vport_create(lport->host, 0, &vpid))
                        created++;
                else