On 3/22/2012 10:38 AM, Vasu Dev wrote:
On Thu, 2012-03-22 at 11:03 -0700, Bhanu Prakash Gollapudi wrote:
On 2/14/2012 5:34 PM, Vasu Dev wrote:
Currently fc_host mfs is not getting updated in
case its changed during FLOGI and that leaves fc_host
to show its initial old value in sysfs, so instead
have fc_host mfs updated along with updating lport mfs
during FLOGI.

Also in case of bad mfs during flogi, error out
instead of continuing with flogi.

Signed-off-by: Vasu Dev<vasu....@intel.com>
Tested-by: Ross Brattain<ross.b.bratt...@intel.com>
---

   drivers/scsi/libfc/fc_lport.c |    9 ++++++++-
   1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index 9a0b2a9..a992692 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -1743,8 +1743,15 @@ void fc_lport_flogi_resp(struct fc_seq *sp, struct 
fc_frame *fp,
        mfs = ntohs(flp->fl_csp.sp_bb_data)&
                FC_SP_BB_DATA_MASK;
        if (mfs>= FC_SP_MIN_MAX_PAYLOAD&&
-           mfs<   lport->mfs)
+           mfs<   lport->mfs) {
                lport->mfs = mfs;
+               fc_host_maxframe_size(lport->host) = mfs;
+       } else {
+               FC_LPORT_DBG(lport, "FLOGI bad mfs:%hu response\n", mfs);
+               fc_lport_error(lport, fp);
+               goto err;
+       }
+

Vasu, sorry for not getting back to you on this earlier, but I found
that this check does not allow the FLOGI to succeed on Broadcom devices.
We have max frame size set to 2048 even if FLOGI resp indicates 2112.

Failure with 2112 was due to existing wrong check prio to this check as
mfs<  lport->mfs and that triggered after else condition was added by
this patch. The final updated patch fixed to allow  flogi response with
2112 also by modifying check as mfs<= lport->mfs and that is the one
applied to the tree by Rob at and that should work:

http://www.open-fcoe.org/git/?p=fcoe/fcoe-next.git;a=commitdiff;h=4394b32e1728196407af14b4527abaada1b938c2;hp=355dff86cf1c0a7f054c17bf1f9dfed69ec5625e

I saw the failure with latest code (with <= change).




Even for fcoe driver, with default MTU of 1500, FLOGI is not going to
succeed.   Probably if we want to retry, we should check only for
MIN_MAX_PAYLOAD.

Modified check ensure response not to exceed n-port mfs and that should
work for this case also.

During FLOGI we advertise our mfs (Receive data field size). But switch advertised mfs in FLOGI ACC need not match with what we have. It advertises what it supports. In our case, we advertise mfs as 2K(0x800), and in FLOGI ACC switch sends 2112 (0x840). The check above fails because of this, but this doesn't mean a bad response.

Thanks,
Bhanu


Thanks
Vasu





_______________________________________________
devel mailing list
devel@open-fcoe.org
https://lists.open-fcoe.org/mailman/listinfo/devel

Reply via email to