diff options
author | Jens Axboe <axboe@kernel.dk> | 2021-04-15 09:47:13 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-04-15 20:17:11 -0600 |
commit | ea6a693d862d4f0edd748a1fa3fc6faf2c39afb2 (patch) | |
tree | cc163f7ff91437566925b7ff992a212c17af5bd1 /fs/io_uring.c | |
parent | c5de00366e3e675f9e321983d9bd357c1fbea0e9 (diff) |
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 <axboe@kernel.dk>
Diffstat (limited to 'fs/io_uring.c')
-rw-r--r-- | fs/io_uring.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c index ab14692b05b4..4803e31e9301 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; |