The critical patch to review here is patch 11, "Handle truncates that split THPs". This code is shared with shmem, and while xfstests passes (both with the tmpfs filesystem and with THPs enabled for XFS), it is terribly subtle. I posted a similar patch series a few weeks ago [1], but this goes a few steps further than that one did. In addition to the unification of find_get_entries() and pagevec_lookup_entries(), this patch series includes: - Only return the head pages from tagged lookups - Factor a lot of common code out of the various batch lookup routines - Add mapping_seek_hole_data() - Only return head pages from find_get_entries I also have a patch to iomap to use mapping_seek_hole_data(), but I'm not including that as part of this batch of patches -- I'll send it through the iomap tree once mapping_seek_hole_data() lands upstream. [1] https://lore.kernel.org/linux-mm/20200819184850.24779-1-willy@xxxxxxxxxxxxx/ Matthew Wilcox (Oracle) (12): mm: Make pagecache tagged lookups return only head pages mm/shmem: Use pagevec_lookup in shmem_unlock_mapping mm/filemap: Add helper for finding pages mm/filemap: Add mapping_seek_hole_data mm: Add and use find_lock_entries mm: Add an 'end' parameter to find_get_entries mm: Add an 'end' parameter to pagevec_lookup_entries mm: Remove nr_entries parameter from pagevec_lookup_entries mm: Pass pvec directly to find_get_entries mm: Remove pagevec_lookup_entries mm/truncate,shmem: Handle truncates that split THPs mm/filemap: Return only head pages from find_get_entries include/linux/pagemap.h | 5 +- include/linux/pagevec.h | 4 - mm/filemap.c | 267 +++++++++++++++++++++++++++------------- mm/internal.h | 5 + mm/shmem.c | 214 +++++++------------------------- mm/swap.c | 38 +----- mm/truncate.c | 249 ++++++++++++++----------------------- 7 files changed, 329 insertions(+), 453 deletions(-) -- 2.28.0