aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/free-space-tree.c
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2016-01-21 12:54:41 -0500
committerDavid Sterba <dsterba@suse.com>2016-01-21 12:54:41 -0500
commit14e46e04958df740c6c6a94849f176159a333f13 (patch)
tree79a2d0a4255c3555175ca3803fb9c9a6b6c8ea1a /fs/btrfs/free-space-tree.c
parent444e75169872f668eb890f19ec1f32dfc632e704 (diff)
btrfs: synchronize incompat feature bits with sysfs files
The files under /sys/fs/UUID/features get out of sync with the actual incompat bits set for the filesystem if they change after mount (eg. the LZO compression). Synchronize the feature bits with the sysfs files representing them right after we set/clear them. Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/free-space-tree.c')
-rw-r--r--fs/btrfs/free-space-tree.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/btrfs/free-space-tree.c b/fs/btrfs/free-space-tree.c
index 393e36bd5845..94e887f5ec4e 100644
--- a/fs/btrfs/free-space-tree.c
+++ b/fs/btrfs/free-space-tree.c
@@ -23,6 +23,7 @@
23#include "locking.h" 23#include "locking.h"
24#include "free-space-tree.h" 24#include "free-space-tree.h"
25#include "transaction.h" 25#include "transaction.h"
26#include "sysfs.h"
26 27
27static int __add_block_group_free_space(struct btrfs_trans_handle *trans, 28static int __add_block_group_free_space(struct btrfs_trans_handle *trans,
28 struct btrfs_fs_info *fs_info, 29 struct btrfs_fs_info *fs_info,
@@ -1169,6 +1170,9 @@ int btrfs_create_free_space_tree(struct btrfs_fs_info *fs_info)
1169 } 1170 }
1170 1171
1171 btrfs_set_fs_compat_ro(fs_info, FREE_SPACE_TREE); 1172 btrfs_set_fs_compat_ro(fs_info, FREE_SPACE_TREE);
1173 btrfs_sysfs_feature_update(fs_info,
1174 BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE, FEAT_COMPAT_RO);
1175
1172 fs_info->creating_free_space_tree = 0; 1176 fs_info->creating_free_space_tree = 0;
1173 1177
1174 ret = btrfs_commit_transaction(trans, tree_root); 1178 ret = btrfs_commit_transaction(trans, tree_root);
@@ -1237,6 +1241,9 @@ int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info)
1237 return PTR_ERR(trans); 1241 return PTR_ERR(trans);
1238 1242
1239 btrfs_clear_fs_compat_ro(fs_info, FREE_SPACE_TREE); 1243 btrfs_clear_fs_compat_ro(fs_info, FREE_SPACE_TREE);
1244 btrfs_sysfs_feature_update(fs_info,
1245 BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE, FEAT_COMPAT_RO);
1246
1240 fs_info->free_space_root = NULL; 1247 fs_info->free_space_root = NULL;
1241 1248
1242 ret = clear_free_space_tree(trans, free_space_root); 1249 ret = clear_free_space_tree(trans, free_space_root);