diff options
| author | Pavel Begunkov <asml.silence@gmail.com> | 2025-09-08 00:02:58 +0100 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2025-09-08 08:06:37 -0600 |
| commit | da8bc3c81c71eb8906dafca805db1a2639665116 (patch) | |
| tree | 2eb3b9bc997a537bf1d82041130ea58acf54b86d | |
| parent | c2685729fa5463e5fc493244a2ba7e260217fc76 (diff) | |
| download | linux-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.c | 33 |
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; } |
