1 // SPDX-License-Identifier: GPL-2.0
8 void __btrfs_set_fs_incompat(struct btrfs_fs_info *fs_info, u64 flag,
11 struct btrfs_super_block *disk_super;
14 disk_super = fs_info->super_copy;
15 features = btrfs_super_incompat_flags(disk_super);
16 if (!(features & flag)) {
17 spin_lock(&fs_info->super_lock);
18 features = btrfs_super_incompat_flags(disk_super);
19 if (!(features & flag)) {
21 btrfs_set_super_incompat_flags(disk_super, features);
23 "setting incompat feature flag for %s (0x%llx)",
26 spin_unlock(&fs_info->super_lock);
30 void __btrfs_clear_fs_incompat(struct btrfs_fs_info *fs_info, u64 flag,
33 struct btrfs_super_block *disk_super;
36 disk_super = fs_info->super_copy;
37 features = btrfs_super_incompat_flags(disk_super);
38 if (features & flag) {
39 spin_lock(&fs_info->super_lock);
40 features = btrfs_super_incompat_flags(disk_super);
41 if (features & flag) {
43 btrfs_set_super_incompat_flags(disk_super, features);
45 "clearing incompat feature flag for %s (0x%llx)",
48 spin_unlock(&fs_info->super_lock);
52 void __btrfs_set_fs_compat_ro(struct btrfs_fs_info *fs_info, u64 flag,
55 struct btrfs_super_block *disk_super;
58 disk_super = fs_info->super_copy;
59 features = btrfs_super_compat_ro_flags(disk_super);
60 if (!(features & flag)) {
61 spin_lock(&fs_info->super_lock);
62 features = btrfs_super_compat_ro_flags(disk_super);
63 if (!(features & flag)) {
65 btrfs_set_super_compat_ro_flags(disk_super, features);
67 "setting compat-ro feature flag for %s (0x%llx)",
70 spin_unlock(&fs_info->super_lock);
74 void __btrfs_clear_fs_compat_ro(struct btrfs_fs_info *fs_info, u64 flag,
77 struct btrfs_super_block *disk_super;
80 disk_super = fs_info->super_copy;
81 features = btrfs_super_compat_ro_flags(disk_super);
82 if (features & flag) {
83 spin_lock(&fs_info->super_lock);
84 features = btrfs_super_compat_ro_flags(disk_super);
85 if (features & flag) {
87 btrfs_set_super_compat_ro_flags(disk_super, features);
89 "clearing compat-ro feature flag for %s (0x%llx)",
92 spin_unlock(&fs_info->super_lock);