lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 048/376] io_uring: cleanup io_poll_remove_one() logic
    Date
    From: Jens Axboe <axboe@kernel.dk>

    [ Upstream commit 3bfa5bcb26f0b52d7ae8416aa0618fff21aceaaf ]

    We only need apoll in the one section, do the juggling with the work
    restoration there. This removes a special case further down as well.

    No functional changes in this patch.

    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/io_uring.c | 27 +++++++++++++--------------
    1 file changed, 13 insertions(+), 14 deletions(-)

    diff --git a/fs/io_uring.c b/fs/io_uring.c
    index f071505e3430..07d9414268f1 100644
    --- a/fs/io_uring.c
    +++ b/fs/io_uring.c
    @@ -4354,32 +4354,31 @@ static bool __io_poll_remove_one(struct io_kiocb *req,
    do_complete = true;
    }
    spin_unlock(&poll->head->lock);
    + hash_del(&req->hash_node);
    return do_complete;
    }

    static bool io_poll_remove_one(struct io_kiocb *req)
    {
    - struct async_poll *apoll = NULL;
    bool do_complete;

    if (req->opcode == IORING_OP_POLL_ADD) {
    do_complete = __io_poll_remove_one(req, &req->poll);
    } else {
    - apoll = req->apoll;
    + struct async_poll *apoll = req->apoll;
    +
    /* non-poll requests have submit ref still */
    - do_complete = __io_poll_remove_one(req, &req->apoll->poll);
    - if (do_complete)
    + do_complete = __io_poll_remove_one(req, &apoll->poll);
    + if (do_complete) {
    io_put_req(req);
    - }
    -
    - hash_del(&req->hash_node);
    -
    - if (do_complete && apoll) {
    - /*
    - * restore ->work because we need to call io_req_work_drop_env.
    - */
    - memcpy(&req->work, &apoll->work, sizeof(req->work));
    - kfree(apoll);
    + /*
    + * restore ->work because we will call
    + * io_req_work_drop_env below when dropping the
    + * final reference.
    + */
    + memcpy(&req->work, &apoll->work, sizeof(req->work));
    + kfree(apoll);
    + }
    }

    if (do_complete) {
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-19 18:00    [W:2.641 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site