Thread (13 messages) 13 messages, 5 authors, 2021-08-19

Re: [PATCH] btrfs: sysfs: advertise zoned support among features

From: Nikolay Borisov <hidden>
Date: 2021-08-19 09:37:42


On 19.08.21 г. 12:31, Damien Le Moal wrote:
On 2021/08/19 18:21, Nikolay Borisov wrote:
quoted

On 28.07.21 г. 19:56, David Sterba wrote:
quoted
We've hidden the zoned support in sysfs under debug config for the first
releases but now the stability is reasonable, though not all features
have been implemented.

As this depends on a config option, the per-filesystem feature won't
exist as such filesystem can't be mounted. The static feature will print
1 when the support is built-in, 0 otherwise.

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

The merge target is not set, depends if everybody thinks it's the time
even though there are still known bugs. We're also waiting for
util-linux support (blkid, wipefs), so that needs to be synced too.

 fs/btrfs/sysfs.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index bfe5e27617b0..7ad8f802ab88 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -263,8 +263,7 @@ 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);
 BTRFS_FEAT_ATTR_INCOMPAT(raid1c34, RAID1C34);
-/* Remove once support for zoned allocation is feature complete */
-#ifdef CONFIG_BTRFS_DEBUG
+#ifdef CONFIG_BLK_DEV_ZONED
 BTRFS_FEAT_ATTR_INCOMPAT(zoned, ZONED);
 #endif
 #ifdef CONFIG_FS_VERITY
@@ -285,7 +284,7 @@ static struct attribute *btrfs_supported_feature_attrs[] = {
 	BTRFS_FEAT_ATTR_PTR(metadata_uuid),
 	BTRFS_FEAT_ATTR_PTR(free_space_tree),
 	BTRFS_FEAT_ATTR_PTR(raid1c34),
-#ifdef CONFIG_BTRFS_DEBUG
+#ifdef CONFIG_BLK_DEV_ZONED
 	BTRFS_FEAT_ATTR_PTR(zoned),
 #endif
 #ifdef CONFIG_FS_VERITY
@@ -384,12 +383,19 @@ static ssize_t supported_sectorsizes_show(struct kobject *kobj,
 BTRFS_ATTR(static_feature, supported_sectorsizes,
 	   supported_sectorsizes_show);
 
+static ssize_t zoned_show(struct kobject *kobj, struct kobj_attribute *a, char *buf)
+{
+	return scnprintf(buf, PAGE_SIZE, "%d\n", IS_ENABLED(CONFIG_BLK_DEV_ZONED));
+}
+BTRFS_ATTR(static_feature, zoned, zoned_show);
+
 static struct attribute *btrfs_supported_static_feature_attrs[] = {
 	BTRFS_ATTR_PTR(static_feature, rmdir_subvol),
 	BTRFS_ATTR_PTR(static_feature, supported_checksums),
 	BTRFS_ATTR_PTR(static_feature, send_stream_version),
 	BTRFS_ATTR_PTR(static_feature, supported_rescue_options),
 	BTRFS_ATTR_PTR(static_feature, supported_sectorsizes),
+	BTRFS_ATTR_PTR(static_feature, zoned),
 	NULL
 };
Why isn't the above hunk predicated on CONFIG_BLK_DEV_ZONED the same as
the ATTR_INCOMPAT zoneed bit, but as explained in my earlier email one
of these should go and whichever remains must be predicated on
CONFIG_BLK_DEV_ZONED.
zoned-btrfs can be used with regular devices too. In that case, zones are
emulated, all of them being conventional. So btrfs zoned feature should
definitely not be dependent on CONFIG_BLK_DEV_ZONED.

If CONFIG_BLK_DEV_ZONED is not defined, then zoned btrfs will be usable only on
regular devices. But since in that case zoned devices will not show up, it is
all consistent.
Then we should discuss what the semantics of the ZONED flag under
features should be? I.e do we need to explicitly distinguish between
"btrfs supports zoned AND the kernel is compiled with BLK_DEV_ZONED so
we say we support it" and "btrfs has support for zoned devices but you
have to figure on your own if BLK_DEV_ZONED is enabled" ? I.e by having
sys/fs/btrfs/zoned set to 1 what information do we want to convey to the
user?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help