-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
btrfs: publish supported featured in sysfs
This patch adds the ability to publish supported features to sysfs under /sys/fs/btrfs/features. The files are module-wide and export which features the kernel supports. The content, for now, is just "0\n". Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <clm@fb.com>
- Loading branch information
Jeff Mahoney
authored and
Chris Mason
committed
Jan 28, 2014
1 parent
29dfe2d
commit 079b72b
Showing
2 changed files
with
87 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#ifndef _BTRFS_SYSFS_H_ | ||
#define _BTRFS_SYSFS_H_ | ||
|
||
enum btrfs_feature_set { | ||
FEAT_COMPAT, | ||
FEAT_COMPAT_RO, | ||
FEAT_INCOMPAT, | ||
FEAT_MAX | ||
}; | ||
|
||
#define __INIT_KOBJ_ATTR(_name, _mode, _show, _store) \ | ||
{ \ | ||
.attr = { .name = __stringify(_name), .mode = _mode }, \ | ||
.show = _show, \ | ||
.store = _store, \ | ||
} | ||
|
||
struct btrfs_feature_attr { | ||
struct kobj_attribute kobj_attr; | ||
enum btrfs_feature_set feature_set; | ||
u64 feature_bit; | ||
}; | ||
|
||
#define BTRFS_FEAT_ATTR(_name, _feature_set, _prefix, _feature_bit) \ | ||
static struct btrfs_feature_attr btrfs_attr_##_name = { \ | ||
.kobj_attr = __INIT_KOBJ_ATTR(_name, S_IRUGO, \ | ||
btrfs_feature_attr_show, NULL), \ | ||
.feature_set = _feature_set, \ | ||
.feature_bit = _prefix ##_## _feature_bit, \ | ||
} | ||
#define BTRFS_FEAT_ATTR_PTR(_name) (&btrfs_attr_##_name.kobj_attr.attr) | ||
|
||
#define BTRFS_FEAT_ATTR_COMPAT(name, feature) \ | ||
BTRFS_FEAT_ATTR(name, FEAT_COMPAT, BTRFS_FEATURE_COMPAT, feature) | ||
#define BTRFS_FEAT_ATTR_COMPAT_RO(name, feature) \ | ||
BTRFS_FEAT_ATTR(name, FEAT_COMPAT_RO, BTRFS_FEATURE_COMPAT, feature) | ||
#define BTRFS_FEAT_ATTR_INCOMPAT(name, feature) \ | ||
BTRFS_FEAT_ATTR(name, FEAT_INCOMPAT, BTRFS_FEATURE_INCOMPAT, feature) | ||
|
||
/* convert from attribute */ | ||
#define to_btrfs_feature_attr(a) \ | ||
container_of(a, struct btrfs_feature_attr, kobj_attr) | ||
#endif /* _BTRFS_SYSFS_H_ */ |