From: Maciej Fijalkowski Date: Mon, 16 Mar 2026 14:05:57 +0000 (+0100) Subject: xsk: use __xsk_rcv_zc_safe for ZC multi-buffer Rx processing X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=77378dabb50f593c756d393d8eacb0b91b758863;p=thirdparty%2Flinux.git xsk: use __xsk_rcv_zc_safe for ZC multi-buffer Rx processing Commit f620af11c27b ("xsk: avoid double checking against rx queue being full") addressed a case in copy mode, when working with multi-buffer xdp_buff, where we were peeking onto XSK Rx queue twice, to find out if there is a space to produce descriptors. Adjust ZC path to follow the same principle. Signed-off-by: Maciej Fijalkowski Acked-by: Stanislav Fomichev Acked-by: Jakub Kicinski Reviewed-by: Jason Xing Link: https://lore.kernel.org/r/20260316140557.461288-1-maciej.fijalkowski@intel.com Signed-off-by: Alexei Starovoitov --- diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c index c078c9e4b2432..fbc51a4062c48 100644 --- a/net/xdp/xsk.c +++ b/net/xdp/xsk.c @@ -196,13 +196,13 @@ static int xsk_rcv_zc(struct xdp_sock *xs, struct xdp_buff *xdp, u32 len) goto err; } - __xsk_rcv_zc(xs, xskb, len, contd); + __xsk_rcv_zc_safe(xs, xskb, len, contd); xskb_list = &xskb->pool->xskb_list; list_for_each_entry_safe(pos, tmp, xskb_list, list_node) { if (list_is_singular(xskb_list)) contd = 0; len = pos->xdp.data_end - pos->xdp.data; - __xsk_rcv_zc(xs, pos, len, contd); + __xsk_rcv_zc_safe(xs, pos, len, contd); list_del_init(&pos->list_node); }