Files
linux/fs
Pavel Begunkov 52382df81d io_uring: replace inflight_wait with tctx->wait
[ Upstream commit c98de08c99 ]

As tasks now cancel only theirs requests, and inflight_wait is awaited
only in io_uring_cancel_files(), which should be called with ->in_idle
set, instead of keeping a separate inflight_wait use tctx->wait.

That will add some spurious wakeups but actually is safer from point of
not hanging the task.

e.g.
task1                   | IRQ
                        | *start* io_complete_rw_common(link)
                        |        link: req1 -> req2 -> req3(with files)
*cancel_files()         |
io_wq_cancel(), etc.    |
                        | put_req(link), adds to io-wq req2
schedule()              |

So, task1 will never try to cancel req2 or req3. If req2 is
long-standing (e.g. read(empty_pipe)), this may hang.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-02-13 13:54:58 +01:00
..
2020-10-16 11:11:22 -07:00
2021-01-09 13:46:24 +01:00
2020-11-19 22:38:29 -05:00
2020-11-14 11:26:04 -08:00
2020-09-10 14:03:31 -07:00
2021-01-17 14:17:03 +01:00
2020-08-04 21:02:38 -04:00
2020-09-22 23:45:57 -04:00
2020-07-31 08:16:01 +02:00
2020-08-07 11:33:24 -07:00
2021-01-27 11:55:29 +01:00
2020-07-31 08:16:00 +02:00
2020-09-26 22:55:05 -04:00
2020-08-27 16:06:47 -04:00
2020-07-31 08:16:01 +02:00