summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2025-09-08 00:02:58 +0100
committerJens Axboe <axboe@kernel.dk>2025-09-08 08:06:37 -0600
commitda8bc3c81c71eb8906dafca805db1a2639665116 (patch)
tree2eb3b9bc997a537bf1d82041130ea58acf54b86d
parentc2685729fa5463e5fc493244a2ba7e260217fc76 (diff)
downloadlinux-da8bc3c81c71eb8906dafca805db1a2639665116.tar.gz
linux-da8bc3c81c71eb8906dafca805db1a2639665116.tar.bz2
linux-da8bc3c81c71eb8906dafca805db1a2639665116.zip
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 <asml.silence@gmail.com> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--io_uring/register.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/io_uring/register.c b/io_uring/register.c
index aa5f56ad8358..50ce87928be0 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;
}