btrfs: move transaction abort to the error site btrfs_rebuild_free_space_tree()
[linux-2.6-block.git] / fs / btrfs / free-space-tree.c
index bdc2341c43e4a9b56f5a0b6d5cc4734b6e028d57..90f2938bd743d308db6b325258fa08d9abe85ada 100644 (file)
@@ -1328,8 +1328,11 @@ int btrfs_rebuild_free_space_tree(struct btrfs_fs_info *fs_info)
        set_bit(BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED, &fs_info->flags);
 
        ret = clear_free_space_tree(trans, free_space_root);
-       if (ret)
-               goto abort;
+       if (ret) {
+               btrfs_abort_transaction(trans, ret);
+               btrfs_end_transaction(trans);
+               return ret;
+       }
 
        node = rb_first_cached(&fs_info->block_group_cache_tree);
        while (node) {
@@ -1338,8 +1341,11 @@ int btrfs_rebuild_free_space_tree(struct btrfs_fs_info *fs_info)
                block_group = rb_entry(node, struct btrfs_block_group,
                                       cache_node);
                ret = populate_free_space_tree(trans, block_group);
-               if (ret)
-                       goto abort;
+               if (ret) {
+                       btrfs_abort_transaction(trans, ret);
+                       btrfs_end_transaction(trans);
+                       return ret;
+               }
                node = rb_next(node);
        }
 
@@ -1350,10 +1356,6 @@ int btrfs_rebuild_free_space_tree(struct btrfs_fs_info *fs_info)
        ret = btrfs_commit_transaction(trans);
        clear_bit(BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED, &fs_info->flags);
        return ret;
-abort:
-       btrfs_abort_transaction(trans, ret);
-       btrfs_end_transaction(trans);
-       return ret;
 }
 
 static int __add_block_group_free_space(struct btrfs_trans_handle *trans,