lkml.org 
[lkml]   [2020]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 004/172] RDMA/uverbs: Make the event_queue fds return POLLERR when disassociated
    Date
    From: Jason Gunthorpe <jgg@mellanox.com>

    [ Upstream commit eb356e6dc15a30af604f052cd0e170450193c254 ]

    If is_closed is set, and the event list is empty, then read() will return
    -EIO without blocking. After setting is_closed in
    ib_uverbs_free_event_queue(), we do trigger a wake_up on the poll_wait,
    but the fops->poll() function does not check it, so poll will continue to
    sleep on an empty list.

    Fixes: 14e23bd6d221 ("RDMA/core: Fix locking in ib_uverbs_event_read")
    Link: https://lore.kernel.org/r/0-v1-ace813388969+48859-uverbs_poll_fix%25jgg@mellanox.com
    Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/core/uverbs_main.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
    index 5404717998b0..fc4b46258c75 100644
    --- a/drivers/infiniband/core/uverbs_main.c
    +++ b/drivers/infiniband/core/uverbs_main.c
    @@ -360,6 +360,8 @@ static __poll_t ib_uverbs_event_poll(struct ib_uverbs_event_queue *ev_queue,
    spin_lock_irq(&ev_queue->lock);
    if (!list_empty(&ev_queue->event_list))
    pollflags = EPOLLIN | EPOLLRDNORM;
    + else if (ev_queue->is_closed)
    + pollflags = EPOLLERR;
    spin_unlock_irq(&ev_queue->lock);

    return pollflags;
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-18 03:26    [W:4.625 / U:0.628 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site