Skip to content

Commit 54e00d9

Browse files
isilenceaxboe
authored andcommitted
io_uring/kbuf: introduce io_kbuf_drop_legacy()
io_kbuf_drop() is only used for legacy provided buffers, and so __io_put_kbuf_list() is never called for REQ_F_BUFFER_RING. Remove the dead branch out of __io_put_kbuf_list(), rename it into io_kbuf_drop_legacy() and use it directly instead of io_kbuf_drop(). Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/c8cc73e2272f09a86ecbdad9ebdd8304f8e583c0.1738724373.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent e150e70 commit 54e00d9

3 files changed

Lines changed: 13 additions & 23 deletions

File tree

io_uring/io_uring.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ static bool req_need_defer(struct io_kiocb *req, u32 seq)
397397
static void io_clean_op(struct io_kiocb *req)
398398
{
399399
if (unlikely(req->flags & REQ_F_BUFFER_SELECTED))
400-
io_kbuf_drop(req);
400+
io_kbuf_drop_legacy(req);
401401

402402
if (req->flags & REQ_F_NEED_CLEANUP) {
403403
const struct io_cold_def *def = &io_cold_defs[req->opcode];

io_uring/kbuf.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,16 @@ static int io_buffer_add_list(struct io_ring_ctx *ctx,
5050
return xa_err(xa_store(&ctx->io_bl_xa, bgid, bl, GFP_KERNEL));
5151
}
5252

53+
void io_kbuf_drop_legacy(struct io_kiocb *req)
54+
{
55+
if (WARN_ON_ONCE(!(req->flags & REQ_F_BUFFER_SELECTED)))
56+
return;
57+
req->buf_index = req->kbuf->bgid;
58+
req->flags &= ~REQ_F_BUFFER_SELECTED;
59+
kfree(req->kbuf);
60+
req->kbuf = NULL;
61+
}
62+
5363
bool io_kbuf_recycle_legacy(struct io_kiocb *req, unsigned issue_flags)
5464
{
5565
struct io_ring_ctx *ctx = req->ctx;

io_uring/kbuf.h

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ int io_unregister_pbuf_ring(struct io_ring_ctx *ctx, void __user *arg);
7575
int io_register_pbuf_status(struct io_ring_ctx *ctx, void __user *arg);
7676

7777
bool io_kbuf_recycle_legacy(struct io_kiocb *req, unsigned issue_flags);
78+
void io_kbuf_drop_legacy(struct io_kiocb *req);
7879

7980
struct io_mapped_region *io_pbuf_get_region(struct io_ring_ctx *ctx,
8081
unsigned int bgid);
@@ -158,27 +159,6 @@ static inline bool __io_put_kbuf_ring(struct io_kiocb *req, int len, int nr)
158159
return ret;
159160
}
160161

161-
static inline void __io_put_kbuf_list(struct io_kiocb *req, int len)
162-
{
163-
if (req->flags & REQ_F_BUFFER_RING) {
164-
__io_put_kbuf_ring(req, len, 1);
165-
} else {
166-
req->buf_index = req->kbuf->bgid;
167-
req->flags &= ~REQ_F_BUFFER_SELECTED;
168-
kfree(req->kbuf);
169-
req->kbuf = NULL;
170-
}
171-
}
172-
173-
static inline void io_kbuf_drop(struct io_kiocb *req)
174-
{
175-
if (!(req->flags & (REQ_F_BUFFER_SELECTED|REQ_F_BUFFER_RING)))
176-
return;
177-
178-
/* len == 0 is fine here, non-ring will always drop all of it */
179-
__io_put_kbuf_list(req, 0);
180-
}
181-
182162
static inline unsigned int __io_put_kbufs(struct io_kiocb *req, int len,
183163
int nbufs, unsigned issue_flags)
184164
{
@@ -192,7 +172,7 @@ static inline unsigned int __io_put_kbufs(struct io_kiocb *req, int len,
192172
if (!__io_put_kbuf_ring(req, len, nbufs))
193173
ret |= IORING_CQE_F_BUF_MORE;
194174
} else {
195-
__io_put_kbuf_list(req, len);
175+
io_kbuf_drop_legacy(req);
196176
}
197177
return ret;
198178
}

0 commit comments

Comments
 (0)