From: Jens Axboe Date: Thu, 15 Apr 2021 15:47:13 +0000 (-0600) Subject: io_uring: disable multishot poll for double poll add cases X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=ea6a693d862d4f0edd748a1fa3fc6faf2c39afb2;p=linux.git io_uring: disable multishot poll for double poll add cases The re-add handling isn't correct for the multi wait case, so let's just disable it for now explicitly until we can get that sorted out. This just turns it into a one-shot request. Since we pass back whether or not a poll request terminates in multishot mode on completion, this should not break properly behaving applications that check for IORING_CQE_F_MORE on completion. Signed-off-by: Jens Axboe --- diff --git a/fs/io_uring.c b/fs/io_uring.c index ab14692b05b41..4803e31e93012 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -4976,6 +4976,12 @@ static void __io_queue_proc(struct io_poll_iocb *poll, struct io_poll_table *pt, pt->error = -EINVAL; return; } + /* + * Can't handle multishot for double wait for now, turn it + * into one-shot mode. + */ + if (!(req->poll.events & EPOLLONESHOT)) + req->poll.events |= EPOLLONESHOT; /* double add on the same waitqueue head, ignore */ if (poll->head == head) return;