Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > On Thu, Apr 07, 2022 at 12:05:05AM +0100, David Howells wrote: > > Fix this by adding an extra address_space operation, ->removing folio(), > > and flag, AS_NOTIFY_REMOVING_FOLIO. The operation is called if the flag is > > set when a folio is removed from the pagecache. The flag should be set if > > a non-NULL cookie is obtained from fscache and cleared in ->evict_inode() > > before truncate_inode_pages_final() is called. > > What's wrong with ->freepage? It's too late. The optimisation must be cancelled before there's a chance that a new page can be allocated and attached to the pagecache - but ->freepage() is called after the folio has been removed. Doing it in ->freepage() would allow ->readahead(), ->readpage() or ->write_begin() to jump in and start a new read (which gets skipped because the optimisation is still in play). Another possibility could be that the FSCACHE_COOKIE_HAVE_DATA and FSCACHE_COOKIE_NO_DATA_TO_READ flags could be moved from cookie->flags to mapping->flags and the VM could do the twiddling itself (no aop required) - except that fscache can't currently then find them (maybe use an aop for that?). David -- Linux-cachefs mailing list Linux-cachefs@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/linux-cachefs