net: hns3: fix rx path skb->truesize reporting bug
authorPeng Li <lipeng321@huawei.com>
Sat, 10 Mar 2018 03:29:26 +0000 (11:29 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Mar 2018 02:53:31 +0000 (22:53 -0400)
Original skb->truesize reports the received packet size,
not the actual buffer size NIC driver allocated(1 Page).
The linux net protocol will misjudge the true size of rx queue.

Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c

index 4dba97498b639c17cceef0975f4be92a51b108d7..94f0b92ead386f2f4db908a73b142ae211278c96 100644 (file)
@@ -2080,15 +2080,13 @@ static void hns3_nic_reuse_page(struct sk_buff *skb, int i,
        desc = &ring->desc[ring->next_to_clean];
        size = le16_to_cpu(desc->rx.size);
 
-       if (twobufs) {
-               truesize = hnae_buf_size(ring);
-       } else {
-               truesize = ALIGN(size, L1_CACHE_BYTES);
+       truesize = hnae_buf_size(ring);
+
+       if (!twobufs)
                last_offset = hnae_page_size(ring) - hnae_buf_size(ring);
-       }
 
        skb_add_rx_frag(skb, i, desc_cb->priv, desc_cb->page_offset + pull_len,
-                       size - pull_len, truesize - pull_len);
+                       size - pull_len, truesize);
 
         /* Avoid re-using remote pages,flag default unreuse */
        if (unlikely(page_to_nid(desc_cb->priv) != numa_node_id()))