From: David Sterba <dste...@suse.com>

Export supported checksum algorithms via sysfs.

Signed-off-by: David Sterba <dste...@suse.com>
Signed-off-by: Johannes Thumshirn <jthumsh...@suse.de>

---
Changes to v1:
- Removed btrfs_checksums_store() function (Nik)
- Renamed sysfs file to supported_checksums
---
 fs/btrfs/sysfs.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index f6d3c80f2e28..1cd351d2be03 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -246,6 +246,24 @@ static umode_t btrfs_feature_visible(struct kobject *kobj,
        return mode;
 }
 
+static ssize_t btrfs_supported_checksums_show(struct kobject *kobj,
+                                             struct kobj_attribute *a,
+                                             char *buf)
+{
+       ssize_t ret = 0;
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(btrfs_csums); i++) {
+               ret += snprintf(buf + ret, PAGE_SIZE, "%s%s",
+                               (i == 0 ? "" : ", "),
+                               btrfs_csums[i].name);
+
+       }
+
+       ret += snprintf(buf + ret, PAGE_SIZE, "\n");
+       return ret;
+}
+
 BTRFS_FEAT_ATTR_INCOMPAT(mixed_backref, MIXED_BACKREF);
 BTRFS_FEAT_ATTR_INCOMPAT(default_subvol, DEFAULT_SUBVOL);
 BTRFS_FEAT_ATTR_INCOMPAT(mixed_groups, MIXED_GROUPS);
@@ -259,6 +277,14 @@ BTRFS_FEAT_ATTR_INCOMPAT(no_holes, NO_HOLES);
 BTRFS_FEAT_ATTR_INCOMPAT(metadata_uuid, METADATA_UUID);
 BTRFS_FEAT_ATTR_COMPAT_RO(free_space_tree, FREE_SPACE_TREE);
 
+static struct btrfs_feature_attr btrfs_attr_features_checksums_name = {
+       .kobj_attr = __INIT_KOBJ_ATTR(supported_checksums, S_IRUGO,
+                                     btrfs_supported_checksums_show,
+                                     NULL),
+       .feature_set    = FEAT_INCOMPAT,
+       .feature_bit    = 0,
+};
+
 static struct attribute *btrfs_supported_feature_attrs[] = {
        BTRFS_FEAT_ATTR_PTR(mixed_backref),
        BTRFS_FEAT_ATTR_PTR(default_subvol),
@@ -272,6 +298,9 @@ static struct attribute *btrfs_supported_feature_attrs[] = {
        BTRFS_FEAT_ATTR_PTR(no_holes),
        BTRFS_FEAT_ATTR_PTR(metadata_uuid),
        BTRFS_FEAT_ATTR_PTR(free_space_tree),
+
+       &btrfs_attr_features_checksums_name.kobj_attr.attr,
+
        NULL
 };
 
-- 
2.16.4

Reply via email to