[PATCH v7 0/2] mm, netfs, fscache: Stop read optimisation when folio removed from pagecache
David Howells
dhowells at redhat.com
Wed Jun 28 20:48:50 AEST 2023
Hi Andrew,
Should this go through the mm tree?
This fixes an optimisation in fscache whereby we don't read from the cache
for a particular file until we know that there's data there that we don't
have in the pagecache. The problem is that I'm no longer using PG_fscache
(aka PG_private_2) to indicate that the page is cached and so I don't get a
notification when a cached page is dropped from the pagecache.
The first patch merges some folio_has_private() and filemap_release_folio()
pairs and introduces a helper, folio_needs_release(), to indicate if a
release is required.
The second patch is the actual fix. Following Willy's suggestions[1], it
adds an AS_RELEASE_ALWAYS flag to an address_space that will make
filemap_release_folio() always call ->release_folio(), even if
PG_private/PG_private_2 aren't set. folio_needs_release() is altered to
add a check for this.
David
Changes:
========
ver #7)
- Make NFS set AS_RELEASE_ALWAYS.
ver #6)
- Drop the third patch which removes a duplicate check in vmscan().
ver #5)
- Rebased on linus/master. try_to_release_page() has now been entirely
replaced by filemap_release_folio(), barring one comment.
- Cleaned up some pairs in ext4.
ver #4)
- Split has_private/release call pairs into own patch.
- Moved folio_needs_release() to mm/internal.h and removed open-coded
version from filemap_release_folio().
- Don't need to clear AS_RELEASE_ALWAYS in ->evict_inode().
- Added experimental patch to reduce shrink_folio_list().
ver #3)
- Fixed mapping_clear_release_always() to use clear_bit() not set_bit().
- Moved a '&&' to the correct line.
ver #2)
- Rewrote entirely according to Willy's suggestion[1].
Link: https://lore.kernel.org/r/Yk9V/03wgdYi65Lb@casper.infradead.org/ [1]
Link: https://lore.kernel.org/r/164928630577.457102.8519251179327601178.stgit@warthog.procyon.org.uk/ # v1
Link: https://lore.kernel.org/r/166844174069.1124521.10890506360974169994.stgit@warthog.procyon.org.uk/ # v2
Link: https://lore.kernel.org/r/166869495238.3720468.4878151409085146764.stgit@warthog.procyon.org.uk/ # v3
Link: https://lore.kernel.org/r/1459152.1669208550@warthog.procyon.org.uk/ # v3 also
Link: https://lore.kernel.org/r/166924370539.1772793.13730698360771821317.stgit@warthog.procyon.org.uk/ # v4
Link: https://lore.kernel.org/r/167172131368.2334525.8569808925687731937.stgit@warthog.procyon.org.uk/ # v5
Link: https://lore.kernel.org/r/20230216150701.3654894-1-dhowells@redhat.com/ # v6
David Howells (2):
mm: Merge folio_has_private()/filemap_release_folio() call pairs
mm, netfs, fscache: Stop read optimisation when folio removed from
pagecache
fs/9p/cache.c | 2 ++
fs/afs/internal.h | 2 ++
fs/cachefiles/namei.c | 2 ++
fs/ceph/cache.c | 2 ++
fs/ext4/move_extent.c | 12 ++++--------
fs/nfs/fscache.c | 3 +++
fs/smb/client/fscache.c | 2 ++
fs/splice.c | 3 +--
include/linux/pagemap.h | 16 ++++++++++++++++
mm/filemap.c | 2 ++
mm/huge_memory.c | 3 +--
mm/internal.h | 11 +++++++++++
mm/khugepaged.c | 3 +--
mm/memory-failure.c | 8 +++-----
mm/migrate.c | 3 +--
mm/truncate.c | 6 ++----
mm/vmscan.c | 8 ++++----
17 files changed, 59 insertions(+), 29 deletions(-)
More information about the Linux-erofs
mailing list