diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c index dcccb0bf3170a33fbb165e9d1d5d30baf6ee59bd..1a0bb230dd0395cae60d315d196dac205722034b 100644 --- a/drivers/scsi/fcoe/libfcoe.c +++ b/drivers/scsi/fcoe/libfcoe.c @@ -999,6 +999,17 @@ static void fcoe_ctlr_recv_adv(struct fcoe_ctlr *fip, struct sk_buff *skb) if (first && time_after(jiffies, fip->sol_time + sol_tov)) fcoe_ctlr_solicit(fip, NULL); + /* + * Put this FCF at the head of the list for priority among equals. + * This helps in the case of an NPV switch which insists we use + * the FCF that answers multicast solicitations, not the others that + * are sending periodic multicast advertisements. + */ + if (mtu_valid) { + list_del(&fcf->list); + list_add(&fcf->list, &fip->fcfs); + } + /* * If this is the first validated FCF, note the time and * set a timer to trigger selection.