]> www.infradead.org Git - users/jedix/linux-maple.git/commit
btrfs: use folio_contains() for EOF detection
authorQu Wenruo <wqu@suse.com>
Thu, 3 Apr 2025 23:40:51 +0000 (10:10 +1030)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 12:30:43 +0000 (14:30 +0200)
commit2b14b74b992187933069cb3316c691dbd5707f47
tree32d72d4296468a000ba94dd77efab9d057a95042
parente1fcad644b405928b4bf74b1cfd9322008992019
btrfs: use folio_contains() for EOF detection

Currently we use the following pattern to detect if the folio contains
the end of a file:

if (folio->index == end_index)
folio_zero_range();

But that only works if the folio is page sized.

For the following case, it will not work and leave the range beyond EOF
uninitialized:

  The page size is 4K, and the fs block size is also 4K.

16K        20K       24K
        |          |     |   |
                 |
                         EOF at 22K

And we have a large folio sized 8K at file offset 16K.

In that case, the old "folio->index == end_index" will not work, thus
the range [22K, 24K) will not be zeroed out.

Fix the following call sites which use the above pattern:

- add_ra_bio_pages()

- extent_writepage()

Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/compression.c
fs/btrfs/extent_io.c