lkml.org 
[lkml]   [2022]   [Jul]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH net-next v4 24/27] io_uring: rename IORING_OP_FILES_UPDATE
    Date
    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>
    ---
    include/uapi/linux/io_uring.h | 12 +++++++++++-
    io_uring/opdef.c | 9 +++++----
    io_uring/rsrc.c | 17 +++++++++++++++--
    io_uring/rsrc.h | 4 ++--
    4 files changed, 33 insertions(+), 9 deletions(-)

    diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h
    index 37e0730733f9..9e325179a4f8 100644
    --- a/include/uapi/linux/io_uring.h
    +++ b/include/uapi/linux/io_uring.h
    @@ -171,7 +171,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,
    @@ -220,6 +221,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
    @@ -286,6 +288,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
    */
    diff --git a/io_uring/opdef.c b/io_uring/opdef.c
    index 8419b50c1d3b..0fb347d1ec16 100644
    --- a/io_uring/opdef.c
    +++ b/io_uring/opdef.c
    @@ -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,
    diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
    index 1182cf0ea1fc..98ce8a93a816 100644
    --- a/io_uring/rsrc.c
    +++ b/io_uring/rsrc.c
    @@ -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,
    @@ -658,7 +659,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);

    @@ -672,6 +673,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;
    }

    @@ -711,7 +713,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;
    @@ -740,6 +742,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)
    {
    diff --git a/io_uring/rsrc.h b/io_uring/rsrc.h
    index af342fd239d0..21813a23215f 100644
    --- a/io_uring/rsrc.h
    +++ b/io_uring/rsrc.h
    @@ -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
    --
    2.36.1
    \
     
     \ /
      Last update: 2022-07-07 13:54    [W:3.404 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site