Messages in this thread | | | Subject | Re: [PATCH 1/4] io_uring: fix hanging iopoll in case of -EAGAIN | From | Jens Axboe <> | Date | Mon, 22 Jun 2020 20:18:49 -0600 |
| |
On 6/22/20 8:07 PM, Jens Axboe wrote: > On 6/22/20 4:16 PM, Pavel Begunkov wrote: >> io_do_iopoll() won't do anything with a request unless >> req->iopoll_completed is set. So io_complete_rw_iopoll() has to set >> it, otherwise io_do_iopoll() will poll a file again and again even >> though the request of interest was completed long ago. > > I need to look at this again, because with this change, I previously > got various use-after-free. I haven't seen any issues with it, but > I agree, from a quick look that I'm not quite sure how it's currently > not causing hangs. Yet I haven't seen any, with targeted -EAGAIN > testing.
Ah I think I know what it is - if we run into:
if (req->result == -EAGAIN) return -EAGAIN
in io_issue_sqe() and race with it, we'll reissue twice potentially. So the above isn't quite enough, we'll need something a bit broader.
-- Jens Axboe
| |