| From dc314886cb3d0e4ab2858003e8de2917f8a3ccbd Mon Sep 17 00:00:00 2001 |
| From: Pavel Begunkov <asml.silence@gmail.com> |
| Date: Wed, 9 Aug 2023 16:20:21 +0100 |
| Subject: io_uring: break iopolling on signal |
| |
| From: Pavel Begunkov <asml.silence@gmail.com> |
| |
| commit dc314886cb3d0e4ab2858003e8de2917f8a3ccbd upstream. |
| |
| Don't keep spinning iopoll with a signal set. It'll eventually return |
| back, e.g. by virtue of need_resched(), but it's not a nice user |
| experience. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: def596e9557c9 ("io_uring: support for IO polling") |
| Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> |
| Link: https://lore.kernel.org/r/eeba551e82cad12af30c3220125eb6cb244cc94c.1691594339.git.asml.silence@gmail.com |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| io_uring/io_uring.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/io_uring/io_uring.c |
| +++ b/io_uring/io_uring.c |
| @@ -1689,6 +1689,9 @@ static int io_iopoll_check(struct io_rin |
| break; |
| nr_events += ret; |
| ret = 0; |
| + |
| + if (task_sigpending(current)) |
| + return -EINTR; |
| } while (nr_events < min && !need_resched()); |
| |
| return ret; |