> When a CVL is received while we wait to select best FCF, we drop it > without handling it. This causes initiator and the switch to go > out-of-sync. Initiator proceeds selecting one of the FCFs and tries to > send FIP FLOGI. However the switch may reject the FLOGI, as it has > cleared its internal state, and expects the initiator to start FIP > discovery protocol. Fix this condition by resetting the fcoe > controller. > > Signed-off-by: Bhanu Prakash Gollapudi <[email protected]>
Looks good...do we care to update the stats in this case? I guess not, as the link failure is already happened... Thanks, Yi Reviewed-by: Yi Zou <[email protected]> > --- > drivers/scsi/fcoe/fcoe_ctlr.c | 10 +++++++++- > 1 files changed, 9 insertions(+), 1 deletions(-) > > diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c > index 505ee73..08c3bc3 100644 > --- a/drivers/scsi/fcoe/fcoe_ctlr.c > +++ b/drivers/scsi/fcoe/fcoe_ctlr.c > @@ -1291,8 +1291,16 @@ static void fcoe_ctlr_recv_clr_vlink(struct fcoe_ctlr > *fip, > > LIBFCOE_FIP_DBG(fip, "Clear Virtual Link received\n"); > > - if (!fcf || !lport->port_id) > + if (!fcf || !lport->port_id) { > + /* > + * We are yet to select best FCF, but we got CVL in the > + * meantime. reset the ctlr and let it rediscover the FCF > + */ > + mutex_lock(&fip->ctlr_mutex); > + fcoe_ctlr_reset(fip); > + mutex_unlock(&fip->ctlr_mutex); > return; > + } > > /* > * mask of required descriptors. Validating each one clears its bit. > -- > 1.7.1 > > > _______________________________________________ > fcoe-devel mailing list > [email protected] > http://lists.open-fcoe.org/mailman/listinfo/fcoe-devel _______________________________________________ fcoe-devel mailing list [email protected] http://lists.open-fcoe.org/mailman/listinfo/fcoe-devel
