]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ext4: allow a NULL argument to ext4_ext_drop_refs()
authorTheodore Ts'o <tytso@mit.edu>
Mon, 1 Sep 2014 18:39:09 +0000 (14:39 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 1 Sep 2014 18:39:09 +0000 (14:39 -0400)
Teach ext4_ext_drop_refs() to accept a NULL argument, much like
kfree().  This allows us to drop a lot of checks to make sure path is
non-NULL before calling ext4_ext_drop_refs().

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/extents.c
fs/ext4/extents_status.c
fs/ext4/migrate.c
fs/ext4/move_extent.c

index 4f4d5239871292fa26cba479a8f17a08a69a2cd3..538f9a4d96ffbd090c8da30822664042f93c7f81 100644 (file)
@@ -709,9 +709,11 @@ static void ext4_ext_show_move(struct inode *inode, struct ext4_ext_path *path,
 
 void ext4_ext_drop_refs(struct ext4_ext_path *path)
 {
-       int depth = path->p_depth;
-       int i;
+       int depth, i;
 
+       if (!path)
+               return;
+       depth = path->p_depth;
        for (i = 0; i <= depth; i++, path++)
                if (path->p_bh) {
                        brelse(path->p_bh);
@@ -2125,10 +2127,8 @@ int ext4_ext_insert_extent(handle_t *handle, struct inode *inode,
        err = ext4_ext_dirty(handle, inode, path + path->p_depth);
 
 cleanup:
-       if (npath) {
-               ext4_ext_drop_refs(npath);
-               kfree(npath);
-       }
+       ext4_ext_drop_refs(npath);
+       kfree(npath);
        return err;
 }
 
@@ -2283,11 +2283,8 @@ static int ext4_fill_fiemap_extents(struct inode *inode,
                block = es.es_lblk + es.es_len;
        }
 
-       if (path) {
-               ext4_ext_drop_refs(path);
-               kfree(path);
-       }
-
+       ext4_ext_drop_refs(path);
+       kfree(path);
        return err;
 }
 
@@ -3018,11 +3015,9 @@ int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start,
                }
        }
 out:
-       if (path) {
-               ext4_ext_drop_refs(path);
-               kfree(path);
-               path = NULL;
-       }
+       ext4_ext_drop_refs(path);
+       kfree(path);
+       path = NULL;
        if (err == -EAGAIN)
                goto again;
        ext4_journal_stop(handle);
@@ -4611,10 +4606,8 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,
        map->m_pblk = newblock;
        map->m_len = allocated;
 out2:
-       if (path) {
-               ext4_ext_drop_refs(path);
-               kfree(path);
-       }
+       ext4_ext_drop_refs(path);
+       kfree(path);
 
        trace_ext4_ext_map_blocks_exit(inode, flags, map,
                                       err ? err : allocated);
@@ -5693,16 +5686,11 @@ ext4_swap_extents(handle_t *handle, struct inode *inode1,
                count -= len;
 
        repeat:
-               if (path1) {
-                       ext4_ext_drop_refs(path1);
-                       kfree(path1);
-                       path1 = NULL;
-               }
-               if (path2) {
-                       ext4_ext_drop_refs(path2);
-                       kfree(path2);
-                       path2 = NULL;
-               }
+               ext4_ext_drop_refs(path1);
+               kfree(path1);
+               ext4_ext_drop_refs(path2);
+               kfree(path2);
+               path1 = path2 = NULL;
        }
        return replaced_count;
 }
index 0b7e28e7eaa4303938877743114bce5e367a8c2d..8ffff966d594fb177e68eeeb6877942f668b9d65 100644 (file)
@@ -499,10 +499,8 @@ static void ext4_es_insert_extent_ext_check(struct inode *inode,
                }
        }
 out:
-       if (path) {
-               ext4_ext_drop_refs(path);
-               kfree(path);
-       }
+       ext4_ext_drop_refs(path);
+       kfree(path);
 }
 
 static void ext4_es_insert_extent_ind_check(struct inode *inode,
index aff7bdfdc46147609b841caf98a4cdf74fe752a9..061c300703c72240d167944ea4b98990027ef671 100644 (file)
@@ -84,10 +84,8 @@ static int finish_range(handle_t *handle, struct inode *inode,
        retval = ext4_ext_insert_extent(handle, inode, &path, &newext, 0);
 err_out:
        up_write((&EXT4_I(inode)->i_data_sem));
-       if (path) {
-               ext4_ext_drop_refs(path);
-               kfree(path);
-       }
+       ext4_ext_drop_refs(path);
+       kfree(path);
        lb->first_pblock = 0;
        return retval;
 }
index 5e2465a8e4ce8ecca98517ad15b1d37209a15bba..a34c0760276c319f05520fdf14f519d43f6216a3 100644 (file)
@@ -113,10 +113,8 @@ mext_check_coverage(struct inode *inode, ext4_lblk_t from, ext4_lblk_t count,
        }
        ret = 1;
 out:
-       if (path) {
-               ext4_ext_drop_refs(path);
-               kfree(path);
-       }
+       ext4_ext_drop_refs(path);
+       kfree(path);
        return ret;
 }
 
@@ -711,11 +709,9 @@ ext4_move_extents(struct file *o_filp, struct file *d_filp, __u64 orig_blk,
                o_start += cur_len;
                d_start += cur_len;
        repeat:
-               if (path) {
-                       ext4_ext_drop_refs(path);
-                       kfree(path);
-                       path = NULL;
-               }
+               ext4_ext_drop_refs(path);
+               kfree(path);
+               path = NULL;
        }
        *moved_len = o_start - orig_blk;
        if (*moved_len > len)
@@ -727,10 +723,8 @@ ext4_move_extents(struct file *o_filp, struct file *d_filp, __u64 orig_blk,
                ext4_discard_preallocations(donor_inode);
        }
 
-       if (path) {
-               ext4_ext_drop_refs(path);
-               kfree(path);
-       }
+       ext4_ext_drop_refs(path);
+       kfree(path);
        ext4_double_up_write_data_sem(orig_inode, donor_inode);
        ext4_inode_resume_unlocked_dio(orig_inode);
        ext4_inode_resume_unlocked_dio(donor_inode);