Skip to content

Commit 4706d1f

Browse files
joannekoongaxboe
authored andcommitted
io_uring/kbuf: export io_ring_buffer_select()
Export io_ring_buffer_select() so that it may be used by callers who pass in a pinned bufring without needing to grab the io_uring mutex. This is a preparatory patch that will be needed by fuse io-uring, which will need to select a buffer from a kernel-managed bufring while the uring mutex may already be held by in-progress commits, and may need to select a buffer in atomic contexts. Signed-off-by: Joanne Koong <joannelkoong@gmail.com> Link: https://patch.msgid.link/20260306003224.3620942-8-joannelkoong@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 08b57b6 commit 4706d1f

2 files changed

Lines changed: 18 additions & 3 deletions

File tree

include/linux/io_uring/cmd.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ int io_uring_kmbuf_recycle(struct io_uring_cmd *cmd, unsigned int buf_group,
102102

103103
bool io_uring_is_kmbuf_ring(struct io_uring_cmd *cmd, unsigned int buf_group,
104104
unsigned int issue_flags);
105+
106+
struct io_br_sel io_ring_buffer_select(struct io_kiocb *req, size_t *len,
107+
struct io_buffer_list *bl,
108+
unsigned int issue_flags);
105109
#else
106110
static inline int
107111
io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
@@ -170,6 +174,16 @@ static inline bool io_uring_is_kmbuf_ring(struct io_uring_cmd *cmd,
170174
{
171175
return false;
172176
}
177+
static inline struct io_br_sel io_ring_buffer_select(struct io_kiocb *req,
178+
size_t *len,
179+
struct io_buffer_list *bl,
180+
unsigned int issue_flags)
181+
{
182+
struct io_br_sel sel = {
183+
.val = -EOPNOTSUPP,
184+
};
185+
return sel;
186+
}
173187
#endif
174188

175189
static inline struct io_uring_cmd *io_uring_cmd_from_tw(struct io_tw_req tw_req)

io_uring/kbuf.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,9 @@ static bool io_should_commit(struct io_kiocb *req, struct io_buffer_list *bl,
239239
return false;
240240
}
241241

242-
static struct io_br_sel io_ring_buffer_select(struct io_kiocb *req, size_t *len,
243-
struct io_buffer_list *bl,
244-
unsigned int issue_flags)
242+
struct io_br_sel io_ring_buffer_select(struct io_kiocb *req, size_t *len,
243+
struct io_buffer_list *bl,
244+
unsigned int issue_flags)
245245
{
246246
struct io_uring_buf_ring *br = bl->buf_ring;
247247
__u16 tail, head = bl->head;
@@ -275,6 +275,7 @@ static struct io_br_sel io_ring_buffer_select(struct io_kiocb *req, size_t *len,
275275
}
276276
return sel;
277277
}
278+
EXPORT_SYMBOL_GPL(io_ring_buffer_select);
278279

279280
struct io_br_sel io_buffer_select(struct io_kiocb *req, size_t *len,
280281
unsigned buf_group, unsigned int issue_flags)

0 commit comments

Comments
 (0)