]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: remove pointless in_tree field from struct btrfs_delayed_ref_node
authorFilipe Manana <fdmanana@suse.com>
Mon, 29 May 2023 15:16:59 +0000 (16:16 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Jun 2023 11:59:31 +0000 (13:59 +0200)
The 'in_tree' field is really not needed in struct btrfs_delayed_ref_node,
as we can check whether a reference is in the tree or not simply by
checking its red black tree node member with RB_EMPTY_NODE(), as when we
remove it from the tree we always call RB_CLEAR_NODE(). So remove that
field and use RB_EMPTY_NODE().

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/delayed-ref.c
fs/btrfs/delayed-ref.h
fs/btrfs/disk-io.c
fs/btrfs/extent-tree.c

index be1d18ec5cef7a769c6675509406f5add1d0c0f8..d6dce5792c0f3cc5e2a88fb76498f64ba2ce308e 100644 (file)
@@ -407,7 +407,6 @@ static inline void drop_delayed_ref(struct btrfs_delayed_ref_root *delayed_refs,
        RB_CLEAR_NODE(&ref->ref_node);
        if (!list_empty(&ref->add_list))
                list_del(&ref->add_list);
-       ref->in_tree = 0;
        btrfs_put_delayed_ref(ref);
        atomic_dec(&delayed_refs->num_entries);
 }
@@ -853,7 +852,6 @@ static void init_delayed_ref_common(struct btrfs_fs_info *fs_info,
        ref->num_bytes = num_bytes;
        ref->ref_mod = 1;
        ref->action = action;
-       ref->in_tree = 1;
        ref->seq = seq;
        ref->type = ref_type;
        RB_CLEAR_NODE(&ref->ref_node);
index 77b3e735772dfd3b6e3fedf69b42d4c3da567d41..9b103bf2718531ea8e9c2cf1a8ada8e36d74618b 100644 (file)
@@ -48,7 +48,6 @@ struct btrfs_delayed_ref_node {
 
        unsigned int action:8;
        unsigned int type:8;
-       unsigned int in_tree:1;
 };
 
 struct btrfs_delayed_extent_op {
@@ -341,7 +340,7 @@ static inline void btrfs_put_delayed_ref(struct btrfs_delayed_ref_node *ref)
 {
        WARN_ON(refcount_read(&ref->refs) == 0);
        if (refcount_dec_and_test(&ref->refs)) {
-               WARN_ON(ref->in_tree);
+               WARN_ON(!RB_EMPTY_NODE(&ref->ref_node));
                switch (ref->type) {
                case BTRFS_TREE_BLOCK_REF_KEY:
                case BTRFS_SHARED_BLOCK_REF_KEY:
index 1ad7037c663114d72046ba8c5d32ad4076925479..55cbbe7b0dba10a15aa3e2e46d715baa3127a252 100644 (file)
@@ -4602,7 +4602,6 @@ static int btrfs_destroy_delayed_refs(struct btrfs_transaction *trans,
                while ((n = rb_first_cached(&head->ref_tree)) != NULL) {
                        ref = rb_entry(n, struct btrfs_delayed_ref_node,
                                       ref_node);
-                       ref->in_tree = 0;
                        rb_erase_cached(&ref->ref_node, &head->ref_tree);
                        RB_CLEAR_NODE(&ref->ref_node);
                        if (!list_empty(&ref->add_list))
index 71aaf28fafc94d22d14ad7778ca5c7771874c8c9..81a6735060773cd5b9168a6786ee58b47307765d 100644 (file)
@@ -1913,7 +1913,6 @@ static int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,
                        return -EAGAIN;
                }
 
-               ref->in_tree = 0;
                rb_erase_cached(&ref->ref_node, &locked_ref->ref_tree);
                RB_CLEAR_NODE(&ref->ref_node);
                if (!list_empty(&ref->add_list))