ext4: add new ext4_ext_path_brelse() helper
authorBaokun Li <libaokun1@huawei.com>
Thu, 22 Aug 2024 02:35:29 +0000 (10:35 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 4 Sep 2024 02:12:17 +0000 (22:12 -0400)
Add ext4_ext_path_brelse() helper function to reduce duplicate code
and ensure that path->p_bh is set to NULL after it is released.

Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Link: https://patch.msgid.link/20240822023545.1994557-10-libaokun@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/extents.c

index 7536ab837c3fad5a2d8de99d7bbf1fa5fa444a1a..94068f1a0d85a4d1c9057b1ebcc182beee4e05ce 100644 (file)
@@ -106,6 +106,12 @@ static int ext4_ext_trunc_restart_fn(struct inode *inode, int *dropped)
        return 0;
 }
 
+static inline void ext4_ext_path_brelse(struct ext4_ext_path *path)
+{
+       brelse(path->p_bh);
+       path->p_bh = NULL;
+}
+
 static void ext4_ext_drop_refs(struct ext4_ext_path *path)
 {
        int depth, i;
@@ -113,10 +119,8 @@ static void ext4_ext_drop_refs(struct ext4_ext_path *path)
        if (!path)
                return;
        depth = path->p_depth;
-       for (i = 0; i <= depth; i++, path++) {
-               brelse(path->p_bh);
-               path->p_bh = NULL;
-       }
+       for (i = 0; i <= depth; i++, path++)
+               ext4_ext_path_brelse(path);
 }
 
 void ext4_free_ext_path(struct ext4_ext_path *path)
@@ -635,8 +639,7 @@ int ext4_ext_precache(struct inode *inode)
                 */
                if ((i == depth) ||
                    path[i].p_idx > EXT_LAST_INDEX(path[i].p_hdr)) {
-                       brelse(path[i].p_bh);
-                       path[i].p_bh = NULL;
+                       ext4_ext_path_brelse(path + i);
                        i--;
                        continue;
                }
@@ -1889,8 +1892,7 @@ static void ext4_ext_try_to_merge_up(handle_t *handle,
                (path[1].p_ext - EXT_FIRST_EXTENT(path[1].p_hdr));
        path[0].p_hdr->eh_max = cpu_to_le16(max_root);
 
-       brelse(path[1].p_bh);
-       path[1].p_bh = NULL;
+       ext4_ext_path_brelse(path + 1);
        ext4_free_blocks(handle, inode, NULL, blk, 1,
                         EXT4_FREE_BLOCKS_METADATA | EXT4_FREE_BLOCKS_FORGET);
 }
@@ -2959,8 +2961,7 @@ again:
                        err = ext4_ext_rm_leaf(handle, inode, path,
                                               &partial, start, end);
                        /* root level has p_bh == NULL, brelse() eats this */
-                       brelse(path[i].p_bh);
-                       path[i].p_bh = NULL;
+                       ext4_ext_path_brelse(path + i);
                        i--;
                        continue;
                }
@@ -3022,8 +3023,7 @@ again:
                                err = ext4_ext_rm_idx(handle, inode, path, i);
                        }
                        /* root level has p_bh == NULL, brelse() eats this */
-                       brelse(path[i].p_bh);
-                       path[i].p_bh = NULL;
+                       ext4_ext_path_brelse(path + i);
                        i--;
                        ext_debug(inode, "return to level %d\n", i);
                }