btrfs: change insert_dirty_subvol to return errors
authorJosef Bacik <josef@toxicpanda.com>
Fri, 12 Mar 2021 20:25:17 +0000 (15:25 -0500)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Apr 2021 15:25:21 +0000 (17:25 +0200)
This will be able to return errors in the future, so change it to return
an error and handle the errors appropriately.

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 2d9c0cd..eb29d9f 100644 (file)
@@ -1565,9 +1565,9 @@ static int find_next_key(struct btrfs_path *path, int level,
 /*
  * Insert current subvolume into reloc_control::dirty_subvol_roots
  */
-static void insert_dirty_subvol(struct btrfs_trans_handle *trans,
-                               struct reloc_control *rc,
-                               struct btrfs_root *root)
+static int insert_dirty_subvol(struct btrfs_trans_handle *trans,
+                              struct reloc_control *rc,
+                              struct btrfs_root *root)
 {
        struct btrfs_root *reloc_root = root->reloc_root;
        struct btrfs_root_item *reloc_root_item;
@@ -1587,6 +1587,8 @@ static void insert_dirty_subvol(struct btrfs_trans_handle *trans,
                btrfs_grab_root(root);
                list_add_tail(&root->reloc_dirty_list, &rc->dirty_subvol_roots);
        }
+
+       return 0;
 }
 
 static int clean_dirty_subvols(struct reloc_control *rc)
@@ -1788,8 +1790,11 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc,
 out:
        btrfs_free_path(path);
 
-       if (ret == 0)
-               insert_dirty_subvol(trans, rc, root);
+       if (ret == 0) {
+               ret = insert_dirty_subvol(trans, rc, root);
+               if (ret)
+                       btrfs_abort_transaction(trans, ret);
+       }
 
        if (trans)
                btrfs_end_transaction_throttle(trans);