@@ -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,
@@ -1736,16 +1736,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);
@@ -1807,8 +1804,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,
@@ -3138,7 +3135,7 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
* 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
@@ -3149,7 +3146,7 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
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;
/*
@@ -3372,8 +3369,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);
@@ -3412,8 +3408,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,
@@ -3428,7 +3423,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);
@@ -3438,21 +3432,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)
@@ -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;
@@ -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);
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". Signed-off-by: David Sterba <dsterba@suse.com> --- fs/btrfs/disk-io.c | 3 +-- fs/btrfs/extent_io.c | 30 ++++++++++-------------------- fs/btrfs/subpage.c | 28 ++++++++++++---------------- fs/btrfs/subpage.h | 12 ++++-------- 4 files changed, 27 insertions(+), 46 deletions(-)