[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230628104852.3391651-1-dhowells@redhat.com>
Date: Wed, 28 Jun 2023 11:48:50 +0100
From: David Howells <dhowells@...hat.com>
To: Andrew Morton <akpm@...ux-foundation.org>
Cc: David Howells <dhowells@...hat.com>,
Matthew Wilcox <willy@...radead.org>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Jeff Layton <jlayton@...nel.org>,
Christoph Hellwig <hch@...radead.org>,
linux-afs@...ts.infradead.org, linux-nfs@...r.kernel.org,
linux-cifs@...r.kernel.org, ceph-devel@...r.kernel.org,
v9fs-developer@...ts.sourceforge.net, linux-erofs@...ts.ozlabs.org,
linux-ext4@...r.kernel.org, linux-cachefs@...hat.com,
linux-fsdevel@...r.kernel.org
Subject: [PATCH v7 0/2] mm, netfs, fscache: Stop read optimisation when folio removed from pagecache
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(-)
Powered by blists - more mailing lists