diff options
-rw-r--r-- | fs/btrfs/extent-tree.c | 24 |
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]), |