summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--net/xdp/xsk.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
index d706b1e0bf60..06ee260f3afc 100644
--- a/net/xdp/xsk.c
+++ b/net/xdp/xsk.c
@@ -976,9 +976,14 @@ free_err:
kfree_skb(skb);
if (err == -EOVERFLOW) {
- /* Drop the packet */
- xsk_inc_num_desc(xs->skb);
- xsk_drop_skb(xs->skb);
+ if (xs->skb) {
+ /* Drop the packet */
+ xsk_inc_num_desc(xs->skb);
+ xsk_drop_skb(xs->skb);
+ } else {
+ xsk_cq_cancel_locked(xs->pool, 1);
+ xs->tx->invalid_descs++;
+ }
xskq_cons_release(xs->tx);
} else {
/* Let application retry */