projects
/
linux-block.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
1732ebc
)
xsk: recycle buffer in case Rx queue was full
author
Maciej Fijalkowski
<maciej.fijalkowski@intel.com>
Wed, 24 Jan 2024 19:15:52 +0000
(20:15 +0100)
committer
Alexei Starovoitov
<ast@kernel.org>
Thu, 25 Jan 2024 00:24:06 +0000
(16:24 -0800)
Add missing xsk_buff_free() call when __xsk_rcv_zc() failed to produce
descriptor to XSK Rx queue.
Fixes:
24ea50127ecf
("xsk: support mbuf on ZC RX")
Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Link:
https://lore.kernel.org/r/20240124191602.566724-2-maciej.fijalkowski@intel.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
net/xdp/xsk.c
patch
|
blob
|
blame
|
history
diff --git
a/net/xdp/xsk.c
b/net/xdp/xsk.c
index 9f13aa3353e31f9692ce41db10a977ac2614d7d8..1eadfac03cc41d35709c001a77759a23f7dbdc39 100644
(file)
--- a/
net/xdp/xsk.c
+++ b/
net/xdp/xsk.c
@@
-167,8
+167,10
@@
static int xsk_rcv_zc(struct xdp_sock *xs, struct xdp_buff *xdp, u32 len)
contd = XDP_PKT_CONTD;
err = __xsk_rcv_zc(xs, xskb, len, contd);
- if (err || likely(!frags))
- goto out;
+ if (err)
+ goto err;
+ if (likely(!frags))
+ return 0;
xskb_list = &xskb->pool->xskb_list;
list_for_each_entry_safe(pos, tmp, xskb_list, xskb_list_node) {
@@
-177,11
+179,13
@@
static int xsk_rcv_zc(struct xdp_sock *xs, struct xdp_buff *xdp, u32 len)
len = pos->xdp.data_end - pos->xdp.data;
err = __xsk_rcv_zc(xs, pos, len, contd);
if (err)
-
return
err;
+
goto
err;
list_del(&pos->xskb_list_node);
}
-out:
+ return 0;
+err:
+ xsk_buff_free(xdp);
return err;
}