]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
btrfs: do not assume the full page range is not dirty in extent_writepage_io()
authorQu Wenruo <wqu@suse.com>
Tue, 10 Sep 2024 23:22:36 +0000 (08:52 +0930)
committerDavid Sterba <dsterba@suse.com>
Mon, 11 Nov 2024 13:34:12 +0000 (14:34 +0100)
The function extent_writepage_io() will submit the dirty sectors inside
the page for the write.

But recently to co-operate with the incoming subpage compression
enhancement, a new bitmap is introduced to
btrfs_bio_ctrl::submit_bitmap, to only avoid a subset of the dirty
range.

This is because we can have the following cases with 64K page size:

    0      16K       32K       48K       64K
    |      |/////////|         |/|
                                 52K

For range [16K, 32K), we queue the dirty range for compression, which is
ran in a delayed workqueue.
Then for range [48K, 52K), we go through the regular submission path.

In that case, our btrfs_bio_ctrl::submit_bitmap will exclude the range
[16K, 32K).

The dirty flags for the range [16K, 32K) is only cleared when the
compression is done, by the extent_clear_unlock_delalloc() call inside
submit_one_async_extent().

This patch fix the false alert by removing the
btrfs_folio_assert_not_dirty() check, since it's no longer correct for
subpage compression cases.

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

index 7620d335f1ecfd95e94325a4fe8380e537fa9630..e5075b95cfd9ddf4ccf080b87cee47427e173699 100644 (file)
@@ -1391,8 +1391,6 @@ static noinline_for_stack int extent_writepage_io(struct btrfs_inode *inode,
                        goto out;
                submitted_io = true;
        }
-
-       btrfs_folio_assert_not_dirty(fs_info, folio, start, len);
 out:
        /*
         * If we didn't submitted any sector (>= i_size), folio dirty get