diff mbox series

btrfs: Add sysfs support for metadata_uuid feature

Message ID 20181119153745.7248-1-nborisov@suse.com (mailing list archive)
State New, archived
Headers show
Series btrfs: Add sysfs support for metadata_uuid feature | expand

Commit Message

Nikolay Borisov Nov. 19, 2018, 3:37 p.m. UTC
Since the metadata_uuid is a new incompat feature it requires the
respective sysfs hooks. This patch adds the 'metdata_uuid' feature to
be shown if it supported by the kernel. Additionally it adds
/sys/fs/btrfs/UUID/metadata_uuid attribute which allows one to read
the current metadata_uuid.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---

I completely forgot sysfs also needs to be hooked so here it is. 

 fs/btrfs/sysfs.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

Comments

David Sterba Nov. 19, 2018, 3:48 p.m. UTC | #1
On Mon, Nov 19, 2018 at 05:37:45PM +0200, Nikolay Borisov wrote:
> Since the metadata_uuid is a new incompat feature it requires the
> respective sysfs hooks. This patch adds the 'metdata_uuid' feature to
> be shown if it supported by the kernel. Additionally it adds
> /sys/fs/btrfs/UUID/metadata_uuid attribute which allows one to read
> the current metadata_uuid.
> 
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>
> ---
> 
> I completely forgot sysfs also needs to be hooked so here it is. 

Thanks,

Reviewed-by: David Sterba <dsterba@suse.com>

I'll add it right after the commit that introduces the METADATA_UUID
bit.
diff mbox series

Patch

diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index 3717c864ba23..5a5930e3d32b 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -191,6 +191,7 @@  BTRFS_FEAT_ATTR_INCOMPAT(extended_iref, EXTENDED_IREF);
 BTRFS_FEAT_ATTR_INCOMPAT(raid56, RAID56);
 BTRFS_FEAT_ATTR_INCOMPAT(skinny_metadata, SKINNY_METADATA);
 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 attribute *btrfs_supported_feature_attrs[] = {
@@ -204,6 +205,7 @@  static struct attribute *btrfs_supported_feature_attrs[] = {
 	BTRFS_FEAT_ATTR_PTR(raid56),
 	BTRFS_FEAT_ATTR_PTR(skinny_metadata),
 	BTRFS_FEAT_ATTR_PTR(no_holes),
+	BTRFS_FEAT_ATTR_PTR(metadata_uuid),
 	BTRFS_FEAT_ATTR_PTR(free_space_tree),
 	NULL
 };
@@ -505,12 +507,24 @@  static ssize_t quota_override_store(struct kobject *kobj,
 
 BTRFS_ATTR_RW(, quota_override, quota_override_show, quota_override_store);
 
+static ssize_t btrfs_metadata_uuid_show(struct kobject *kobj,
+				struct kobj_attribute *a, char *buf)
+{
+	struct btrfs_fs_info *fs_info = to_fs_info(kobj);
+
+	return snprintf(buf, PAGE_SIZE, "%pU\n",
+			fs_info->fs_devices->metadata_uuid);
+}
+
+BTRFS_ATTR(, metadata_uuid, btrfs_metadata_uuid_show);
+
 static const struct attribute *btrfs_attrs[] = {
 	BTRFS_ATTR_PTR(, label),
 	BTRFS_ATTR_PTR(, nodesize),
 	BTRFS_ATTR_PTR(, sectorsize),
 	BTRFS_ATTR_PTR(, clone_alignment),
 	BTRFS_ATTR_PTR(, quota_override),
+	BTRFS_ATTR_PTR(, metadata_uuid),
 	NULL,
 };