Skip to content

Commit 08b57b6

Browse files
joannekoongaxboe
authored andcommitted
io_uring/kbuf: add io_uring_is_kmbuf_ring()
io_uring_is_kmbuf_ring() returns true if there is a kernel-managed buffer ring at the specified buffer group. This is a preparatory patch for upcoming fuse kernel-managed buffer support, which needs to ensure the buffer ring registered by the server is a kernel-managed buffer ring. Signed-off-by: Joanne Koong <joannelkoong@gmail.com> Link: https://patch.msgid.link/20260306003224.3620942-7-joannelkoong@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent de48bc0 commit 08b57b6

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

include/linux/io_uring/cmd.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ int io_uring_buf_ring_unpin(struct io_uring_cmd *cmd, unsigned buf_group,
9999
int io_uring_kmbuf_recycle(struct io_uring_cmd *cmd, unsigned int buf_group,
100100
u64 addr, unsigned int len, unsigned int bid,
101101
unsigned int issue_flags);
102+
103+
bool io_uring_is_kmbuf_ring(struct io_uring_cmd *cmd, unsigned int buf_group,
104+
unsigned int issue_flags);
102105
#else
103106
static inline int
104107
io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
@@ -161,6 +164,12 @@ static inline int io_uring_kmbuf_recycle(struct io_uring_cmd *cmd,
161164
{
162165
return -EOPNOTSUPP;
163166
}
167+
static inline bool io_uring_is_kmbuf_ring(struct io_uring_cmd *cmd,
168+
unsigned int buf_group,
169+
unsigned int issue_flags)
170+
{
171+
return false;
172+
}
164173
#endif
165174

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

io_uring/kbuf.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,3 +926,23 @@ struct io_mapped_region *io_pbuf_get_region(struct io_ring_ctx *ctx,
926926
return NULL;
927927
return &bl->region;
928928
}
929+
930+
bool io_uring_is_kmbuf_ring(struct io_uring_cmd *cmd, unsigned int buf_group,
931+
unsigned int issue_flags)
932+
{
933+
struct io_ring_ctx *ctx = cmd_to_io_kiocb(cmd)->ctx;
934+
struct io_buffer_list *bl;
935+
bool is_kmbuf_ring = false;
936+
937+
io_ring_submit_lock(ctx, issue_flags);
938+
939+
bl = io_buffer_get_list(ctx, buf_group);
940+
if (likely(bl) && (bl->flags & IOBL_KERNEL_MANAGED)) {
941+
WARN_ON_ONCE(!(bl->flags & IOBL_BUF_RING));
942+
is_kmbuf_ring = true;
943+
}
944+
945+
io_ring_submit_unlock(ctx, issue_flags);
946+
return is_kmbuf_ring;
947+
}
948+
EXPORT_SYMBOL_GPL(io_uring_is_kmbuf_ring);

0 commit comments

Comments
 (0)