On 6/11/20 9:54 AM, Pavel Begunkov wrote: > io_do_iopoll() can async punt a request with io_queue_async_work(), > so doing io_req_work_grab_env(). The problem is that iopoll() can > be called from who knows what context, e.g. from a completely > different process with its own memory space, creds, etc. > > io_do_iopoll() { > ret = req->poll(); > if (ret == -EAGAIN) > io_queue_async_work() > ... > } > > > I can't find it handled in io_uring. Can this even happen? > Wouldn't it be better to complete them with -EAGAIN? I don't think a plain -EAGAIN complete would be very useful, it's kind of a shitty thing to pass back to userspace when it can be avoided. For polled IO, we know we're doing O_DIRECT, or using fixed buffers. For the latter, there's no problem in retrying, regardless of context. For the former, I think we'd get -EFAULT mapping the IO at that point, which is probably reasonable. I'd need to double check, though. -- Jens Axboe