io-uring: move `struct io_br_sel` into io_uring_types.h
Move `struct io_br_sel` into io_uring_types.h and prepare for supporting provided buffer on uring_cmd. Signed-off-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20250821040210.1152145-2-ming.lei@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
fe524b0684
commit
d589bcddaa
|
@ -85,6 +85,25 @@ struct io_mapped_region {
|
||||||
unsigned flags;
|
unsigned flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return value from io_buffer_list selection, to avoid stashing it in
|
||||||
|
* struct io_kiocb. For legacy/classic provided buffers, keeping a reference
|
||||||
|
* across execution contexts are fine. But for ring provided buffers, the
|
||||||
|
* list may go away as soon as ->uring_lock is dropped. As the io_kiocb
|
||||||
|
* persists, it's better to just keep the buffer local for those cases.
|
||||||
|
*/
|
||||||
|
struct io_br_sel {
|
||||||
|
struct io_buffer_list *buf_list;
|
||||||
|
/*
|
||||||
|
* Some selection parts return the user address, others return an error.
|
||||||
|
*/
|
||||||
|
union {
|
||||||
|
void __user *addr;
|
||||||
|
ssize_t val;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Arbitrary limit, can be raised if need be
|
* Arbitrary limit, can be raised if need be
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -62,24 +62,6 @@ struct buf_sel_arg {
|
||||||
unsigned short partial_map;
|
unsigned short partial_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Return value from io_buffer_list selection, to avoid stashing it in
|
|
||||||
* struct io_kiocb. For legacy/classic provided buffers, keeping a reference
|
|
||||||
* across execution contexts are fine. But for ring provided buffers, the
|
|
||||||
* list may go away as soon as ->uring_lock is dropped. As the io_kiocb
|
|
||||||
* persists, it's better to just keep the buffer local for those cases.
|
|
||||||
*/
|
|
||||||
struct io_br_sel {
|
|
||||||
struct io_buffer_list *buf_list;
|
|
||||||
/*
|
|
||||||
* Some selection parts return the user address, others return an error.
|
|
||||||
*/
|
|
||||||
union {
|
|
||||||
void __user *addr;
|
|
||||||
ssize_t val;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct io_br_sel io_buffer_select(struct io_kiocb *req, size_t *len,
|
struct io_br_sel io_buffer_select(struct io_kiocb *req, size_t *len,
|
||||||
unsigned buf_group, unsigned int issue_flags);
|
unsigned buf_group, unsigned int issue_flags);
|
||||||
int io_buffers_select(struct io_kiocb *req, struct buf_sel_arg *arg,
|
int io_buffers_select(struct io_kiocb *req, struct buf_sel_arg *arg,
|
||||||
|
|
Loading…
Reference in New Issue