ext4: add missing brelse() in add_new_gdb_meta_bg()
authorLukas Czerner <lczerner@redhat.com>
Fri, 15 Mar 2019 04:15:32 +0000 (00:15 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Apr 2019 07:15:00 +0000 (09:15 +0200)
[ Upstream commit d64264d6218e6892edd832dc3a5a5857c2856c53 ]

Currently in add_new_gdb_meta_bg() there is a missing brelse of gdb_bh
in case ext4_journal_get_write_access() fails.
Additionally kvfree() is missing in the same error path. Fix it by
moving the ext4_journal_get_write_access() before the ext4 sb update as
Ted suggested and release n_group_desc and gdb_bh in case it fails.

Fixes: 61a9c11e5e7a ("ext4: add missing brelse() add_new_gdb_meta_bg()'s error path")
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/ext4/resize.c

index 6f0acfe3141841484534085e9a3f2daa68c5e59e..fb9fbf993e2204c5d2f185a0e2140522c4d917d5 100644 (file)
@@ -907,11 +907,18 @@ static int add_new_gdb_meta_bg(struct super_block *sb,
        memcpy(n_group_desc, o_group_desc,
               EXT4_SB(sb)->s_gdb_count * sizeof(struct buffer_head *));
        n_group_desc[gdb_num] = gdb_bh;
+
+       BUFFER_TRACE(gdb_bh, "get_write_access");
+       err = ext4_journal_get_write_access(handle, gdb_bh);
+       if (err) {
+               kvfree(n_group_desc);
+               brelse(gdb_bh);
+               return err;
+       }
+
        EXT4_SB(sb)->s_group_desc = n_group_desc;
        EXT4_SB(sb)->s_gdb_count++;
        kvfree(o_group_desc);
-       BUFFER_TRACE(gdb_bh, "get_write_access");
-       err = ext4_journal_get_write_access(handle, gdb_bh);
        return err;
 }