btrfs: simplify parameters of metadata folio helpers
authorDavid Sterba <dsterba@suse.com>
Tue, 25 Feb 2025 16:16:48 +0000 (17:16 +0100)
committerDavid Sterba <dsterba@suse.com>
Tue, 18 Mar 2025 19:35:47 +0000 (20:35 +0100)
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 <johannes.thumshirn@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c
fs/btrfs/extent_io.c
fs/btrfs/subpage.c
fs/btrfs/subpage.h

index a799216aa2645a63d065fee335fcb9f573283ab1..574795f30167a248e37a103acebd0b9b29089a5b 100644 (file)
@@ -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,
index 3f2bbebe759896155831b7964c49250bb4464463..5239ad70ac3e22c10275aba3a402ab9c4beec5fe 100644 (file)
@@ -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)
index c237d2721826d4817400c4b7b96fb174a978400d..b7eb35c0257cd9c680ff5e89fbb14e49854314d1 100644 (file)
@@ -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;
index e10a1d308f32ee9baf133a0252a62a34110f975b..2515e380e90419cb0f598df0d1635a86ca6680ee 100644 (file)
@@ -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);