]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
btrfs: move the block group freeze/unfreeze helpers into block-group.c
authorFilipe Manana <fdmanana@suse.com>
Fri, 8 May 2020 10:01:59 +0000 (11:01 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 25 May 2020 09:25:30 +0000 (11:25 +0200)
The helpers btrfs_freeze_block_group() and btrfs_unfreeze_block_group()
used to be named btrfs_get_block_group_trimming() and
btrfs_put_block_group_trimming() respectively.

At the time they were added to free-space-cache.c, by commit e33e17ee1098
("btrfs: add missing discards when unpinning extents with -o discard")
because all the trimming related functions were in free-space-cache.c.

Now that the helpers were renamed and are used in scrub context as well,
move them to block-group.c, a much more logical location for them.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/block-group.c
fs/btrfs/block-group.h
fs/btrfs/ctree.h
fs/btrfs/free-space-cache.c

index 3ceaacdd4ba57d7f685c88264d1e1636340705a9..c68d8e06f794b564ccca6254d9c638a1fd45d55b 100644 (file)
@@ -3381,3 +3381,44 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
        }
        return 0;
 }
+
+void btrfs_freeze_block_group(struct btrfs_block_group *cache)
+{
+       atomic_inc(&cache->frozen);
+}
+
+void btrfs_unfreeze_block_group(struct btrfs_block_group *block_group)
+{
+       struct btrfs_fs_info *fs_info = block_group->fs_info;
+       struct extent_map_tree *em_tree;
+       struct extent_map *em;
+       bool cleanup;
+
+       spin_lock(&block_group->lock);
+       cleanup = (atomic_dec_and_test(&block_group->frozen) &&
+                  block_group->removed);
+       spin_unlock(&block_group->lock);
+
+       if (cleanup) {
+               mutex_lock(&fs_info->chunk_mutex);
+               em_tree = &fs_info->mapping_tree;
+               write_lock(&em_tree->lock);
+               em = lookup_extent_mapping(em_tree, block_group->start,
+                                          1);
+               BUG_ON(!em); /* logic error, can't happen */
+               remove_extent_mapping(em_tree, em);
+               write_unlock(&em_tree->lock);
+               mutex_unlock(&fs_info->chunk_mutex);
+
+               /* once for us and once for the tree */
+               free_extent_map(em);
+               free_extent_map(em);
+
+               /*
+                * We may have left one free space entry and other possible
+                * tasks trimming this block group have left 1 entry each one.
+                * Free them if any.
+                */
+               __btrfs_remove_free_space_cache(block_group->free_space_ctl);
+       }
+}
index 04967ea7ba2c2d37a59069f8db0e745610eccbed..b6ee70a039c70ca01f99479ff193cf3704243a07 100644 (file)
@@ -292,6 +292,9 @@ static inline int btrfs_block_group_done(struct btrfs_block_group *cache)
                cache->cached == BTRFS_CACHE_ERROR;
 }
 
+void btrfs_freeze_block_group(struct btrfs_block_group *cache);
+void btrfs_unfreeze_block_group(struct btrfs_block_group *cache);
+
 #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
 int btrfs_rmap_block(struct btrfs_fs_info *fs_info, u64 chunk_start,
                     u64 physical, u64 **logical, int *naddrs, int *stripe_len);
index 242f974a445170ec967aeca0489dd6dd629f63f4..6e226c3719727b0f5fb36051183a19fc45144bac 100644 (file)
@@ -2481,8 +2481,6 @@ int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
                         struct btrfs_ref *generic_ref);
 
 int btrfs_extent_readonly(struct btrfs_fs_info *fs_info, u64 bytenr);
-void btrfs_freeze_block_group(struct btrfs_block_group *cache);
-void btrfs_unfreeze_block_group(struct btrfs_block_group *cache);
 void btrfs_clear_space_info_full(struct btrfs_fs_info *info);
 
 enum btrfs_reserve_flush_enum {
index e9cfe9da6bbe08de80266b1ef58a266e5f3f99b1..3c353a337b911e66981a694453e7e3cb3d94d64a 100644 (file)
@@ -3762,47 +3762,6 @@ out:
        return ret;
 }
 
-void btrfs_freeze_block_group(struct btrfs_block_group *cache)
-{
-       atomic_inc(&cache->frozen);
-}
-
-void btrfs_unfreeze_block_group(struct btrfs_block_group *block_group)
-{
-       struct btrfs_fs_info *fs_info = block_group->fs_info;
-       struct extent_map_tree *em_tree;
-       struct extent_map *em;
-       bool cleanup;
-
-       spin_lock(&block_group->lock);
-       cleanup = (atomic_dec_and_test(&block_group->frozen) &&
-                  block_group->removed);
-       spin_unlock(&block_group->lock);
-
-       if (cleanup) {
-               mutex_lock(&fs_info->chunk_mutex);
-               em_tree = &fs_info->mapping_tree;
-               write_lock(&em_tree->lock);
-               em = lookup_extent_mapping(em_tree, block_group->start,
-                                          1);
-               BUG_ON(!em); /* logic error, can't happen */
-               remove_extent_mapping(em_tree, em);
-               write_unlock(&em_tree->lock);
-               mutex_unlock(&fs_info->chunk_mutex);
-
-               /* once for us and once for the tree */
-               free_extent_map(em);
-               free_extent_map(em);
-
-               /*
-                * We may have left one free space entry and other possible
-                * tasks trimming this block group have left 1 entry each one.
-                * Free them if any.
-                */
-               __btrfs_remove_free_space_cache(block_group->free_space_ctl);
-       }
-}
-
 int btrfs_trim_block_group(struct btrfs_block_group *block_group,
                           u64 *trimmed, u64 start, u64 end, u64 minlen)
 {