summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeng Li <lipeng321@huawei.com>2019-04-14 09:47:45 +0800
committerDavid S. Miller <davem@davemloft.net>2019-04-14 13:47:35 -0700
commitcc5ff6e90f808f9a4c8229bf2f1de0dfe5d7931c (patch)
tree36aebb88e5958e4b88ef00a6dad84be23f3cad50
parent2d0075b4a7b795bb6e6c4e392d36c023b0d0e858 (diff)
downloadlinux-cc5ff6e90f808f9a4c8229bf2f1de0dfe5d7931c.tar.gz
net: hns3: free the pending skb when clean RX ring
If there is pending skb in RX flow when close the port, and the
pending buffer is not cleaned, the new packet will be added to
the pending skb when the port opens again, and the first new
packet has error data.

This patch cleans the pending skb when clean RX ring.

Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/hisilicon/hns3/hns3_enet.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index a67dfdd05d15..923343858f51 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -3960,6 +3960,13 @@ static int hns3_clear_rx_ring(struct hns3_enet_ring *ring)
 		ring_ptr_move_fw(ring, next_to_use);
 	}
 
+	/* Free the pending skb in rx ring */
+	if (ring->skb) {
+		dev_kfree_skb_any(ring->skb);
+		ring->skb = NULL;
+		ring->pending_buf = 0;
+	}
+
 	return 0;
 }