Commit d589bcdd authored by Ming Lei's avatar Ming Lei Committed by Jens Axboe
Browse files

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: default avatarMing Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250821040210.1152145-2-ming.lei@redhat.com


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent fe524b06
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -85,6 +85,25 @@ struct io_mapped_region {
	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
 */
+0 −18
Original line number Diff line number Diff line
@@ -62,24 +62,6 @@ struct buf_sel_arg {
	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,
				  unsigned buf_group, unsigned int issue_flags);
int io_buffers_select(struct io_kiocb *req, struct buf_sel_arg *arg,