[SCSI] libfcoe: fix checking of conflicting fabrics in fcoe_ctlr_select()
The check for conflicting fabrics in fcoe_ctlr_select() ignores any FCFs that aren't usable. This is a minor problem now but becomes more pronounced after later patches. Signed-off-by: Joe Eykholt <jeykholt@cisco.com> Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
c47036a7cd
commit
b69ae0ae3f
|
@ -1361,12 +1361,22 @@ static void fcoe_ctlr_select(struct fcoe_ctlr *fip)
|
||||||
{
|
{
|
||||||
struct fcoe_fcf *fcf;
|
struct fcoe_fcf *fcf;
|
||||||
struct fcoe_fcf *best = NULL;
|
struct fcoe_fcf *best = NULL;
|
||||||
|
struct fcoe_fcf *first;
|
||||||
|
|
||||||
|
first = list_first_entry(&fip->fcfs, struct fcoe_fcf, list);
|
||||||
|
|
||||||
list_for_each_entry(fcf, &fip->fcfs, list) {
|
list_for_each_entry(fcf, &fip->fcfs, list) {
|
||||||
LIBFCOE_FIP_DBG(fip, "consider FCF for fab %16.16llx "
|
LIBFCOE_FIP_DBG(fip, "consider FCF for fab %16.16llx "
|
||||||
"VFID %d map %x val %d\n",
|
"VFID %d map %x val %d\n",
|
||||||
fcf->fabric_name, fcf->vfid,
|
fcf->fabric_name, fcf->vfid,
|
||||||
fcf->fc_map, fcoe_ctlr_mtu_valid(fcf));
|
fcf->fc_map, fcoe_ctlr_mtu_valid(fcf));
|
||||||
|
if (fcf->fabric_name != first->fabric_name ||
|
||||||
|
fcf->vfid != first->vfid ||
|
||||||
|
fcf->fc_map != first->fc_map) {
|
||||||
|
LIBFCOE_FIP_DBG(fip, "Conflicting fabric, VFID, "
|
||||||
|
"or FC-MAP\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (!fcoe_ctlr_fcf_usable(fcf)) {
|
if (!fcoe_ctlr_fcf_usable(fcf)) {
|
||||||
LIBFCOE_FIP_DBG(fip, "FCF for fab %16.16llx "
|
LIBFCOE_FIP_DBG(fip, "FCF for fab %16.16llx "
|
||||||
"map %x %svalid %savailable\n",
|
"map %x %svalid %savailable\n",
|
||||||
|
@ -1380,13 +1390,6 @@ static void fcoe_ctlr_select(struct fcoe_ctlr *fip)
|
||||||
best = fcf;
|
best = fcf;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (fcf->fabric_name != best->fabric_name ||
|
|
||||||
fcf->vfid != best->vfid ||
|
|
||||||
fcf->fc_map != best->fc_map) {
|
|
||||||
LIBFCOE_FIP_DBG(fip, "Conflicting fabric, VFID, "
|
|
||||||
"or FC-MAP\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (fcf->pri < best->pri)
|
if (fcf->pri < best->pri)
|
||||||
best = fcf;
|
best = fcf;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue