ext4: fix smatch warning in move_extent.c's mext_replace_branches()
authorAkria Fujita <a-fujita@rs.jp.nec.com>
Sat, 2 Feb 2013 01:52:46 +0000 (20:52 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 2 Feb 2013 01:52:46 +0000 (20:52 -0500)
Commit 2147b1a6a48 resulted in a new smatch warning:

> fs/ext4/move_extent.c:693 mext_replace_branches()
>   warn: variable dereferenced before check 'dext' (see line 683)

Fix this by adding a check to make sure dext is non-NULL before we
derefrence it.

Signed-off-by: Akria Fujita <a-fujita@rs.jp.nec.com>
[ modified by tytso to make sure an ext4_error is called ]
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/move_extent.c

index d9cc5ee42f534c9d1dcb87450493d93fbe5d320b..e4cdb5188f341e226ece90051ff6cfa7db3c3f79 100644 (file)
@@ -681,6 +681,8 @@ mext_replace_branches(handle_t *handle, struct inode *orig_inode,
 
        depth = ext_depth(donor_inode);
        dext = donor_path[depth].p_ext;
+       if (unlikely(!dext))
+               goto missing_donor_extent;
        tmp_dext = *dext;
 
        *err = mext_calc_swap_extents(&tmp_dext, &tmp_oext, orig_off,
@@ -691,7 +693,8 @@ mext_replace_branches(handle_t *handle, struct inode *orig_inode,
        /* Loop for the donor extents */
        while (1) {
                /* The extent for donor must be found. */
-               if (!dext) {
+               if (unlikely(!dext)) {
+               missing_donor_extent:
                        EXT4_ERROR_INODE(donor_inode,
                                   "The extent for donor must be found");
                        *err = -EIO;