Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.9.
 1// SPDX-License-Identifier: GPL-2.0
 2
 3#include "messages.h"
 4#include "ctree.h"
 5#include "fs.h"
 6#include "accessors.h"
 7
 8void __btrfs_set_fs_incompat(struct btrfs_fs_info *fs_info, u64 flag,
 9			     const char *name)
10{
11	struct btrfs_super_block *disk_super;
12	u64 features;
13
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)) {
20			features |= flag;
21			btrfs_set_super_incompat_flags(disk_super, features);
22			btrfs_info(fs_info,
23				"setting incompat feature flag for %s (0x%llx)",
24				name, flag);
25		}
26		spin_unlock(&fs_info->super_lock);
27	}
28}
29
30void __btrfs_clear_fs_incompat(struct btrfs_fs_info *fs_info, u64 flag,
31			       const char *name)
32{
33	struct btrfs_super_block *disk_super;
34	u64 features;
35
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) {
42			features &= ~flag;
43			btrfs_set_super_incompat_flags(disk_super, features);
44			btrfs_info(fs_info,
45				"clearing incompat feature flag for %s (0x%llx)",
46				name, flag);
47		}
48		spin_unlock(&fs_info->super_lock);
49	}
50}
51
52void __btrfs_set_fs_compat_ro(struct btrfs_fs_info *fs_info, u64 flag,
53			      const char *name)
54{
55	struct btrfs_super_block *disk_super;
56	u64 features;
57
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)) {
64			features |= flag;
65			btrfs_set_super_compat_ro_flags(disk_super, features);
66			btrfs_info(fs_info,
67				"setting compat-ro feature flag for %s (0x%llx)",
68				name, flag);
69		}
70		spin_unlock(&fs_info->super_lock);
71	}
72}
73
74void __btrfs_clear_fs_compat_ro(struct btrfs_fs_info *fs_info, u64 flag,
75				const char *name)
76{
77	struct btrfs_super_block *disk_super;
78	u64 features;
79
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) {
86			features &= ~flag;
87			btrfs_set_super_compat_ro_flags(disk_super, features);
88			btrfs_info(fs_info,
89				"clearing compat-ro feature flag for %s (0x%llx)",
90				name, flag);
91		}
92		spin_unlock(&fs_info->super_lock);
93	}
94}