]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ext4: add missing brelse() for bh2 in ext4_dx_add_entry()
authorKemeng Shi <shikemeng@huaweicloud.com>
Thu, 23 Jan 2025 16:20:48 +0000 (00:20 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 17 Mar 2025 02:41:17 +0000 (22:41 -0400)
Add missing brelse() for bh2 in ext4_dx_add_entry().

Fixes: ac27a0ec112a ("[PATCH] ext4: initial copy of files from ext3")
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
Link: https://patch.msgid.link/20250123162050.2114499-2-shikemeng@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/namei.c

index 7ae24530a4aed0615916216584c27f2a57f2b710..9e0aed0c7b93a45bd953804c65ddbc4b611e9652 100644 (file)
@@ -2583,8 +2583,10 @@ again:
                BUFFER_TRACE(frame->bh, "get_write_access");
                err = ext4_journal_get_write_access(handle, sb, frame->bh,
                                                    EXT4_JTR_NONE);
-               if (err)
+               if (err) {
+                       brelse(bh2);
                        goto journal_error;
+               }
                if (!add_level) {
                        unsigned icount1 = icount/2, icount2 = icount - icount1;
                        unsigned hash2 = dx_get_hash(entries + icount1);
@@ -2595,8 +2597,10 @@ again:
                        err = ext4_journal_get_write_access(handle, sb,
                                                            (frame - 1)->bh,
                                                            EXT4_JTR_NONE);
-                       if (err)
+                       if (err) {
+                               brelse(bh2);
                                goto journal_error;
+                       }
 
                        memcpy((char *) entries2, (char *) (entries + icount1),
                               icount2 * sizeof(struct dx_entry));
@@ -2615,8 +2619,10 @@ again:
                        dxtrace(dx_show_index("node",
                               ((struct dx_node *) bh2->b_data)->entries));
                        err = ext4_handle_dirty_dx_node(handle, dir, bh2);
-                       if (err)
+                       if (err) {
+                               brelse(bh2);
                                goto journal_error;
+                       }
                        brelse (bh2);
                        err = ext4_handle_dirty_dx_node(handle, dir,
                                                   (frame - 1)->bh);
@@ -2641,8 +2647,10 @@ again:
                                       "Creating %d level index...\n",
                                       dxroot->info.indirect_levels));
                        err = ext4_handle_dirty_dx_node(handle, dir, frame->bh);
-                       if (err)
+                       if (err) {
+                               brelse(bh2);
                                goto journal_error;
+                       }
                        err = ext4_handle_dirty_dx_node(handle, dir, bh2);
                        brelse(bh2);
                        restart = 1;