lkml.org 
[lkml]   [2019]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.2 160/185] io_uring: fix wrong sequence setting logic
    Date
    From: Jackie Liu <liuyun01@kylinos.cn>

    [ Upstream commit 8776f3fa15a5cd213c4dfab7ddaf557983374ea6 ]

    Sqo_thread will get sqring in batches, which will cause
    ctx->cached_sq_head to be added in batches. if one of these
    sqes is set with the DRAIN flag, then he will never get a
    chance to process, and finally sqo_thread will not exit.

    Fixes: de0617e4671 ("io_uring: add support for marking commands as draining")
    Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/io_uring.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/fs/io_uring.c b/fs/io_uring.c
    index 03cd8f5bba850..701936f2bde39 100644
    --- a/fs/io_uring.c
    +++ b/fs/io_uring.c
    @@ -288,6 +288,7 @@ struct io_ring_ctx {
    struct sqe_submit {
    const struct io_uring_sqe *sqe;
    unsigned short index;
    + u32 sequence;
    bool has_user;
    bool needs_lock;
    bool needs_fixed_file;
    @@ -1894,7 +1895,7 @@ static int io_req_set_file(struct io_ring_ctx *ctx, const struct sqe_submit *s,

    if (flags & IOSQE_IO_DRAIN) {
    req->flags |= REQ_F_IO_DRAIN;
    - req->sequence = ctx->cached_sq_head - 1;
    + req->sequence = s->sequence;
    }

    if (!io_op_needs_file(s->sqe))
    @@ -2050,6 +2051,7 @@ static bool io_get_sqring(struct io_ring_ctx *ctx, struct sqe_submit *s)
    if (head < ctx->sq_entries) {
    s->index = head;
    s->sqe = &ctx->sq_sqes[head];
    + s->sequence = ctx->cached_sq_head;
    ctx->cached_sq_head++;
    return true;
    }
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-09-22 21:22    [W:3.292 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site