]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: clear dirty status from extent buffer on error at insert_new_root()
authorFilipe Manana <fdmanana@suse.com>
Mon, 30 Jun 2025 09:50:46 +0000 (10:50 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Jul 2025 22:02:09 +0000 (00:02 +0200)
If we failed to insert the tree mod log operation, we are not removing the
dirty status from the allocated and dirtied extent buffer before we free
it. Removing the dirty status is needed for several reasons such as to
adjust the fs_info->dirty_metadata_bytes counter and remove the dirty
status from the respective folios. So add the missing call to
btrfs_clear_buffer_dirty().

Fixes: f61aa7ba08ab ("btrfs: do not BUG_ON() on tree mod log failure at insert_new_root()")
CC: stable@vger.kernel.org # 6.6+
Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.c

index 2997f24207195c9b9afc28f979f03d24f650b14e..dc21e840664baeed680f0e797d002ec8e5710955 100644 (file)
@@ -2881,6 +2881,7 @@ static noinline int insert_new_root(struct btrfs_trans_handle *trans,
        if (ret < 0) {
                int ret2;
 
+               btrfs_clear_buffer_dirty(trans, c);
                ret2 = btrfs_free_tree_block(trans, btrfs_root_id(root), c, 0, 1);
                if (ret2 < 0)
                        btrfs_abort_transaction(trans, ret2);