50 lines
1.8 KiB
Diff
50 lines
1.8 KiB
Diff
From 6c7d98f7988abe6d28de0acd0ee0eaecea61ac79 Mon Sep 17 00:00:00 2001
|
|
From: Eric Dumazet <edumazet@google.com>
|
|
Date: Fri, 13 Jul 2012 03:19:41 +0000
|
|
Subject: [PATCH 11/13] be2net: dont pull too much data in skb linear part
|
|
|
|
commit ac1ae5f33fd225f46da0072e2091962410a0431b upstream.
|
|
|
|
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@google.com>
|
|
Acked-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
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 ec72318..e2e2472 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 =
|
|
--
|
|
1.7.10.4
|
|
|