btrfs: handle btrfs_update_reloc_root failure in insert_dirty_subvol
authorJosef Bacik <josef@toxicpanda.com>
Fri, 12 Mar 2021 20:25:18 +0000 (15:25 -0500)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Apr 2021 15:25:21 +0000 (17:25 +0200)
btrfs_update_reloc_root will will return errors in the future, so handle
the error properly in insert_dirty_subvol.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/relocation.c

index eb29d9f..69f170b 100644 (file)
@@ -1571,6 +1571,7 @@ static int insert_dirty_subvol(struct btrfs_trans_handle *trans,
 {
        struct btrfs_root *reloc_root = root->reloc_root;
        struct btrfs_root_item *reloc_root_item;
+       int ret;
 
        /* @root must be a subvolume tree root with a valid reloc tree */
        ASSERT(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID);
@@ -1581,7 +1582,9 @@ static int insert_dirty_subvol(struct btrfs_trans_handle *trans,
                sizeof(reloc_root_item->drop_progress));
        btrfs_set_root_drop_level(reloc_root_item, 0);
        btrfs_set_root_refs(reloc_root_item, 0);
-       btrfs_update_reloc_root(trans, root);
+       ret = btrfs_update_reloc_root(trans, root);
+       if (ret)
+               return ret;
 
        if (list_empty(&root->reloc_dirty_list)) {
                btrfs_grab_root(root);