On Thu, Jul 2, 2020 at 8:06 PM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > On Thu, Jul 2, 2020 at 9:51 AM Andreas Gruenbacher <agruenba@xxxxxxxxxx> wrote: > > Add an IOCB_NOIO flag that indicates to generic_file_read_iter that it > > shouldn't trigger any filesystem I/O for the actual request or for > > readahead. This allows to do tentative reads out of the page cache as > > some filesystems allow, and to take the appropriate locks and retry the > > reads only if the requested pages are not cached. > > This looks sane to me, except for this part: > > if (!PageUptodate(page)) { > > - if (iocb->ki_flags & IOCB_NOWAIT) { > > + if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_NOIO)) { > > put_page(page); > > goto would_block; > > } > > This path doesn't actually initiate reads at all - it waits for > existing reads to finish. > > So I think it should only check for IOCB_NOWAIT. It turns out that label readpage is reachable from here via goto page_not_up_to_date / goto page_not_up_to_date_locked. So IOCB_NOIO needs to be checked somewhere. I'll send an update. Andreas