[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c15c3047-d45b-4781-9598-ffe24d3b2a1c@exht2.ad.emulex.com>
Date: Mon, 16 Jul 2012 07:02:25 -0700
From: <Padmanabh.Ratnakar@...lex.Com>
To: <eric.dumazet@...il.com>
CC: <netdev@...r.kernel.org>, <Sathya.Perla@...lex.Com>
Subject: RE: [PATCH net-next] be2net: dont pull too much data in skb linear
part
> -----Original Message-----
> From: Eric Dumazet [mailto:eric.dumazet@...il.com]
> Sent: Friday, July 13, 2012 6:50 PM
> To: Ratnakar, Padmanabh
> Cc: netdev
> Subject: [PATCH net-next] be2net: dont pull too much data in skb linear part
>
> From: Eric Dumazet <edumazet@...gle.com>
>
> skb_fill_rx_data() pulls 64 byte of data in skb->data
>
> Its too much for TCP (with no options) on IPv4, as total size of headers is 14 +
> 40 = 54
>
> This means tcp stack and splice() are suboptimal, since tcp payload is in part in
> tcp->data, and in part in skb frag.
>
> Signed-off-by: Eric Dumazet <edumazet@...gle.com>
> ---
> drivers/net/ethernet/emulex/benet/be_main.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/emulex/benet/be_main.c
> b/drivers/net/ethernet/emulex/benet/be_main.c
> index 7e989d0..f18375c 100644
> --- a/drivers/net/ethernet/emulex/benet/be_main.c
> +++ b/drivers/net/ethernet/emulex/benet/be_main.c
> @@ -1228,16 +1228,16 @@ static void skb_fill_rx_data(struct be_rx_obj
> *rxo, struct sk_buff *skb,
> /* Copy data in the first descriptor of this completion */
> curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
>
> - /* Copy the header portion into skb_data */
> - hdr_len = min(BE_HDR_LEN, curr_frag_len);
> - memcpy(skb->data, start, hdr_len);
> skb->len = curr_frag_len;
> if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
> + memcpy(skb->data, start, curr_frag_len);
> /* Complete packet has now been moved to data */
> put_page(page_info->page);
> skb->data_len = 0;
> skb->tail += curr_frag_len;
> } else {
> + hdr_len = ETH_HLEN;
> + memcpy(skb->data, start, hdr_len);
> skb_shinfo(skb)->nr_frags = 1;
> skb_frag_set_page(skb, 0, page_info->page);
> skb_shinfo(skb)->frags[0].page_offset =
>
Change looks good to me. I tested this and it is working.
Thanks
Acked-by: Padmanabh Ratnakar <padmanabh.ratnakar@...lex.com>
Powered by blists - more mailing lists