io_uring: rename IORING_OP_FILES_UPDATE
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 12 Jul 2022 20:52:48 +0000 (21:52 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 25 Jul 2022 00:41:07 +0000 (18:41 -0600)
IORING_OP_FILES_UPDATE will be a more generic opcode serving different
resource types, rename it into IORING_OP_RSRC_UPDATE and add subtype
handling.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/0a907133907d9af3415a8a7aa1802c6aa97c03c6.1657643355.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/uapi/linux/io_uring.h
io_uring/opdef.c
io_uring/rsrc.c
io_uring/rsrc.h

index 45272eb37d1092a6bb562b3e8b45d63d870fd6fa..210a00ab6301e49afe9c7b481937f7ee0a827284 100644 (file)
@@ -174,7 +174,8 @@ enum io_uring_op {
        IORING_OP_FALLOCATE,
        IORING_OP_OPENAT,
        IORING_OP_CLOSE,
-       IORING_OP_FILES_UPDATE,
+       IORING_OP_RSRC_UPDATE,
+       IORING_OP_FILES_UPDATE = IORING_OP_RSRC_UPDATE,
        IORING_OP_STATX,
        IORING_OP_READ,
        IORING_OP_WRITE,
@@ -223,6 +224,7 @@ enum io_uring_op {
 #define IORING_TIMEOUT_ETIME_SUCCESS   (1U << 5)
 #define IORING_TIMEOUT_CLOCK_MASK      (IORING_TIMEOUT_BOOTTIME | IORING_TIMEOUT_REALTIME)
 #define IORING_TIMEOUT_UPDATE_MASK     (IORING_TIMEOUT_UPDATE | IORING_LINK_TIMEOUT_UPDATE)
+
 /*
  * sqe->splice_flags
  * extends splice(2) flags
@@ -289,6 +291,14 @@ enum io_uring_op {
  */
 #define IORING_ACCEPT_MULTISHOT        (1U << 0)
 
+
+/*
+ * IORING_OP_RSRC_UPDATE flags
+ */
+enum {
+       IORING_RSRC_UPDATE_FILES,
+};
+
 /*
  * IORING_OP_MSG_RING command types, stored in sqe->addr
  */
index 7ab19bbf3126370fdb387bbe13855430bc26dc15..72dd2b2d8a9df110963bce445bf0e89e6fef2c2e 100644 (file)
@@ -246,12 +246,13 @@ const struct io_op_def io_op_defs[] = {
                .prep                   = io_close_prep,
                .issue                  = io_close,
        },
-       [IORING_OP_FILES_UPDATE] = {
+       [IORING_OP_RSRC_UPDATE] = {
                .audit_skip             = 1,
                .iopoll                 = 1,
-               .name                   = "FILES_UPDATE",
-               .prep                   = io_files_update_prep,
-               .issue                  = io_files_update,
+               .name                   = "RSRC_UPDATE",
+               .prep                   = io_rsrc_update_prep,
+               .issue                  = io_rsrc_update,
+               .ioprio                 = 1,
        },
        [IORING_OP_STATX] = {
                .audit_skip             = 1,
index 7f66b0e25674326a5259672a9935a190714d72fb..fc2b337e6c25a90fa6e69bbe05c4353914bcff15 100644 (file)
@@ -21,6 +21,7 @@ struct io_rsrc_update {
        u64                             arg;
        u32                             nr_args;
        u32                             offset;
+       int                             type;
 };
 
 static int io_sqe_buffer_register(struct io_ring_ctx *ctx, struct iovec *iov,
@@ -657,7 +658,7 @@ __cold int io_register_rsrc(struct io_ring_ctx *ctx, void __user *arg,
        return -EINVAL;
 }
 
-int io_files_update_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
+int io_rsrc_update_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 {
        struct io_rsrc_update *up = io_kiocb_to_cmd(req);
 
@@ -671,6 +672,7 @@ int io_files_update_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
        if (!up->nr_args)
                return -EINVAL;
        up->arg = READ_ONCE(sqe->addr);
+       up->type = READ_ONCE(sqe->ioprio);
        return 0;
 }
 
@@ -713,7 +715,7 @@ static int io_files_update_with_index_alloc(struct io_kiocb *req,
        return ret;
 }
 
-int io_files_update(struct io_kiocb *req, unsigned int issue_flags)
+static int io_files_update(struct io_kiocb *req, unsigned int issue_flags)
 {
        struct io_rsrc_update *up = io_kiocb_to_cmd(req);
        struct io_ring_ctx *ctx = req->ctx;
@@ -742,6 +744,17 @@ int io_files_update(struct io_kiocb *req, unsigned int issue_flags)
        return IOU_OK;
 }
 
+int io_rsrc_update(struct io_kiocb *req, unsigned int issue_flags)
+{
+       struct io_rsrc_update *up = io_kiocb_to_cmd(req);
+
+       switch (up->type) {
+       case IORING_RSRC_UPDATE_FILES:
+               return io_files_update(req, issue_flags);
+       }
+       return -EINVAL;
+}
+
 int io_queue_rsrc_removal(struct io_rsrc_data *data, unsigned idx,
                          struct io_rsrc_node *node, void *rsrc)
 {
index af342fd239d09b8b5f27c591fc3cb2d9f05fb698..21813a23215fac4973ed9d424c54f41acc9e9ecd 100644 (file)
@@ -167,6 +167,6 @@ static inline u64 *io_get_tag_slot(struct io_rsrc_data *data, unsigned int idx)
        return &data->tags[table_idx][off];
 }
 
-int io_files_update(struct io_kiocb *req, unsigned int issue_flags);
-int io_files_update_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
+int io_rsrc_update(struct io_kiocb *req, unsigned int issue_flags);
+int io_rsrc_update_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
 #endif