lkml.org 
[lkml]   [2020]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.5 09/58] io_uring: flush overflowed CQ events in the io_uring_poll()
    Date
    From: Stefano Garzarella <sgarzare@redhat.com>

    [ Upstream commit 63e5d81f72af1bf370bf8a6745b0a8d71a7bb37d ]

    In io_uring_poll() we must flush overflowed CQ events before to
    check if there are CQ events available, to avoid missing events.

    We call the io_cqring_events() that checks and flushes any overflow
    and returns the number of CQ events available.

    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/io_uring.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/fs/io_uring.c b/fs/io_uring.c
    index 6ae692b02980d..d3f4afa01731d 100644
    --- a/fs/io_uring.c
    +++ b/fs/io_uring.c
    @@ -4979,7 +4979,7 @@ static __poll_t io_uring_poll(struct file *file, poll_table *wait)
    if (READ_ONCE(ctx->rings->sq.tail) - ctx->cached_sq_head !=
    ctx->rings->sq_ring_entries)
    mask |= EPOLLOUT | EPOLLWRNORM;
    - if (READ_ONCE(ctx->rings->cq.head) != ctx->cached_cq_tail)
    + if (io_cqring_events(ctx, false))
    mask |= EPOLLIN | EPOLLRDNORM;

    return mask;
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-02-23 03:21    [W:2.522 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site