On Sat, Oct 17, 2020 at 09:30:59AM -0600, Jens Axboe wrote: > Once we've copied some data for an iocb that is marked with IOCB_WAITQ, > we should no longer attempt to async lock a new page. Instead make sure > we return the copied amount, and let the caller retry, instead of > returning -EIOCBQUEUED for a new page. > > This should only be possible with read-ahead disabled on the below > device, and multiple threads racing on the same file. Haven't been able > to reproduce on anything else. Wouldn't this do the job just as well? @@ -2211,6 +2211,8 @@ ssize_t generic_file_buffered_read(struct kiocb *iocb, put_page(page); written += ret; + if (iocb->ki_flags & IOCB_WAITQ) + iocb->ki_flags |= IOCB_NOWAIT; if (!iov_iter_count(iter)) goto out; if (ret < nr) {