diff options
| author | Jeff Mahoney <jeffm@suse.com> | 2013-11-01 13:06:57 -0400 |
|---|---|---|
| committer | Chris Mason <clm@fb.com> | 2014-01-28 16:19:25 -0500 |
| commit | 079b72bca30dbc74c86c7c7825b8c34eb86ce3ee (patch) | |
| tree | ede5269ab3f4dbde076d9d7e5a3042c1966b1743 /fs/btrfs/sysfs.c | |
| parent | 29dfe2dc0e8f85c5656d13bb4c78a5ffca54c452 (diff) | |
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>
Diffstat (limited to 'fs/btrfs/sysfs.c')
| -rw-r--r-- | fs/btrfs/sysfs.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c index 5b326cd60a4a..9e217b581903 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c | |||
| @@ -26,20 +26,64 @@ | |||
| 26 | #include "ctree.h" | 26 | #include "ctree.h" |
| 27 | #include "disk-io.h" | 27 | #include "disk-io.h" |
| 28 | #include "transaction.h" | 28 | #include "transaction.h" |
| 29 | #include "sysfs.h" | ||
| 30 | |||
| 31 | static ssize_t btrfs_feature_attr_show(struct kobject *kobj, | ||
| 32 | struct kobj_attribute *a, char *buf) | ||
| 33 | { | ||
| 34 | return snprintf(buf, PAGE_SIZE, "0\n"); | ||
| 35 | } | ||
| 36 | |||
| 37 | BTRFS_FEAT_ATTR_INCOMPAT(mixed_backref, MIXED_BACKREF); | ||
| 38 | BTRFS_FEAT_ATTR_INCOMPAT(default_subvol, DEFAULT_SUBVOL); | ||
| 39 | BTRFS_FEAT_ATTR_INCOMPAT(mixed_groups, MIXED_GROUPS); | ||
| 40 | BTRFS_FEAT_ATTR_INCOMPAT(compress_lzo, COMPRESS_LZO); | ||
| 41 | BTRFS_FEAT_ATTR_INCOMPAT(compress_lzov2, COMPRESS_LZOv2); | ||
| 42 | BTRFS_FEAT_ATTR_INCOMPAT(big_metadata, BIG_METADATA); | ||
| 43 | BTRFS_FEAT_ATTR_INCOMPAT(extended_iref, EXTENDED_IREF); | ||
| 44 | BTRFS_FEAT_ATTR_INCOMPAT(raid56, RAID56); | ||
| 45 | BTRFS_FEAT_ATTR_INCOMPAT(skinny_metadata, SKINNY_METADATA); | ||
| 46 | |||
| 47 | static struct attribute *btrfs_supported_feature_attrs[] = { | ||
| 48 | BTRFS_FEAT_ATTR_PTR(mixed_backref), | ||
| 49 | BTRFS_FEAT_ATTR_PTR(default_subvol), | ||
| 50 | BTRFS_FEAT_ATTR_PTR(mixed_groups), | ||
| 51 | BTRFS_FEAT_ATTR_PTR(compress_lzo), | ||
| 52 | BTRFS_FEAT_ATTR_PTR(compress_lzov2), | ||
| 53 | BTRFS_FEAT_ATTR_PTR(big_metadata), | ||
| 54 | BTRFS_FEAT_ATTR_PTR(extended_iref), | ||
| 55 | BTRFS_FEAT_ATTR_PTR(raid56), | ||
| 56 | BTRFS_FEAT_ATTR_PTR(skinny_metadata), | ||
| 57 | NULL | ||
| 58 | }; | ||
| 59 | |||
| 60 | static const struct attribute_group btrfs_feature_attr_group = { | ||
| 61 | .name = "features", | ||
| 62 | .attrs = btrfs_supported_feature_attrs, | ||
| 63 | }; | ||
| 29 | 64 | ||
| 30 | /* /sys/fs/btrfs/ entry */ | 65 | /* /sys/fs/btrfs/ entry */ |
| 31 | static struct kset *btrfs_kset; | 66 | static struct kset *btrfs_kset; |
| 32 | 67 | ||
| 33 | int btrfs_init_sysfs(void) | 68 | int btrfs_init_sysfs(void) |
| 34 | { | 69 | { |
| 70 | int ret; | ||
| 35 | btrfs_kset = kset_create_and_add("btrfs", NULL, fs_kobj); | 71 | btrfs_kset = kset_create_and_add("btrfs", NULL, fs_kobj); |
| 36 | if (!btrfs_kset) | 72 | if (!btrfs_kset) |
| 37 | return -ENOMEM; | 73 | return -ENOMEM; |
| 74 | |||
| 75 | ret = sysfs_create_group(&btrfs_kset->kobj, &btrfs_feature_attr_group); | ||
| 76 | if (ret) { | ||
| 77 | kset_unregister(btrfs_kset); | ||
| 78 | return ret; | ||
| 79 | } | ||
| 80 | |||
| 38 | return 0; | 81 | return 0; |
| 39 | } | 82 | } |
| 40 | 83 | ||
| 41 | void btrfs_exit_sysfs(void) | 84 | void btrfs_exit_sysfs(void) |
| 42 | { | 85 | { |
| 86 | sysfs_remove_group(&btrfs_kset->kobj, &btrfs_feature_attr_group); | ||
| 43 | kset_unregister(btrfs_kset); | 87 | kset_unregister(btrfs_kset); |
| 44 | } | 88 | } |
| 45 | 89 | ||
