]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
btrfs: add and use helper to remove extent map from its inode's tree
authorFilipe Manana <fdmanana@suse.com>
Fri, 6 Sep 2024 15:00:43 +0000 (16:00 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 11 Nov 2024 13:34:17 +0000 (14:34 +0100)
Move the common code to remove an extent map from its inode's tree into a
helper function and use it, reducing duplicated code.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_map.c

index a8b86f12b00dcea0d6858cd42257d4f0ca2a3b15..ed2a5ccbb189b5300fef63a020b57a4cc621981c 100644 (file)
@@ -77,10 +77,13 @@ static u64 range_end(u64 start, u64 len)
        return start + len;
 }
 
-static void dec_evictable_extent_maps(struct btrfs_inode *inode)
+static void remove_em(struct btrfs_inode *inode, struct extent_map *em)
 {
        struct btrfs_fs_info *fs_info = inode->root->fs_info;
 
+       rb_erase(&em->rb_node, &inode->extent_tree.root);
+       RB_CLEAR_NODE(&em->rb_node);
+
        if (!btrfs_is_testing(fs_info) && is_fstree(btrfs_root_id(inode->root)))
                percpu_counter_dec(&fs_info->evictable_extent_maps);
 }
@@ -339,7 +342,6 @@ static void validate_extent_map(struct btrfs_fs_info *fs_info, struct extent_map
 static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em)
 {
        struct btrfs_fs_info *fs_info = inode->root->fs_info;
-       struct extent_map_tree *tree = &inode->extent_tree;
        struct extent_map *merge = NULL;
        struct rb_node *rb;
 
@@ -371,10 +373,8 @@ static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em)
                        em->flags |= EXTENT_FLAG_MERGED;
 
                        validate_extent_map(fs_info, em);
-                       rb_erase(&merge->rb_node, &tree->root);
-                       RB_CLEAR_NODE(&merge->rb_node);
+                       remove_em(inode, merge);
                        free_extent_map(merge);
-                       dec_evictable_extent_maps(inode);
                }
        }
 
@@ -386,12 +386,10 @@ static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em)
                if (em->disk_bytenr < EXTENT_MAP_LAST_BYTE)
                        merge_ondisk_extents(em, merge, em);
                validate_extent_map(fs_info, em);
-               rb_erase(&merge->rb_node, &tree->root);
-               RB_CLEAR_NODE(&merge->rb_node);
                em->generation = max(em->generation, merge->generation);
                em->flags |= EXTENT_FLAG_MERGED;
+               remove_em(inode, merge);
                free_extent_map(merge);
-               dec_evictable_extent_maps(inode);
        }
 }
 
@@ -588,12 +586,10 @@ void remove_extent_mapping(struct btrfs_inode *inode, struct extent_map *em)
        lockdep_assert_held_write(&tree->lock);
 
        WARN_ON(em->flags & EXTENT_FLAG_PINNED);
-       rb_erase(&em->rb_node, &tree->root);
        if (!(em->flags & EXTENT_FLAG_LOGGING))
                list_del_init(&em->list);
-       RB_CLEAR_NODE(&em->rb_node);
 
-       dec_evictable_extent_maps(inode);
+       remove_em(inode, em);
 }
 
 static void replace_extent_mapping(struct btrfs_inode *inode,