summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2021-04-25 14:32:20 +0100
committerJens Axboe <axboe@kernel.dk>2021-04-25 10:14:04 -0600
commitfdecb66281e165927059419c3b1de09ffe4f8369 (patch)
tree5fa876f32cde1d1a417d66f3397cf9d69da07ec1
parent98f0b3b4f1d51911492b9d6eda4add0ec562179b (diff)
io_uring: enumerate dynamic resources
As resources are getting more support and common parts, it'll be more convenient to index resources and use it for indexing. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/f0be63e9310212d5601d36277c2946ff7a040485.1619356238.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--fs/io_uring.c16
-rw-r--r--include/uapi/linux/io_uring.h4
2 files changed, 12 insertions, 8 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index 86a957d1059b..36b9651588f9 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -1035,7 +1035,7 @@ static void io_dismantle_req(struct io_kiocb *req);
static void io_put_task(struct task_struct *task, int nr);
static struct io_kiocb *io_prep_linked_timeout(struct io_kiocb *req);
static void io_queue_linked_timeout(struct io_kiocb *req);
-static int __io_register_rsrc_update(struct io_ring_ctx *ctx, unsigned opcode,
+static int __io_register_rsrc_update(struct io_ring_ctx *ctx, unsigned type,
struct io_uring_rsrc_update *up,
unsigned nr_args);
static void io_clean_op(struct io_kiocb *req);
@@ -5824,7 +5824,7 @@ static int io_files_update(struct io_kiocb *req, unsigned int issue_flags)
up.data = req->rsrc_update.arg;
mutex_lock(&ctx->uring_lock);
- ret = __io_register_rsrc_update(ctx, IORING_REGISTER_FILES_UPDATE,
+ ret = __io_register_rsrc_update(ctx, IORING_RSRC_FILE,
&up, req->rsrc_update.nr_args);
mutex_unlock(&ctx->uring_lock);
@@ -9709,7 +9709,7 @@ static int io_register_enable_rings(struct io_ring_ctx *ctx)
return 0;
}
-static int __io_register_rsrc_update(struct io_ring_ctx *ctx, unsigned opcode,
+static int __io_register_rsrc_update(struct io_ring_ctx *ctx, unsigned type,
struct io_uring_rsrc_update *up,
unsigned nr_args)
{
@@ -9722,14 +9722,14 @@ static int __io_register_rsrc_update(struct io_ring_ctx *ctx, unsigned opcode,
if (err)
return err;
- switch (opcode) {
- case IORING_REGISTER_FILES_UPDATE:
+ switch (type) {
+ case IORING_RSRC_FILE:
return __io_sqe_files_update(ctx, up, nr_args);
}
return -EINVAL;
}
-static int io_register_rsrc_update(struct io_ring_ctx *ctx, unsigned opcode,
+static int io_register_rsrc_update(struct io_ring_ctx *ctx, unsigned type,
void __user *arg, unsigned nr_args)
{
struct io_uring_rsrc_update up;
@@ -9740,7 +9740,7 @@ static int io_register_rsrc_update(struct io_ring_ctx *ctx, unsigned opcode,
return -EFAULT;
if (up.resv)
return -EINVAL;
- return __io_register_rsrc_update(ctx, opcode, &up, nr_args);
+ return __io_register_rsrc_update(ctx, type, &up, nr_args);
}
static bool io_register_op_must_quiesce(int op)
@@ -9829,7 +9829,7 @@ static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode,
ret = io_sqe_files_unregister(ctx);
break;
case IORING_REGISTER_FILES_UPDATE:
- ret = io_register_rsrc_update(ctx, opcode, arg, nr_args);
+ ret = io_register_rsrc_update(ctx, IORING_RSRC_FILE, arg, nr_args);
break;
case IORING_REGISTER_EVENTFD:
case IORING_REGISTER_EVENTFD_ASYNC:
diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h
index 5beaa6bbc6db..d363e0c4fd21 100644
--- a/include/uapi/linux/io_uring.h
+++ b/include/uapi/linux/io_uring.h
@@ -316,6 +316,10 @@ struct io_uring_rsrc_update {
__aligned_u64 data;
};
+enum {
+ IORING_RSRC_FILE = 0,
+};
+
/* Skip updating fd indexes set to this value in the fd table */
#define IORING_REGISTER_FILES_SKIP (-2)