[PATCH v3 10/17] btrfs: replace btrfs_set_free_space_cache_v1_active() with a cleanup helper
From: Tal Zussman
Date: Thu Sep 17 2026 - 00:02:01 EST
The only caller passes active = false. Turn it into
btrfs_cleanup_free_space_cache_v1() and fold the block group loop into
it.
Assisted-by: Claude:claude-fable-5-1
Signed-off-by: Tal Zussman <tz2294@xxxxxxxxxxxx>
---
fs/btrfs/disk-io.c | 2 +-
fs/btrfs/free-space-cache.c | 42 ++++++++++++------------------------------
fs/btrfs/free-space-cache.h | 2 +-
3 files changed, 14 insertions(+), 32 deletions(-)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 2ac0e7c2f1e4..323fbbea48e5 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -3149,7 +3149,7 @@ int btrfs_start_pre_rw_mount(struct btrfs_fs_info *fs_info)
}
if (btrfs_free_space_cache_v1_active(fs_info)) {
- ret = btrfs_set_free_space_cache_v1_active(fs_info, false);
+ ret = btrfs_cleanup_free_space_cache_v1(fs_info);
if (ret)
return ret;
}
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index 3ba9ed4a39d0..fb6ff3db1241 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -2891,47 +2891,29 @@ bool btrfs_free_space_cache_v1_active(struct btrfs_fs_info *fs_info)
return btrfs_super_cache_generation(fs_info->super_copy);
}
-static int cleanup_free_space_cache_v1(struct btrfs_fs_info *fs_info,
- struct btrfs_trans_handle *trans)
+int btrfs_cleanup_free_space_cache_v1(struct btrfs_fs_info *fs_info)
{
- struct btrfs_block_group *block_group;
+ struct btrfs_trans_handle *trans;
struct rb_node *node;
+ int ret;
btrfs_info(fs_info, "cleaning free space cache v1");
- node = rb_first_cached(&fs_info->block_group_cache_tree);
- while (node) {
- int ret;
-
- block_group = rb_entry(node, struct btrfs_block_group, cache_node);
- ret = btrfs_remove_free_space_inode(trans, NULL, block_group);
- if (ret)
- return ret;
- node = rb_next(node);
- }
- return 0;
-}
-
-int btrfs_set_free_space_cache_v1_active(struct btrfs_fs_info *fs_info, bool active)
-{
- struct btrfs_trans_handle *trans;
- int ret;
-
/*
- * update_super_roots will appropriately set or unset
- * super_copy->cache_generation based on SPACE_CACHE and
- * BTRFS_FS_CLEANUP_SPACE_CACHE_V1. For this reason, we need a
- * transaction commit whether we are enabling space cache v1 and don't
- * have any other work to do, or are disabling it and removing free
- * space inodes.
+ * update_super_roots() zeroes super_copy->cache_generation while
+ * BTRFS_FS_CLEANUP_SPACE_CACHE_V1 is set, so this needs a commit.
*/
trans = btrfs_start_transaction(fs_info->tree_root, 0);
if (IS_ERR(trans))
return PTR_ERR(trans);
- if (!active) {
- set_bit(BTRFS_FS_CLEANUP_SPACE_CACHE_V1, &fs_info->flags);
- ret = cleanup_free_space_cache_v1(fs_info, trans);
+ set_bit(BTRFS_FS_CLEANUP_SPACE_CACHE_V1, &fs_info->flags);
+ for (node = rb_first_cached(&fs_info->block_group_cache_tree); node;
+ node = rb_next(node)) {
+ struct btrfs_block_group *block_group;
+
+ block_group = rb_entry(node, struct btrfs_block_group, cache_node);
+ ret = btrfs_remove_free_space_inode(trans, NULL, block_group);
if (unlikely(ret)) {
btrfs_abort_transaction(trans, ret);
btrfs_end_transaction(trans);
diff --git a/fs/btrfs/free-space-cache.h b/fs/btrfs/free-space-cache.h
index 29166cc09b90..f5f18e397b13 100644
--- a/fs/btrfs/free-space-cache.h
+++ b/fs/btrfs/free-space-cache.h
@@ -136,7 +136,7 @@ int btrfs_trim_block_group_bitmaps(struct btrfs_block_group *block_group,
void btrfs_trim_fully_remapped_block_group(struct btrfs_block_group *bg);
bool btrfs_free_space_cache_v1_active(struct btrfs_fs_info *fs_info);
-int btrfs_set_free_space_cache_v1_active(struct btrfs_fs_info *fs_info, bool active);
+int btrfs_cleanup_free_space_cache_v1(struct btrfs_fs_info *fs_info);
/* Support functions for running our sanity tests */
#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
bool btrfs_use_bitmap(struct btrfs_free_space_ctl *ctl,
--
2.39.5