Btrfs: fix mount -o clear_cache,space_cache=v2
We moved the code for creating the free space tree the first time that
it's enabled, but didn't move the clearing code along with it. This
breaks my (undocumented) intention that `mount -o
clear_cache,space_cache=v2` would clear the free space tree and then
recreate it.
Fixes: 511711af91
("btrfs: don't run delayed references while we are creating the free space tree")
Cc: stable@vger.kernel.org # 4.5+
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
Tested-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
2fe1d55134
commit
f8d468a15c
|
@ -3129,6 +3129,18 @@ retry_root_backup:
|
||||||
if (sb->s_flags & MS_RDONLY)
|
if (sb->s_flags & MS_RDONLY)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (btrfs_test_opt(fs_info, CLEAR_CACHE) &&
|
||||||
|
btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) {
|
||||||
|
btrfs_info(fs_info, "clearing free space tree");
|
||||||
|
ret = btrfs_clear_free_space_tree(fs_info);
|
||||||
|
if (ret) {
|
||||||
|
btrfs_warn(fs_info,
|
||||||
|
"failed to clear free space tree: %d", ret);
|
||||||
|
close_ctree(tree_root);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (btrfs_test_opt(tree_root->fs_info, FREE_SPACE_TREE) &&
|
if (btrfs_test_opt(tree_root->fs_info, FREE_SPACE_TREE) &&
|
||||||
!btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) {
|
!btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) {
|
||||||
btrfs_info(fs_info, "creating free space tree");
|
btrfs_info(fs_info, "creating free space tree");
|
||||||
|
@ -3166,18 +3178,6 @@ retry_root_backup:
|
||||||
|
|
||||||
btrfs_qgroup_rescan_resume(fs_info);
|
btrfs_qgroup_rescan_resume(fs_info);
|
||||||
|
|
||||||
if (btrfs_test_opt(tree_root->fs_info, CLEAR_CACHE) &&
|
|
||||||
btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) {
|
|
||||||
btrfs_info(fs_info, "clearing free space tree");
|
|
||||||
ret = btrfs_clear_free_space_tree(fs_info);
|
|
||||||
if (ret) {
|
|
||||||
btrfs_warn(fs_info,
|
|
||||||
"failed to clear free space tree: %d", ret);
|
|
||||||
close_ctree(tree_root);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!fs_info->uuid_root) {
|
if (!fs_info->uuid_root) {
|
||||||
btrfs_info(fs_info, "creating UUID tree");
|
btrfs_info(fs_info, "creating UUID tree");
|
||||||
ret = btrfs_create_uuid_tree(fs_info);
|
ret = btrfs_create_uuid_tree(fs_info);
|
||||||
|
|
Loading…
Reference in New Issue