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>
This commit is contained in:
Pavel Begunkov 2021-04-25 14:32:20 +01:00 committed by Jens Axboe
parent 98f0b3b4f1
commit fdecb66281
2 changed files with 12 additions and 8 deletions

View File

@ -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:

View File

@ -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)