diff mbox

[6/6,v2] Btrfs: add send_stream_version attribute to sysfs

Message ID 1398030003-12697-1-git-send-email-fdmanana@gmail.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Filipe Manana April 20, 2014, 9:40 p.m. UTC
So that applications can find out what's the highest send stream
version supported/implemented by the running kernel:

    $ cat /sys/fs/btrfs/send/stream_version
    2

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
---

V2: Renamed /sys/fs/btrfs/send_stream_version to /sys/fs/btrfs/send/stream_version,
    as in the future it might be useful to add other sysfs attrbutes related to
    send (other ro information or tunables like internal buffer sizes, etc).

 fs/btrfs/send.h  |  1 +
 fs/btrfs/sysfs.c | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)

Comments

David Sterba May 2, 2014, 3:46 p.m. UTC | #1
On Sun, Apr 20, 2014 at 10:40:03PM +0100, Filipe David Borba Manana wrote:
> So that applications can find out what's the highest send stream
> version supported/implemented by the running kernel:
> 
>     $ cat /sys/fs/btrfs/send/stream_version
>     2
> 
> Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
> ---
> 
> V2: Renamed /sys/fs/btrfs/send_stream_version to /sys/fs/btrfs/send/stream_version,
>     as in the future it might be useful to add other sysfs attrbutes related to
>     send (other ro information or tunables like internal buffer sizes, etc).

Sounds good, I don't see any issue with the separate directory. Mixing
it with /sys/fs/btrfs/features does not seem suitable for that if you
intend adding more entries.

Reviewed-by: David Sterba <dsterba@suse.cz>
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Filipe Manana May 2, 2014, 4:10 p.m. UTC | #2
On Fri, May 2, 2014 at 4:46 PM, David Sterba <dsterba@suse.cz> wrote:
> On Sun, Apr 20, 2014 at 10:40:03PM +0100, Filipe David Borba Manana wrote:
>> So that applications can find out what's the highest send stream
>> version supported/implemented by the running kernel:
>>
>>     $ cat /sys/fs/btrfs/send/stream_version
>>     2
>>
>> Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
>> ---
>>
>> V2: Renamed /sys/fs/btrfs/send_stream_version to /sys/fs/btrfs/send/stream_version,
>>     as in the future it might be useful to add other sysfs attrbutes related to
>>     send (other ro information or tunables like internal buffer sizes, etc).
>
> Sounds good, I don't see any issue with the separate directory. Mixing
> it with /sys/fs/btrfs/features does not seem suitable for that if you
> intend adding more entries.

Yeah, I only didn't mix it with the features subdir because that
relates to features that are settable, plus there's 2 versions of it,
one global and one per fs (uuid) subdirectory (and it felt odd to me
to add it to one of those subdirs and not the other).

Thanks David

>
> Reviewed-by: David Sterba <dsterba@suse.cz>
diff mbox

Patch

diff --git a/fs/btrfs/send.h b/fs/btrfs/send.h
index 987936c..047fd6d 100644
--- a/fs/btrfs/send.h
+++ b/fs/btrfs/send.h
@@ -22,6 +22,7 @@ 
 #define BTRFS_SEND_STREAM_MAGIC "btrfs-stream"
 #define BTRFS_SEND_STREAM_VERSION_1 1
 #define BTRFS_SEND_STREAM_VERSION_2 2
+#define BTRFS_SEND_STREAM_VERSION_LATEST BTRFS_SEND_STREAM_VERSION_2
 
 #define BTRFS_SEND_BUF_SIZE (1024 * 64)
 #define BTRFS_SEND_READ_SIZE (1024 * 48)
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index 58a1dd1..d93c0b5 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -31,6 +31,7 @@ 
 #include "transaction.h"
 #include "sysfs.h"
 #include "volumes.h"
+#include "send.h"
 
 static inline struct btrfs_fs_info *to_fs_info(struct kobject *kobj);
 
@@ -662,6 +663,26 @@  static int btrfs_init_debugfs(void)
 	return 0;
 }
 
+static ssize_t send_stream_version_show(struct kobject *kobj,
+					struct kobj_attribute *a,
+					char *buf)
+{
+	return snprintf(buf, PAGE_SIZE, "%d\n",
+			BTRFS_SEND_STREAM_VERSION_LATEST);
+}
+
+BTRFS_ATTR(stream_version, 0444, send_stream_version_show);
+
+static struct attribute *btrfs_send_attrs[] = {
+	BTRFS_ATTR_PTR(stream_version),
+	NULL
+};
+
+static const struct attribute_group btrfs_send_attr_group = {
+	.name = "send",
+	.attrs = btrfs_send_attrs,
+};
+
 int btrfs_init_sysfs(void)
 {
 	int ret;
@@ -678,8 +699,13 @@  int btrfs_init_sysfs(void)
 	ret = sysfs_create_group(&btrfs_kset->kobj, &btrfs_feature_attr_group);
 	if (ret)
 		goto out2;
+	ret = sysfs_create_group(&btrfs_kset->kobj, &btrfs_send_attr_group);
+	if (ret)
+		goto out3;
 
 	return 0;
+out3:
+	sysfs_remove_group(&btrfs_kset->kobj, &btrfs_feature_attr_group);
 out2:
 	debugfs_remove_recursive(btrfs_debugfs_root_dentry);
 out1:
@@ -691,6 +717,7 @@  out1:
 void btrfs_exit_sysfs(void)
 {
 	sysfs_remove_group(&btrfs_kset->kobj, &btrfs_feature_attr_group);
+	sysfs_remove_group(&btrfs_kset->kobj, &btrfs_send_attr_group);
 	kset_unregister(btrfs_kset);
 	debugfs_remove_recursive(btrfs_debugfs_root_dentry);
 }