fc_port_t *fcport;
        u32 i, rc;
        bool found;
-       struct fab_scan_rp *rp;
+       struct fab_scan_rp *rp, *trp;
        unsigned long flags;
        u8 recheck = 0;
+       u16 dup = 0, dup_cnt = 0;
 
        ql_dbg(ql_dbg_disc, vha, 0xffff,
            "%s enter\n", __func__);
 
        for (i = 0; i < vha->hw->max_fibre_devices; i++) {
                u64 wwn;
+               int k;
 
                rp = &vha->scan.l[i];
                found = false;
                if (wwn == 0)
                        continue;
 
+               /* Remove duplicate NPORT ID entries from switch data base */
+               for (k = i + 1; k < vha->hw->max_fibre_devices; k++) {
+                       trp = &vha->scan.l[k];
+                       if (rp->id.b24 == trp->id.b24) {
+                               dup = 1;
+                               dup_cnt++;
+                               ql_dbg(ql_dbg_disc + ql_dbg_verbose,
+                                   vha, 0xffff,
+                                   "Detected duplicate NPORT ID from switch data base: ID %06x WWN %8phN WWN %8phN\n",
+                                   rp->id.b24, rp->port_name, trp->port_name);
+                               memset(trp, 0, sizeof(*trp));
+                       }
+               }
+
                if (!memcmp(rp->port_name, vha->port_name, WWN_SIZE))
                        continue;
 
                }
        }
 
+       if (dup) {
+               ql_log(ql_log_warn, vha, 0xffff,
+                   "Detected %d duplicate NPORT ID(s) from switch data base\n",
+                   dup_cnt);
+       }
+
        /*
         * Logout all previous fabric dev marked lost, except FCP2 devices.
         */