On 10/17/20 10:28 AM, Matthew Wilcox wrote: > 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) { Indeed, that's cleaner. Let me re-test with that just to be on the safe side, and I'll post a new one. -- Jens Axboe