On Wed, 2014-06-04 at 11:45 -0700, Jun Wu wrote:
> The test setup includes one host and one target. The target exposes 10
> hard drives (or 10 LUNs) on one fcoe port. The single initiator runs
> 10 fio processes simultaneously to the 10 target drives through fcoe
> vn2vn. This is a simple configuration that other people may also want
> to try.
> 
> >Exchange 0x6e4 is aborted and then target still sending frame, while
> >later should not occur but first setting up abort with 0 msec timeout
> >doesn not look correct either and it is different that 8000 ms on
> >initiator side.
> 
> Should target stop sending frame after abort? I still see a lot of 0
> msec messages on target side. Is this something that should be
> addressed?
> 
> >Reducing retries could narrow down to early aborts is the cause here,
> >can you try with REC disabled on initiator side for that using this
> >change ?
> 
> By disabling REC have you confirmed that the early aborts is the
> cause? Is the abort caused by 0 msec timeout?
> 

The 0 msec timeout still look really suspicious..

IIRC, these timeout values are exchanged in the FLOGI request packet,
and/or in a separate Request Timeout Value (RTV) packet..

It might be worthwhile to track down where these zero-length settings
are coming from, as it might be a indication of what's wrong.

How about the following patch to dump these values..?

Also just curious, have you tried running these two hosts in
point-to-point mode without the switch to see if the same types of
issues occur..? It might be useful to help isolate the problem space a
bit.

Vasu, any other ideas here..?

--nab

diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index e01a298..72b8676 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -379,6 +379,7 @@ static void fc_lport_flogi_fill(struct fc_lport *lport,
                sp->sp_tot_seq = htons(255);    /* seq. we accept */
                sp->sp_rel_off = htons(0x1f);
                sp->sp_e_d_tov = htonl(lport->e_d_tov);
+               printk("fc_lport_flogi_fill sp->sp_e_d_tov: %u\n", 
sp->sp_e_d_tov);
 
                cp->cp_rdfs = htons((u16) lport->mfs);
                cp->cp_con_seq = htons(255);
@@ -1766,7 +1767,9 @@ void fc_lport_flogi_resp(struct fc_seq *sp, struct 
fc_frame *fp,
 
        csp_flags = ntohs(flp->fl_csp.sp_features);
        r_a_tov = ntohl(flp->fl_csp.sp_r_a_tov);
+       printk("fc_lport_flogi_resp: r_a_tov: %u\n", r_a_tov);
        e_d_tov = ntohl(flp->fl_csp.sp_e_d_tov);
+       printk("fc_lport_flogi_resp: e_d_tov %u\n", e_d_tov);
        if (csp_flags & FC_SP_FT_EDTR)
                e_d_tov /= 1000000;
 
@@ -1795,6 +1798,9 @@ void fc_lport_flogi_resp(struct fc_seq *sp, struct 
fc_frame *fp,
                fc_lport_enter_dns(lport);
        }
 
+       printk("fc_lport_flogi_resp: lport->e_d_tov: %u\n", lport->e_d_tov);
+       printk("fc_lport_flogi_resp: lport->r_a_tov: %u\n", lport->r_a_tov);
+
 out:
        fc_frame_free(fp);
 err:
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 589ff9a..4cdb055 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -142,7 +142,9 @@ static struct fc_rport_priv *fc_rport_create(struct 
fc_lport *lport,
        rdata->event = RPORT_EV_NONE;
        rdata->flags = FC_RP_FLAGS_REC_SUPPORTED;
        rdata->e_d_tov = lport->e_d_tov;
+       printk("fc_rport_create: rdata->e_d_tov: %u\n", rdata->e_d_tov);
        rdata->r_a_tov = lport->r_a_tov;
+       printk("fc_rport_create: rdata->r_a_tov: %u\n", rdata->r_a_tov);
        rdata->maxframe_size = FC_MIN_MAX_PAYLOAD;
        INIT_DELAYED_WORK(&rdata->retry_work, fc_rport_timeout);
        INIT_WORK(&rdata->event_work, fc_rport_work);
@@ -286,7 +288,9 @@ static void fc_rport_work(struct work_struct *work)
                rpriv->rp_state = rdata->rp_state;
                rpriv->flags = rdata->flags;
                rpriv->e_d_tov = rdata->e_d_tov;
+               printk("fc_rport_work: rpriv->e_d_tov: %u\n", rpriv->e_d_tov);
                rpriv->r_a_tov = rdata->r_a_tov;
+               printk("rpriv->r_a_tov: rpriv->r_a_tov: %u\n", rpriv->r_a_tov);
                mutex_unlock(&rdata->rp_mutex);
 
                if (rport_ops && rport_ops->event_callback) {
@@ -638,10 +642,14 @@ static int fc_rport_login_complete(struct fc_rport_priv 
*rdata,
                 * E_D_TOV is not valid on an incoming FLOGI request.
                 */
                e_d_tov = ntohl(flogi->fl_csp.sp_e_d_tov);
+               printk("fc_rport_login_complete e_d_tov: %u\n", e_d_tov);
                if (csp_flags & FC_SP_FT_EDTR)
                        e_d_tov /= 1000000;
-               if (e_d_tov > rdata->e_d_tov)
+               if (e_d_tov > rdata->e_d_tov) {
+                       printk("fc_rport_login_complete rdata->e_d_tov %u\n",
+                               rdata->e_d_tov);
                        rdata->e_d_tov = e_d_tov;
+               }
        }
        rdata->maxframe_size = fc_plogi_get_maxframe(flogi, lport->mfs);
        return 0;
@@ -690,8 +698,11 @@ static void fc_rport_flogi_resp(struct fc_seq *sp, struct 
fc_frame *fp,
        if (!flogi)
                goto bad;
        r_a_tov = ntohl(flogi->fl_csp.sp_r_a_tov);
-       if (r_a_tov > rdata->r_a_tov)
+       printk("fc_rport_flogi_resp r_a_tov: %u\n", r_a_tov);
+       if (r_a_tov > rdata->r_a_tov) {
+               printk("fc_rport_flogi_resp rdata->r_a_tov: %u\n", 
rdata->r_a_tov);
                rdata->r_a_tov = r_a_tov;
+       }
 
        if (rdata->ids.port_name < lport->wwpn)
                fc_rport_enter_plogi(rdata);
@@ -971,6 +982,7 @@ static void fc_rport_enter_plogi(struct fc_rport_priv 
*rdata)
                return;
        }
        rdata->e_d_tov = lport->e_d_tov;
+       printk("fc_rport_enter_plogi: rdata->e_d_tov: %u\n", rdata->e_d_tov);
 
        if (!lport->tt.elsct_send(lport, rdata->ids.port_id, fp, ELS_PLOGI,
                                  fc_rport_plogi_resp, rdata,
@@ -1183,12 +1195,16 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct 
fc_frame *fp,
                        if (tov == 0)
                                tov = 1;
                        rdata->r_a_tov = tov;
+                       printk("fc_rport_rtv_resp rdata->r_a_tov: %u\n",
+                               rdata->r_a_tov);
                        tov = ntohl(rtv->rtv_e_d_tov);
                        if (toq & FC_ELS_RTV_EDRES)
                                tov /= 1000000;
                        if (tov == 0)
                                tov = 1;
                        rdata->e_d_tov = tov;
+                       printk("fc_rport_rtv_resp rdata->e_d_tov: %u\n",
+                               rdata->e_d_tov);
                }
        }


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

Reply via email to