On 3/22/2012 12:23 PM, Bhanu Prakash Gollapudi wrote:
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<[email protected]>
Tested-by: Ross Brattain<[email protected]>
---

    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

Vasu, This patch should do the checks you intended, and yet works with drivers that can work with mfs lower than the switch advertised value.

diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index 4f7ef76..5ec556e 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -1742,17 +1742,19 @@ void fc_lport_flogi_resp(struct fc_seq *sp, struct fc_fr

        mfs = ntohs(flp->fl_csp.sp_bb_data) &
                FC_SP_BB_DATA_MASK;
-       if (mfs >= FC_SP_MIN_MAX_PAYLOAD &&
-           mfs <= lport->mfs) {
-               lport->mfs = mfs;
-               fc_host_maxframe_size(lport->host) = mfs;
-       } else {
+
+       if (mfs < FC_SP_MIN_MAX_PAYLOAD && mfs > FC_SP_MAX_MAX_PAYLOAD) {
                FC_LPORT_DBG(lport, "FLOGI bad mfs:%hu response, "
                             "lport->mfs:%hu\n", mfs, lport->mfs);
                fc_lport_error(lport, fp);
                goto err;
        }

+       if (mfs <= lport->mfs) {
+               lport->mfs = mfs;
+               fc_host_maxframe_size(lport->host) = mfs;
+       }
+
        csp_flags = ntohs(flp->fl_csp.sp_features);
        r_a_tov = ntohl(flp->fl_csp.sp_r_a_tov);
        e_d_tov = ntohl(flp->fl_csp.sp_e_d_tov);

Let me know if you have any comments. I'll send a formal patch if this is fine with you.

Thanks,
Bhanu



Thanks
Vasu





_______________________________________________
devel mailing list
[email protected]
https://lists.open-fcoe.org/mailman/listinfo/devel



_______________________________________________
devel mailing list
[email protected]
https://lists.open-fcoe.org/mailman/listinfo/devel

Reply via email to