Skip to content

Commit 09b97dd

Browse files
mfijalkoKernel Patches Daemon
authored andcommitted
xsk: recycle buffer in case Rx queue was full
Add missing xsk_buff_free() call when __xsk_rcv_zc() failed to produce descriptor to XSK Rx queue. Fixes: 24ea501 ("xsk: support mbuf on ZC RX") Acked-by: Magnus Karlsson <[email protected]> Signed-off-by: Maciej Fijalkowski <[email protected]>
1 parent 95b2abe commit 09b97dd

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

net/xdp/xsk.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,10 @@ static int xsk_rcv_zc(struct xdp_sock *xs, struct xdp_buff *xdp, u32 len)
167167
contd = XDP_PKT_CONTD;
168168

169169
err = __xsk_rcv_zc(xs, xskb, len, contd);
170-
if (err || likely(!frags))
171-
goto out;
170+
if (err)
171+
goto err;
172+
if (likely(!frags))
173+
return 0;
172174

173175
xskb_list = &xskb->pool->xskb_list;
174176
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)
177179
len = pos->xdp.data_end - pos->xdp.data;
178180
err = __xsk_rcv_zc(xs, pos, len, contd);
179181
if (err)
180-
return err;
182+
goto err;
181183
list_del(&pos->xskb_list_node);
182184
}
183185

184-
out:
186+
return 0;
187+
err:
188+
xsk_buff_free(xdp);
185189
return err;
186190
}
187191

0 commit comments

Comments
 (0)