|
@@ -3325,6 +3325,32 @@ out:
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int btrfs_setup_space_cache(struct btrfs_trans_handle *trans,
|
|
|
|
+ struct btrfs_root *root)
|
|
|
|
+{
|
|
|
|
+ struct btrfs_block_group_cache *cache, *tmp;
|
|
|
|
+ struct btrfs_transaction *cur_trans = trans->transaction;
|
|
|
|
+ struct btrfs_path *path;
|
|
|
|
+
|
|
|
|
+ if (list_empty(&cur_trans->dirty_bgs) ||
|
|
|
|
+ !btrfs_test_opt(root, SPACE_CACHE))
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ path = btrfs_alloc_path();
|
|
|
|
+ if (!path)
|
|
|
|
+ return -ENOMEM;
|
|
|
|
+
|
|
|
|
+ /* Could add new block groups, use _safe just in case */
|
|
|
|
+ list_for_each_entry_safe(cache, tmp, &cur_trans->dirty_bgs,
|
|
|
|
+ dirty_list) {
|
|
|
|
+ if (cache->disk_cache_state == BTRFS_DC_CLEAR)
|
|
|
|
+ cache_save_setup(cache, trans, path);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ btrfs_free_path(path);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
|
|
int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
|
|
struct btrfs_root *root)
|
|
struct btrfs_root *root)
|
|
{
|
|
{
|