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. > > Of course, if you want to avoid both new reads to be submitted _and_ > avoid waiting for existing pending reads, you should just set both > flags, and you get the semantics you want. So for your case, this may > not make any difference. Indeed, in the gfs2 case, waiting for existing pending reads should be fine. I'll send an update after some testing. Thanks, Andreas