On 11/15/20 5:56 AM, Pavel Begunkov wrote: > 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. This looks like it's against 5.11, but also looks like we should add it for 5.10? -- Jens Axboe