Refactor buffer import functions: - Make io_import_fixed() global so BPF kfuncs can use it directly - Make io_import_reg_buf() static inline in rsrc.h This allows BPF kfuncs to import buffers without associating them with a request, useful when one request has multiple buffers. Signed-off-by: Ming Lei --- io_uring/rsrc.c | 17 +++-------------- io_uring/rsrc.h | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c index 41c89f5c616d..8aa2f7473c89 100644 --- a/io_uring/rsrc.c +++ b/io_uring/rsrc.c @@ -1069,9 +1069,9 @@ static int io_import_kbuf(int ddir, struct iov_iter *iter, return 0; } -static int io_import_fixed(int ddir, struct iov_iter *iter, - struct io_mapped_ubuf *imu, - u64 buf_addr, size_t len) +int io_import_fixed(int ddir, struct iov_iter *iter, + struct io_mapped_ubuf *imu, + u64 buf_addr, size_t len) { const struct bio_vec *bvec; size_t folio_mask; @@ -1140,17 +1140,6 @@ inline struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req, return NULL; } -int io_import_reg_buf(struct io_kiocb *req, struct iov_iter *iter, - u64 buf_addr, size_t len, int ddir, - unsigned issue_flags) -{ - struct io_rsrc_node *node; - - node = io_find_buf_node(req, issue_flags); - if (!node) - return -EFAULT; - return io_import_fixed(ddir, iter, node->buf, buf_addr, len); -} /* Lock two rings at once. The rings must be different! */ static void lock_two_rings(struct io_ring_ctx *ctx1, struct io_ring_ctx *ctx2) diff --git a/io_uring/rsrc.h b/io_uring/rsrc.h index d603f6a47f5e..bf77bc618fb5 100644 --- a/io_uring/rsrc.h +++ b/io_uring/rsrc.h @@ -61,9 +61,21 @@ int io_rsrc_data_alloc(struct io_rsrc_data *data, unsigned nr); struct io_rsrc_node *io_find_buf_node(struct io_kiocb *req, unsigned issue_flags); -int io_import_reg_buf(struct io_kiocb *req, struct iov_iter *iter, - u64 buf_addr, size_t len, int ddir, - unsigned issue_flags); +int io_import_fixed(int ddir, struct iov_iter *iter, + struct io_mapped_ubuf *imu, + u64 buf_addr, size_t len); + +static inline int io_import_reg_buf(struct io_kiocb *req, struct iov_iter *iter, + u64 buf_addr, size_t len, int ddir, + unsigned issue_flags) +{ + struct io_rsrc_node *node; + + node = io_find_buf_node(req, issue_flags); + if (!node) + return -EFAULT; + return io_import_fixed(ddir, iter, node->buf, buf_addr, len); +} int io_import_reg_vec(int ddir, struct iov_iter *iter, struct io_kiocb *req, struct iou_vec *vec, unsigned nr_iovs, unsigned issue_flags); -- 2.47.0