Revert "btrfs: let btrfs_delete_unused_bgs() to clean relocated bgs"
[cascardo/linux.git] / fs / btrfs / volumes.c
index b4048c1..71a60cc 100644 (file)
@@ -2906,8 +2906,8 @@ out:
 static int btrfs_relocate_chunk(struct btrfs_root *root, u64 chunk_offset)
 {
        struct btrfs_root *extent_root;
+       struct btrfs_trans_handle *trans;
        int ret;
-       struct btrfs_block_group_cache *block_group;
 
        root = root->fs_info->chunk_root;
        extent_root = root->fs_info->extent_root;
@@ -2937,17 +2937,21 @@ static int btrfs_relocate_chunk(struct btrfs_root *root, u64 chunk_offset)
        if (ret)
                return ret;
 
+       trans = btrfs_start_trans_remove_block_group(root->fs_info,
+                                                    chunk_offset);
+       if (IS_ERR(trans)) {
+               ret = PTR_ERR(trans);
+               btrfs_handle_fs_error(root->fs_info, ret, NULL);
+               return ret;
+       }
+
        /*
-        * step two, flag the chunk as removed and let
-        * btrfs_delete_unused_bgs() remove it.
+        * step two, delete the device extents and the
+        * chunk tree entries
         */
-       block_group = btrfs_lookup_block_group(root->fs_info, chunk_offset);
-       spin_lock(&block_group->lock);
-       block_group->removed = 1;
-       spin_unlock(&block_group->lock);
-       btrfs_put_block_group(block_group);
-
-       return 0;
+       ret = btrfs_remove_chunk(trans, root, chunk_offset);
+       btrfs_end_transaction(trans, extent_root);
+       return ret;
 }
 
 static int btrfs_relocate_sys_chunks(struct btrfs_root *root)