On Fri, 2010-11-12 at 14:46 -0800, Joe Eykholt wrote:
> 
> On 11/11/10 5:10 PM, Nicholas A. Bellinger wrote:
> > On Thu, 2010-11-11 at 17:07 -0800, Joe Eykholt wrote:
> >>
> >> On 11/11/10 5:00 PM, Nicholas A. Bellinger wrote:
> >>> On Wed, 2010-11-10 at 17:44 -0800, Kiran Patil wrote:
> >>>> From: Kiran Patil <[email protected]>
> >>>>
> >>>> Problem: Existing implementation of TCM/LIO target isn't taking 
> >>>> advantage of underlying HW (NIC)
> >>>>          Large Send Offload (LSO) feature. Unable to use non-linear SKBs 
> >>>> for CONTROL_NONSG CDBs
> >>>>          such as INQUIRY, etc...
> >>>>
> >>>> Fix:     Enhance function (ft_queue_data_in) which sends data back to 
> >>>> initiator to make use of
> >>>>          LSO feature of underlying HW and fix the issues related to 
> >>>> CONTROL_NONSG, where code
> >>>>          was unable to map TCM provided buffer (t_task_buf) as 
> >>>> non-linear SKB.
> >>>>
> >>>> Technical Details: Enhancement benefits in all threee cases , use_sg, 
> >>>> mem, and task_buf. This changes
> >>>>          are applicable only for all CDBs (DATA/CONTROL SG/NONSG).
> >>>>          - Addressed comments from Joe w.r.t checking and making use_sg 
> >>>> = 0 only
> >>>>            for DATA_SG whereas it is applicale for 
> >>>> CONTROL_SG/CONTROL_NONSG.
> >>>>          - Made the prink rate limited (in case where "unable to send 
> >>>> frame")
> >>>>          - Fixed 2 issues/bugs related to CONTROL_NONSG and non-linear 
> >>>> SKB.
> >>>>          - Added a BUG_ON(!page)
> >>>>
> >>>> Dependencies: This depends on TCM and Joe's FC4 patches for TCM
> >>>>
> >>>> Signed-off-by: Kiran Patil <[email protected]>
> >>>> Signed-off-by: Yi Zou <[email protected]>
> >>>
> >>> Btw, I think this patch looks good guys..
> >>>
> >>> Joe, can I get your ACK and get this merged into lio-core-2.6.git for
> >>> testing..?
> >>
> >> I reviewed it but didn't test it.  Based on that, I'll give my ack.
> >>
> >> Acked-by: Joe Eykholt <[email protected]>
> >>
> > 
> > Thanks Joe!  Commited as:
> > 
> > [tcm_fc_ddp_offload b035e31] TCM/OpenFCoE : Added Large Send Offload
> >  Author: Kiran Patil <[email protected]>
> >  1 files changed, 37 insertions(+), 7 deletions(-)
> > 
> > and pushed into lio-core-2.6.git/tcm_fc_ddp_offload for testing along
> > with the latest lio-4.0 changes from hch.
> > 
> > Thanks Kiran and Yi!
> > 
> > --nab
> > 

<SNIP>

> >>>> @@ -167,7 +191,8 @@ int ft_queue_data_in(struct se_cmd *se_cmd)
> >>>>                  frame_len -= tlen;
> >>>>                  remaining -= tlen;
> >>>>  
> >>>> -                if (frame_len)
> >>>> +                if (frame_len &&
> >>>> +                    (skb_shinfo(fp_skb(fp))->nr_frags < 
> >>>> FC_FRAME_SG_LEN))
> >>>>                          continue;
> 
> If we fall through at this point, we should set frame_len to 0, so that
> we'll get a new frame next time around the loop.  Previously frame_len would
> be 0 at this point, but if we limited out (very correctly) on the SG_LEN
> check, then we should set frame_len to 0 here.  I'm testing a similar fix
> for fcst and ran into this.
> 

Thanks for reporting Joe.  Below is the patch being pushed to
lio-core-2.6.git/tcm_fc_ddp_offload now..

Also, this needs to be fixed in non tcm_fc_ddp_offload tcm_fc code as
well, yes..?


>From 437651c709056ce3a6c327bb0a74dad518039335 Mon Sep 17 00:00:00 2001
From: Nicholas Bellinger <[email protected]>
Date: Fri, 12 Nov 2010 23:40:58 +0000
Subject: [PATCH] tcm_fc: Clear frame_len before skipping to next frame

If we fall through at this point, we should set frame_len to 0, so that
we'll get a new frame next time around the loop.  Previously frame_len would
be 0 at this point, but if we limited out (very correctly) on the SG_LEN
check, then we should set frame_len to 0 here.

Reported-by: Joe Eykholt <[email protected]>
Signed-off-by: Nicholas A. Bellinger <[email protected]>
---
 drivers/target/tcm_fc/tfc_io.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c
index 4c3c0ef..b3c7a28 100644
--- a/drivers/target/tcm_fc/tfc_io.c
+++ b/drivers/target/tcm_fc/tfc_io.c
@@ -192,8 +192,10 @@ int ft_queue_data_in(struct se_cmd *se_cmd)
                remaining -= tlen;

                if (frame_len &&
-                   (skb_shinfo(fp_skb(fp))->nr_frags < FC_FRAME_SG_LEN))
+                   (skb_shinfo(fp_skb(fp))->nr_frags < FC_FRAME_SG_LEN)) {
+                       frame_len = 0;
                        continue;
+               }
                if (!remaining)
                        f_ctl |= FC_FC_END_SEQ;
                fc_fill_fc_hdr(fp, FC_RCTL_DD_SOL_DATA, ep->did, ep->sid,
-- 
1.7.2.3



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

Reply via email to