diff options
-rw-r--r-- | fs/btrfs/disk-io.c | 3 | ||||
-rw-r--r-- | fs/btrfs/extent_io.c | 30 | ||||
-rw-r--r-- | fs/btrfs/subpage.c | 28 | ||||
-rw-r--r-- | fs/btrfs/subpage.h | 12 |
4 files changed, 27 insertions, 46 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index a799216aa264..574795f30167 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 3f2bbebe7598..5239ad70ac3e 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 c237d2721826..b7eb35c0257c 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 e10a1d308f32..2515e380e904 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); |