aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorLukas Czerner <lczerner@redhat.com>2014-09-11 11:27:58 -0400
committerTheodore Ts'o <tytso@mit.edu>2014-09-11 11:27:58 -0400
commitc7f725435adcf2ade4b9152ee33339d28f4cc330 (patch)
tree5672bc82a86e6c21ebe47b2b62a32cadf65037e7 /fs
parent52c198c6820f68b6fbe1d83f76e34a82bf736024 (diff)
ext4: provide separate operations for sysfs feature files
Currently sysfs feature files uses ext4_attr_ops as the file operations to show/store data. However the feature files is not supposed to contain any data at all, the sole existence of the file means that the module support the feature. Moreover, none of the sysfs feature attributes actually register show/store functions so that would not be a problem. However if a sysfs feature attribute register a show or store function we might be in trouble because the kobject in this case is _not_ embedded in the ext4_sb_info structure as ext4_attr_show/store expect. So just to be safe, provide separate empty sysfs_ops to use in ext4_feat_ktype. This might safe us from potential problems in the future. As a bonus we can "store" something more descriptive than nothing in the files, so let it contain "enabled" to make it clear that the feature is really present in the module. Signed-off-by: Lukas Czerner <lczerner@redhat.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs')
-rw-r--r--fs/ext4/super.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index ff889e1f11d5..2766b8eba121 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -2754,9 +2754,25 @@ static void ext4_feat_release(struct kobject *kobj)
2754 complete(&ext4_feat->f_kobj_unregister); 2754 complete(&ext4_feat->f_kobj_unregister);
2755} 2755}
2756 2756
2757static ssize_t ext4_feat_show(struct kobject *kobj,
2758 struct attribute *attr, char *buf)
2759{
2760 return snprintf(buf, PAGE_SIZE, "supported\n");
2761}
2762
2763/*
2764 * We can not use ext4_attr_show/store because it relies on the kobject
2765 * being embedded in the ext4_sb_info structure which is definitely not
2766 * true in this case.
2767 */
2768static const struct sysfs_ops ext4_feat_ops = {
2769 .show = ext4_feat_show,
2770 .store = NULL,
2771};
2772
2757static struct kobj_type ext4_feat_ktype = { 2773static struct kobj_type ext4_feat_ktype = {
2758 .default_attrs = ext4_feat_attrs, 2774 .default_attrs = ext4_feat_attrs,
2759 .sysfs_ops = &ext4_attr_ops, 2775 .sysfs_ops = &ext4_feat_ops,
2760 .release = ext4_feat_release, 2776 .release = ext4_feat_release,
2761}; 2777};
2762 2778