hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/net/core/gro_cells.c
....@@ -26,7 +26,7 @@
2626
2727 cell = this_cpu_ptr(gcells->cells);
2828
29
- if (skb_queue_len(&cell->napi_skbs) > netdev_max_backlog) {
29
+ if (skb_queue_len(&cell->napi_skbs) > READ_ONCE(netdev_max_backlog)) {
3030 drop:
3131 atomic_long_inc(&dev->rx_dropped);
3232 kfree_skb(skb);
....@@ -99,9 +99,14 @@
9999 struct gro_cell *cell = per_cpu_ptr(gcells->cells, i);
100100
101101 napi_disable(&cell->napi);
102
- netif_napi_del(&cell->napi);
102
+ __netif_napi_del(&cell->napi);
103103 __skb_queue_purge(&cell->napi_skbs);
104104 }
105
+ /* This barrier is needed because netpoll could access dev->napi_list
106
+ * under rcu protection.
107
+ */
108
+ synchronize_net();
109
+
105110 free_percpu(gcells->cells);
106111 gcells->cells = NULL;
107112 }