ext4: optimize ext4_ext_precache for 0 depth
authorRitesh Harjani <riteshh@linux.ibm.com>
Fri, 28 Feb 2020 09:26:55 +0000 (14:56 +0530)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 14 Mar 2020 18:43:12 +0000 (14:43 -0400)
This patch avoids the memory alloc & free path when depth is 0,
since anyway there is no extra caching done in that case.
So on checking depth 0, simply return early.

Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/93da0d0f073c73358e85bb9849d8a5378d1da539.1582880246.git.riteshh@linux.ibm.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/extents.c

index bc96529d1509bbc812e6e7b66a77825c3a1cad94..2ebc858fd3923525ca0e23338d75b249ed7ff1d7 100644 (file)
@@ -549,6 +549,12 @@ int ext4_ext_precache(struct inode *inode)
        down_read(&ei->i_data_sem);
        depth = ext_depth(inode);
 
+       /* Don't cache anything if there are no external extent blocks */
+       if (!depth) {
+               up_read(&ei->i_data_sem);
+               return ret;
+       }
+
        path = kcalloc(depth + 1, sizeof(struct ext4_ext_path),
                       GFP_NOFS);
        if (path == NULL) {
@@ -556,9 +562,6 @@ int ext4_ext_precache(struct inode *inode)
                return -ENOMEM;
        }
 
-       /* Don't cache anything if there are no external extent blocks */
-       if (depth == 0)
-               goto out;
        path[0].p_hdr = ext_inode_hdr(inode);
        ret = ext4_ext_check(inode, path[0].p_hdr, depth, 0);
        if (ret)