btrfs: use rb_entry_safe() where possible to simplify code
authorDavid Sterba <dsterba@suse.com>
Thu, 27 Mar 2025 16:19:18 +0000 (17:19 +0100)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 12:30:40 +0000 (14:30 +0200)
Simplify conditionally reading an rb_entry(), there's the
rb_entry_safe() helper that checks the node pointer for NULL so we don't
have to write it explicitly.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/defrag.c
fs/btrfs/delayed-inode.c
fs/btrfs/delayed-ref.c
fs/btrfs/extent-io-tree.c
fs/btrfs/extent_map.c

index d4310d93f53285c1673dc6e0bc3ccb419eef14d6..d302a67efcedb6d0f184429eccf7adf8489506fc 100644 (file)
@@ -191,10 +191,7 @@ static struct inode_defrag *btrfs_pick_defrag_inode(
 
        if (parent && compare_inode_defrag(&tmp, entry) > 0) {
                parent = rb_next(parent);
-               if (parent)
-                       entry = rb_entry(parent, struct inode_defrag, rb_node);
-               else
-                       entry = NULL;
+               entry = rb_entry_safe(parent, struct inode_defrag, rb_node);
        }
 out:
        if (entry)
index 3f1551d8a5c68bef0bda65f05831b1f82993cd12..c49bf8f2889ddad62f83867413caac6ee8ac1325 100644 (file)
@@ -454,40 +454,25 @@ static void btrfs_release_delayed_item(struct btrfs_delayed_item *item)
 static struct btrfs_delayed_item *__btrfs_first_delayed_insertion_item(
                                        struct btrfs_delayed_node *delayed_node)
 {
-       struct rb_node *p;
-       struct btrfs_delayed_item *item = NULL;
+       struct rb_node *p = rb_first_cached(&delayed_node->ins_root);
 
-       p = rb_first_cached(&delayed_node->ins_root);
-       if (p)
-               item = rb_entry(p, struct btrfs_delayed_item, rb_node);
-
-       return item;
+       return rb_entry_safe(p, struct btrfs_delayed_item, rb_node);
 }
 
 static struct btrfs_delayed_item *__btrfs_first_delayed_deletion_item(
                                        struct btrfs_delayed_node *delayed_node)
 {
-       struct rb_node *p;
-       struct btrfs_delayed_item *item = NULL;
-
-       p = rb_first_cached(&delayed_node->del_root);
-       if (p)
-               item = rb_entry(p, struct btrfs_delayed_item, rb_node);
+       struct rb_node *p = rb_first_cached(&delayed_node->del_root);
 
-       return item;
+       return rb_entry_safe(p, struct btrfs_delayed_item, rb_node);
 }
 
 static struct btrfs_delayed_item *__btrfs_next_delayed_item(
                                                struct btrfs_delayed_item *item)
 {
-       struct rb_node *p;
-       struct btrfs_delayed_item *next = NULL;
-
-       p = rb_next(&item->rb_node);
-       if (p)
-               next = rb_entry(p, struct btrfs_delayed_item, rb_node);
+       struct rb_node *p = rb_next(&item->rb_node);
 
-       return next;
+       return rb_entry_safe(p, struct btrfs_delayed_item, rb_node);
 }
 
 static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,
index 98c5b61dabe88cae4bcdc89c0966f7b62a3d7714..343a452a9f9fa5912ae8831f43a5f68e69c10d67 100644 (file)
@@ -331,12 +331,9 @@ static struct btrfs_delayed_ref_node* tree_insert(struct rb_root_cached *root,
                struct btrfs_delayed_ref_node *ins)
 {
        struct rb_node *node = &ins->ref_node;
-       struct rb_node *exist;
+       struct rb_node *exist = rb_find_add_cached(node, root, cmp_refs_node);
 
-       exist = rb_find_add_cached(node, root, cmp_refs_node);
-       if (exist)
-               return rb_entry(exist, struct btrfs_delayed_ref_node, ref_node);
-       return NULL;
+       return rb_entry_safe(exist, struct btrfs_delayed_ref_node, ref_node);
 }
 
 static struct btrfs_delayed_ref_head *find_first_ref_head(
index 7ae24a5334042dc33c3a221b2e4c1752bcbc80be..a9b163269252bbeed90f58ac21ab1fde7c4a048d 100644 (file)
@@ -222,20 +222,14 @@ static inline struct extent_state *next_state(struct extent_state *state)
 {
        struct rb_node *next = rb_next(&state->rb_node);
 
-       if (next)
-               return rb_entry(next, struct extent_state, rb_node);
-       else
-               return NULL;
+       return rb_entry_safe(next, struct extent_state, rb_node);
 }
 
 static inline struct extent_state *prev_state(struct extent_state *state)
 {
        struct rb_node *next = rb_prev(&state->rb_node);
 
-       if (next)
-               return rb_entry(next, struct extent_state, rb_node);
-       else
-               return NULL;
+       return rb_entry_safe(next, struct extent_state, rb_node);
 }
 
 /*
index 7f46abbd6311b292cba96fc9ed9968502ade8919..d62c36a0b7ba41b67975db0f0416eff175a2cbaa 100644 (file)
@@ -361,8 +361,8 @@ static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em)
 
        if (em->start != 0) {
                rb = rb_prev(&em->rb_node);
-               if (rb)
-                       merge = rb_entry(rb, struct extent_map, rb_node);
+               merge = rb_entry_safe(rb, struct extent_map, rb_node);
+
                if (rb && can_merge_extent_map(merge) && mergeable_maps(merge, em)) {
                        em->start = merge->start;
                        em->len += merge->len;
@@ -379,8 +379,8 @@ static void try_merge_map(struct btrfs_inode *inode, struct extent_map *em)
        }
 
        rb = rb_next(&em->rb_node);
-       if (rb)
-               merge = rb_entry(rb, struct extent_map, rb_node);
+       merge = rb_entry_safe(rb, struct extent_map, rb_node);
+
        if (rb && can_merge_extent_map(merge) && mergeable_maps(em, merge)) {
                em->len += merge->len;
                if (em->disk_bytenr < EXTENT_MAP_LAST_BYTE)