From: David Sterba Date: Tue, 25 Feb 2025 16:16:48 +0000 (+0100) Subject: btrfs: simplify parameters of metadata folio helpers X-Git-Tag: v6.15-rc1~152^2~79 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b7226ce6c4193c7fe52cd1be825348b9d3fdfd56;p=thirdparty%2Flinux.git btrfs: simplify parameters of metadata folio helpers Unlike folio helpers for date the ones for metadata always take the extent buffer start and length, so they can be simplified to take the eb only. The fs_info can be obtained from eb too so it can be dropped as parameter. Added in patch "btrfs: use metadata specific helpers to simplify extent buffer helpers". Reviewed-by: Johannes Thumshirn Signed-off-by: David Sterba --- diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index a799216aa2645..574795f30167a 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -284,8 +284,7 @@ blk_status_t btree_csum_one_bio(struct btrfs_bio *bbio) if (WARN_ON_ONCE(found_start != eb->start)) return BLK_STS_IOERR; - if (WARN_ON(!btrfs_meta_folio_test_uptodate(fs_info, eb->folios[0], - eb->start, eb->len))) + if (WARN_ON(!btrfs_meta_folio_test_uptodate(eb->folios[0], eb))) return BLK_STS_IOERR; ASSERT(memcmp_extent_buffer(eb, fs_info->fs_devices->metadata_uuid, diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 3f2bbebe75989..5239ad70ac3e2 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -1730,16 +1730,13 @@ static struct extent_buffer *find_extent_buffer_nolock( static void end_bbio_meta_write(struct btrfs_bio *bbio) { struct extent_buffer *eb = bbio->private; - struct btrfs_fs_info *fs_info = eb->fs_info; struct folio_iter fi; if (bbio->bio.bi_status != BLK_STS_OK) set_btree_ioerr(eb); bio_for_each_folio_all(fi, &bbio->bio) { - struct folio *folio = fi.folio; - - btrfs_meta_folio_clear_writeback(fs_info, folio, eb->start, eb->len); + btrfs_meta_folio_clear_writeback(fi.folio, eb); } clear_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags); @@ -1801,8 +1798,8 @@ static noinline_for_stack void write_one_eb(struct extent_buffer *eb, eb->start + eb->len) - range_start; folio_lock(folio); - btrfs_meta_folio_clear_dirty(fs_info, folio, eb->start, eb->len); - btrfs_meta_folio_set_writeback(fs_info, folio, eb->start, eb->len); + btrfs_meta_folio_clear_dirty(folio, eb); + btrfs_meta_folio_set_writeback(folio, eb); if (!folio_test_dirty(folio)) wbc->nr_to_write -= folio_nr_pages(folio); bio_add_folio_nofail(&bbio->bio, folio, range_len, @@ -3124,7 +3121,7 @@ reallocate: * and free the allocated page. */ folio = eb->folios[i]; - WARN_ON(btrfs_meta_folio_test_dirty(fs_info, folio, eb->start, eb->len)); + WARN_ON(btrfs_meta_folio_test_dirty(folio, eb)); /* * Check if the current page is physically contiguous with previous eb @@ -3135,7 +3132,7 @@ reallocate: if (i && folio_page(eb->folios[i - 1], 0) + 1 != folio_page(folio, 0)) page_contig = false; - if (!btrfs_meta_folio_test_uptodate(fs_info, folio, eb->start, eb->len)) + if (!btrfs_meta_folio_test_uptodate(folio, eb)) uptodate = 0; /* @@ -3358,8 +3355,7 @@ void btrfs_clear_buffer_dirty(struct btrfs_trans_handle *trans, if (!folio_test_dirty(folio)) continue; folio_lock(folio); - last = btrfs_meta_folio_clear_and_test_dirty(fs_info, folio, - eb->start, eb->len); + last = btrfs_meta_folio_clear_and_test_dirty(folio, eb); if (last) btree_clear_folio_dirty_tag(folio); folio_unlock(folio); @@ -3398,8 +3394,7 @@ void set_extent_buffer_dirty(struct extent_buffer *eb) if (subpage) folio_lock(eb->folios[0]); for (int i = 0; i < num_folios; i++) - btrfs_meta_folio_set_dirty(eb->fs_info, eb->folios[i], - eb->start, eb->len); + btrfs_meta_folio_set_dirty(eb->folios[i], eb); if (subpage) folio_unlock(eb->folios[0]); percpu_counter_add_batch(&eb->fs_info->dirty_metadata_bytes, @@ -3414,7 +3409,6 @@ void set_extent_buffer_dirty(struct extent_buffer *eb) void clear_extent_buffer_uptodate(struct extent_buffer *eb) { - struct btrfs_fs_info *fs_info = eb->fs_info; int num_folios = num_extent_folios(eb); clear_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); @@ -3424,21 +3418,17 @@ void clear_extent_buffer_uptodate(struct extent_buffer *eb) if (!folio) continue; - btrfs_meta_folio_clear_uptodate(fs_info, folio, eb->start, eb->len); + btrfs_meta_folio_clear_uptodate(folio, eb); } } void set_extent_buffer_uptodate(struct extent_buffer *eb) { - struct btrfs_fs_info *fs_info = eb->fs_info; int num_folios = num_extent_folios(eb); set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); - for (int i = 0; i < num_folios; i++) { - struct folio *folio = eb->folios[i]; - - btrfs_meta_folio_set_uptodate(fs_info, folio, eb->start, eb->len); - } + for (int i = 0; i < num_folios; i++) + btrfs_meta_folio_set_uptodate(eb->folios[i], eb); } static void clear_extent_buffer_reading(struct extent_buffer *eb) diff --git a/fs/btrfs/subpage.c b/fs/btrfs/subpage.c index c237d2721826d..b7eb35c0257cd 100644 --- a/fs/btrfs/subpage.c +++ b/fs/btrfs/subpage.c @@ -627,30 +627,27 @@ bool btrfs_folio_clamp_test_##name(const struct btrfs_fs_info *fs_info, \ btrfs_subpage_clamp_range(folio, &start, &len); \ return btrfs_subpage_test_##name(fs_info, folio, start, len); \ } \ -void btrfs_meta_folio_set_##name(const struct btrfs_fs_info *fs_info, \ - struct folio *folio, u64 start, u32 len) \ +void btrfs_meta_folio_set_##name(struct folio *folio, const struct extent_buffer *eb) \ { \ - if (!btrfs_meta_is_subpage(fs_info)) { \ + if (!btrfs_meta_is_subpage(eb->fs_info)) { \ folio_set_func(folio); \ return; \ } \ - btrfs_subpage_set_##name(fs_info, folio, start, len); \ + btrfs_subpage_set_##name(eb->fs_info, folio, eb->start, eb->len); \ } \ -void btrfs_meta_folio_clear_##name(const struct btrfs_fs_info *fs_info, \ - struct folio *folio, u64 start, u32 len) \ +void btrfs_meta_folio_clear_##name(struct folio *folio, const struct extent_buffer *eb) \ { \ - if (!btrfs_meta_is_subpage(fs_info)) { \ + if (!btrfs_meta_is_subpage(eb->fs_info)) { \ folio_clear_func(folio); \ return; \ } \ - btrfs_subpage_clear_##name(fs_info, folio, start, len); \ + btrfs_subpage_clear_##name(eb->fs_info, folio, eb->start, eb->len); \ } \ -bool btrfs_meta_folio_test_##name(const struct btrfs_fs_info *fs_info, \ - struct folio *folio, u64 start, u32 len) \ +bool btrfs_meta_folio_test_##name(struct folio *folio, const struct extent_buffer *eb) \ { \ - if (!btrfs_meta_is_subpage(fs_info)) \ + if (!btrfs_meta_is_subpage(eb->fs_info)) \ return folio_test_func(folio); \ - return btrfs_subpage_test_##name(fs_info, folio, start, len); \ + return btrfs_subpage_test_##name(eb->fs_info, folio, eb->start, eb->len); \ } IMPLEMENT_BTRFS_PAGE_OPS(uptodate, folio_mark_uptodate, folio_clear_uptodate, folio_test_uptodate); @@ -761,17 +758,16 @@ void btrfs_folio_set_lock(const struct btrfs_fs_info *fs_info, * * If the affected folio is no longer dirty, return true. Otherwise return false. */ -bool btrfs_meta_folio_clear_and_test_dirty(const struct btrfs_fs_info *fs_info, - struct folio *folio, u64 start, u32 len) +bool btrfs_meta_folio_clear_and_test_dirty(struct folio *folio, const struct extent_buffer *eb) { bool last; - if (!btrfs_meta_is_subpage(fs_info)) { + if (!btrfs_meta_is_subpage(eb->fs_info)) { folio_clear_dirty_for_io(folio); return true; } - last = btrfs_subpage_clear_and_test_dirty(fs_info, folio, start, len); + last = btrfs_subpage_clear_and_test_dirty(eb->fs_info, folio, eb->start, eb->len); if (last) { folio_clear_dirty_for_io(folio); return true; diff --git a/fs/btrfs/subpage.h b/fs/btrfs/subpage.h index e10a1d308f32e..2515e380e9041 100644 --- a/fs/btrfs/subpage.h +++ b/fs/btrfs/subpage.h @@ -164,12 +164,9 @@ void btrfs_folio_clamp_clear_##name(const struct btrfs_fs_info *fs_info, \ struct folio *folio, u64 start, u32 len); \ bool btrfs_folio_clamp_test_##name(const struct btrfs_fs_info *fs_info, \ struct folio *folio, u64 start, u32 len); \ -void btrfs_meta_folio_set_##name(const struct btrfs_fs_info *fs_info, \ - struct folio *folio, u64 start, u32 len); \ -void btrfs_meta_folio_clear_##name(const struct btrfs_fs_info *fs_info, \ - struct folio *folio, u64 start, u32 len); \ -bool btrfs_meta_folio_test_##name(const struct btrfs_fs_info *fs_info, \ - struct folio *folio, u64 start, u32 len); \ +void btrfs_meta_folio_set_##name(struct folio *folio, const struct extent_buffer *eb); \ +void btrfs_meta_folio_clear_##name(struct folio *folio, const struct extent_buffer *eb); \ +bool btrfs_meta_folio_test_##name(struct folio *folio, const struct extent_buffer *eb); DECLARE_BTRFS_SUBPAGE_OPS(uptodate); DECLARE_BTRFS_SUBPAGE_OPS(dirty); @@ -195,8 +192,7 @@ bool btrfs_subpage_clear_and_test_dirty(const struct btrfs_fs_info *fs_info, void btrfs_folio_assert_not_dirty(const struct btrfs_fs_info *fs_info, struct folio *folio, u64 start, u32 len); -bool btrfs_meta_folio_clear_and_test_dirty(const struct btrfs_fs_info *fs_info, - struct folio *folio, u64 start, u32 len); +bool btrfs_meta_folio_clear_and_test_dirty(struct folio *folio, const struct extent_buffer *eb); void btrfs_get_subpage_dirty_bitmap(struct btrfs_fs_info *fs_info, struct folio *folio, unsigned long *ret_bitmap);