Commit c0921e51 authored by Wojciech Lukowicz's avatar Wojciech Lukowicz Committed by Jens Axboe

io_uring: fix return value when removing provided buffers

When a request to remove buffers is submitted, and the given number to be
removed is larger than available in the specified buffer group, the
resulting CQE result will be the number of removed buffers + 1, which is
1 more than it should be.

Previously, the head was part of the list and it got removed after the
loop, so the increment was needed. Now, the head is not an element of
the list, so the increment shouldn't be there anymore.

Fixes: dbc7d452 ("io_uring: manage provided buffers strictly ordered")
Signed-off-by: default avatarWojciech Lukowicz <wlukowicz01@gmail.com>
Link: https://lore.kernel.org/r/20230401195039.404909-2-wlukowicz01@gmail.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent fd30d1cd
...@@ -228,7 +228,6 @@ static int __io_remove_buffers(struct io_ring_ctx *ctx, ...@@ -228,7 +228,6 @@ static int __io_remove_buffers(struct io_ring_ctx *ctx,
return i; return i;
} }
/* the head kbuf is the list itself */
while (!list_empty(&bl->buf_list)) { while (!list_empty(&bl->buf_list)) {
struct io_buffer *nxt; struct io_buffer *nxt;
...@@ -238,7 +237,6 @@ static int __io_remove_buffers(struct io_ring_ctx *ctx, ...@@ -238,7 +237,6 @@ static int __io_remove_buffers(struct io_ring_ctx *ctx,
return i; return i;
cond_resched(); cond_resched();
} }
i++;
return i; return i;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment