From: Pavel Begunkov Date: Sun, 7 Sep 2025 23:02:58 +0000 (+0100) Subject: io_uring: add helper for *REGISTER_SEND_MSG_RING X-Git-Tag: v6.18-rc1~137^2~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da8bc3c81c71eb8906dafca805db1a2639665116;p=thirdparty%2Flinux.git io_uring: add helper for *REGISTER_SEND_MSG_RING Move handling of IORING_REGISTER_SEND_MSG_RING into a separate function in preparation to growing io_uring_register_blind(). Signed-off-by: Pavel Begunkov Reviewed-by: Martin K. Petersen Signed-off-by: Jens Axboe --- diff --git a/io_uring/register.c b/io_uring/register.c index aa5f56ad83584..50ce87928be03 100644 --- a/io_uring/register.c +++ b/io_uring/register.c @@ -874,6 +874,23 @@ struct file *io_uring_register_get_file(unsigned int fd, bool registered) return ERR_PTR(-EOPNOTSUPP); } +static int io_uring_register_send_msg_ring(void __user *arg, unsigned int nr_args) +{ + struct io_uring_sqe sqe; + + if (!arg || nr_args != 1) + return -EINVAL; + if (copy_from_user(&sqe, arg, sizeof(sqe))) + return -EFAULT; + /* no flags supported */ + if (sqe.flags) + return -EINVAL; + if (sqe.opcode != IORING_OP_MSG_RING) + return -EINVAL; + + return io_uring_sync_msg_ring(&sqe); +} + /* * "blind" registration opcodes are ones where there's no ring given, and * hence the source fd must be -1. @@ -882,21 +899,9 @@ static int io_uring_register_blind(unsigned int opcode, void __user *arg, unsigned int nr_args) { switch (opcode) { - case IORING_REGISTER_SEND_MSG_RING: { - struct io_uring_sqe sqe; - - if (!arg || nr_args != 1) - return -EINVAL; - if (copy_from_user(&sqe, arg, sizeof(sqe))) - return -EFAULT; - /* no flags supported */ - if (sqe.flags) - return -EINVAL; - if (sqe.opcode == IORING_OP_MSG_RING) - return io_uring_sync_msg_ring(&sqe); - } + case IORING_REGISTER_SEND_MSG_RING: + return io_uring_register_send_msg_ring(arg, nr_args); } - return -EINVAL; }