aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2011-10-13 02:31:02 -0400
committerDavid S. Miller <davem@davemloft.net>2011-10-13 16:05:07 -0400
commitbdb28a97f46b5307e6e9351de52a9dd03e711a2f (patch)
tree279ed51e9bd704630f6399813ae7f5e7e3ebfab7
parent87fb4b7b533073eeeaed0b6bf7c2328995f6c075 (diff)
be2net: fix truesize errors
Fix skb truesize underestimations of this driver. Each frag truesize is exactly rx_frag_size bytes. (2048 bytes per default) A driver should not use "sizeof(struct sk_buff)" at all. Signed-off-by: Eric Dumazet <eric.dumazet> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 816ce56de7ac..679b8041e43a 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -1071,6 +1071,7 @@ static void skb_fill_rx_data(struct be_adapter *adapter, struct be_rx_obj *rxo,
1071 page_info->page_offset + hdr_len; 1071 page_info->page_offset + hdr_len;
1072 skb_shinfo(skb)->frags[0].size = curr_frag_len - hdr_len; 1072 skb_shinfo(skb)->frags[0].size = curr_frag_len - hdr_len;
1073 skb->data_len = curr_frag_len - hdr_len; 1073 skb->data_len = curr_frag_len - hdr_len;
1074 skb->truesize += rx_frag_size;
1074 skb->tail += hdr_len; 1075 skb->tail += hdr_len;
1075 } 1076 }
1076 page_info->page = NULL; 1077 page_info->page = NULL;
@@ -1103,7 +1104,7 @@ static void skb_fill_rx_data(struct be_adapter *adapter, struct be_rx_obj *rxo,
1103 skb_shinfo(skb)->frags[j].size += curr_frag_len; 1104 skb_shinfo(skb)->frags[j].size += curr_frag_len;
1104 skb->len += curr_frag_len; 1105 skb->len += curr_frag_len;
1105 skb->data_len += curr_frag_len; 1106 skb->data_len += curr_frag_len;
1106 1107 skb->truesize += rx_frag_size;
1107 remaining -= curr_frag_len; 1108 remaining -= curr_frag_len;
1108 index_inc(&rxcp->rxq_idx, rxq->len); 1109 index_inc(&rxcp->rxq_idx, rxq->len);
1109 page_info->page = NULL; 1110 page_info->page = NULL;
@@ -1133,7 +1134,6 @@ static void be_rx_compl_process(struct be_adapter *adapter,
1133 else 1134 else
1134 skb_checksum_none_assert(skb); 1135 skb_checksum_none_assert(skb);
1135 1136
1136 skb->truesize = skb->len + sizeof(struct sk_buff);
1137 skb->protocol = eth_type_trans(skb, netdev); 1137 skb->protocol = eth_type_trans(skb, netdev);
1138 if (adapter->netdev->features & NETIF_F_RXHASH) 1138 if (adapter->netdev->features & NETIF_F_RXHASH)
1139 skb->rxhash = rxcp->rss_hash; 1139 skb->rxhash = rxcp->rss_hash;
@@ -1181,7 +1181,7 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter,
1181 put_page(page_info->page); 1181 put_page(page_info->page);
1182 } 1182 }
1183 skb_shinfo(skb)->frags[j].size += curr_frag_len; 1183 skb_shinfo(skb)->frags[j].size += curr_frag_len;
1184 1184 skb->truesize += rx_frag_size;
1185 remaining -= curr_frag_len; 1185 remaining -= curr_frag_len;
1186 index_inc(&rxcp->rxq_idx, rxq->len); 1186 index_inc(&rxcp->rxq_idx, rxq->len);
1187 memset(page_info, 0, sizeof(*page_info)); 1187 memset(page_info, 0, sizeof(*page_info));
@@ -1191,7 +1191,6 @@ static void be_rx_compl_process_gro(struct be_adapter *adapter,
1191 skb_shinfo(skb)->nr_frags = j + 1; 1191 skb_shinfo(skb)->nr_frags = j + 1;
1192 skb->len = rxcp->pkt_size; 1192 skb->len = rxcp->pkt_size;
1193 skb->data_len = rxcp->pkt_size; 1193 skb->data_len = rxcp->pkt_size;
1194 skb->truesize += rxcp->pkt_size;
1195 skb->ip_summed = CHECKSUM_UNNECESSARY; 1194 skb->ip_summed = CHECKSUM_UNNECESSARY;
1196 if (adapter->netdev->features & NETIF_F_RXHASH) 1195 if (adapter->netdev->features & NETIF_F_RXHASH)
1197 skb->rxhash = rxcp->rss_hash; 1196 skb->rxhash = rxcp->rss_hash;