aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/extent-tree.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 67bd12a52369..3ca26d84cce5 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -2903,8 +2903,13 @@ again:
2903 } 2903 }
2904 2904
2905 spin_lock(&block_group->lock); 2905 spin_lock(&block_group->lock);
2906 if (block_group->cached != BTRFS_CACHE_FINISHED) { 2906 if (block_group->cached != BTRFS_CACHE_FINISHED ||
2907 /* We're not cached, don't bother trying to write stuff out */ 2907 !btrfs_test_opt(root, SPACE_CACHE)) {
2908 /*
2909 * don't bother trying to write stuff out _if_
2910 * a) we're not cached,
2911 * b) we're with nospace_cache mount option.
2912 */
2908 dcs = BTRFS_DC_WRITTEN; 2913 dcs = BTRFS_DC_WRITTEN;
2909 spin_unlock(&block_group->lock); 2914 spin_unlock(&block_group->lock);
2910 goto out_put; 2915 goto out_put;
@@ -7614,8 +7619,21 @@ int btrfs_read_block_groups(struct btrfs_root *root)
7614 INIT_LIST_HEAD(&cache->list); 7619 INIT_LIST_HEAD(&cache->list);
7615 INIT_LIST_HEAD(&cache->cluster_list); 7620 INIT_LIST_HEAD(&cache->cluster_list);
7616 7621
7617 if (need_clear) 7622 if (need_clear) {
7623 /*
7624 * When we mount with old space cache, we need to
7625 * set BTRFS_DC_CLEAR and set dirty flag.
7626 *
7627 * a) Setting 'BTRFS_DC_CLEAR' makes sure that we
7628 * truncate the old free space cache inode and
7629 * setup a new one.
7630 * b) Setting 'dirty flag' makes sure that we flush
7631 * the new space cache info onto disk.
7632 */
7618 cache->disk_cache_state = BTRFS_DC_CLEAR; 7633 cache->disk_cache_state = BTRFS_DC_CLEAR;
7634 if (btrfs_test_opt(root, SPACE_CACHE))
7635 cache->dirty = 1;
7636 }
7619 7637
7620 read_extent_buffer(leaf, &cache->item, 7638 read_extent_buffer(leaf, &cache->item,
7621 btrfs_item_ptr_offset(leaf, path->slots[0]), 7639 btrfs_item_ptr_offset(leaf, path->slots[0]),