]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/filemap: do not use is_partially_uptodate for entire folio
authorChi Zhiling <chizhiling@kylinos.cn>
Mon, 28 Jul 2025 08:39:51 +0000 (16:39 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 12 Sep 2025 00:25:10 +0000 (17:25 -0700)
Patch series "Tiny optimization for large read operations".

This series contains two patches,

1. Skip calling is_partially_uptodate for entire folio to save time, I
   have reviewed the mpage and iomap implementations and didn't spot any
   issues, but this change likely needs more thorough review.

2. Skip calling filemap_uptodate if there are ready folios in the
   batch, This might save a few milliseconds in practice, but I didn't
   observe measurable improvements in my tests.

This patch (of 2):

When a folio is marked as non-uptodate, it means the folio contains some
non-uptodate data.  Therefore, calling is_partially_uptodate() to recheck
the entire folio is redundant.

If all data in a folio is actually up-to-date but the folio lacks the
uptodate flag, it will still be treated as non-uptodate in many other
places.  Thus, there should be no special case handling for filemap.

Link: https://lkml.kernel.org/r/20250728083952.75518-1-chizhiling@163.com
Link: https://lkml.kernel.org/r/20250728083952.75518-2-chizhiling@163.com
Signed-off-by: Chi Zhiling <chizhiling@kylinos.cn>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Jan Kara <jack@suse.cz>
Cc: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/filemap.c

index f3a6c24897f4ac3198432421c55a65438b5b5d5f..d6f95513241f027b68fa6f75025ac82e4465065b 100644 (file)
@@ -2447,6 +2447,9 @@ static bool filemap_range_uptodate(struct address_space *mapping,
                pos -= folio_pos(folio);
        }
 
+       if (pos == 0 && count >= folio_size(folio))
+               return false;
+
        return mapping->a_ops->is_partially_uptodate(folio, pos, count);
 }