Util-Linux Archive on lore.kernel.org
 help / color / Atom feed
From: Damien Le Moal <damien.lemoal@wdc.com>
To: util-linux@vger.kernel.org, Karel Zak <kzak@redhat.com>,
	Benno Schulenberg <bensberg@justemail.net>
Subject: [PATCH] libblkid: Add support for zonefs
Date: Fri, 20 Mar 2020 13:55:43 +0900
Message-ID: <20200320045543.2053382-1-damien.lemoal@wdc.com> (raw)

The zonefs filesystem was added to upstream linux kernel 5.6. This
patch add support for probing zonefs formatted zoned block devices so
that other file system formatting tool can detect its presence on a
device.

Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
---
 libblkid/src/Makemodule.am             |  1 +
 libblkid/src/superblocks/superblocks.c |  3 +-
 libblkid/src/superblocks/superblocks.h |  1 +
 libblkid/src/superblocks/zonefs.c      | 87 ++++++++++++++++++++++++++
 4 files changed, 91 insertions(+), 1 deletion(-)
 create mode 100644 libblkid/src/superblocks/zonefs.c

diff --git a/libblkid/src/Makemodule.am b/libblkid/src/Makemodule.am
index c5d9426b1..394c2ed43 100644
--- a/libblkid/src/Makemodule.am
+++ b/libblkid/src/Makemodule.am
@@ -101,6 +101,7 @@ libblkid_la_SOURCES = \
 	libblkid/src/superblocks/vxfs.c \
 	libblkid/src/superblocks/xfs.c \
 	libblkid/src/superblocks/zfs.c \
+	libblkid/src/superblocks/zonefs.c \
 	\
 	libblkid/src/topology/topology.c \
 	libblkid/src/topology/topology.h
diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c
index baf35e51b..67172d0a0 100644
--- a/libblkid/src/superblocks/superblocks.c
+++ b/libblkid/src/superblocks/superblocks.c
@@ -167,7 +167,8 @@ static const struct blkid_idinfo *idinfos[] =
 	&exfat_idinfo,
 	&f2fs_idinfo,
 	&mpool_idinfo,
-	&apfs_idinfo
+	&apfs_idinfo,
+	&zonefs_idinfo
 };
 
 /*
diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h
index 0cd0caccf..5ebe6bc43 100644
--- a/libblkid/src/superblocks/superblocks.h
+++ b/libblkid/src/superblocks/superblocks.h
@@ -84,6 +84,7 @@ extern const struct blkid_idinfo vdo_idinfo;
 extern const struct blkid_idinfo stratis_idinfo;
 extern const struct blkid_idinfo bitlocker_idinfo;
 extern const struct blkid_idinfo apfs_idinfo;
+extern const struct blkid_idinfo zonefs_idinfo;
 
 /*
  * superblock functions
diff --git a/libblkid/src/superblocks/zonefs.c b/libblkid/src/superblocks/zonefs.c
new file mode 100644
index 000000000..aa5d2e1bd
--- /dev/null
+++ b/libblkid/src/superblocks/zonefs.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2020 Western Digital Corporation or its affiliates.
+ *
+ * This file may be redistributed under the terms of the
+ * GNU Lesser General Public License
+ */
+#include <stddef.h>
+#include <string.h>
+#include <uuid/uuid.h>
+
+#include "superblocks.h"
+
+#define ZONEFS_MAGIC		"SFOZ" /* 0x5a4f4653 'Z' 'O' 'F' 'S' */
+#define ZONEFS_MAGIC_SIZE	4
+#define ZONEFS_MAGIC_OFST	0
+#define ZONEFS_UUID_SIZE	16
+#define ZONEFS_LABEL_SIZE	32
+#define ZONEFS_SB_OFST		0
+
+#define ZONEFS_BLOCK_SIZE	4096U
+
+struct zonefs_super {
+
+	/* Magic number */
+	__le32		s_magic;
+
+	/* Checksum */
+	__le32		s_crc;
+
+	/* Volume label */
+	char		s_label[ZONEFS_LABEL_SIZE];
+
+	/* 128-bit uuid */
+	__u8		s_uuid[ZONEFS_UUID_SIZE];
+
+	/* Features */
+	__le64		s_features;
+
+	/* UID/GID to use for files */
+	__le32		s_uid;
+	__le32		s_gid;
+
+	/* File permissions */
+	__le32		s_perm;
+
+	/* Padding to 4096 bytes */
+	/* __u8		s_reserved[4020]; */
+
+} __attribute__ ((packed));
+
+static int probe_zonefs(blkid_probe pr,
+		const struct blkid_idmag *mag  __attribute__((__unused__)))
+{
+	struct zonefs_super *sb;
+
+	sb = (struct zonefs_super *)
+		blkid_probe_get_buffer(pr, ZONEFS_SB_OFST,
+				       sizeof(struct zonefs_super));
+	if (!sb)
+		return errno ? -errno : 1;
+
+	if (sb->s_label[0])
+		blkid_probe_set_label(pr, (unsigned char *) sb->s_label,
+				      sizeof(sb->s_label));
+
+	blkid_probe_set_uuid(pr, sb->s_uuid);
+	blkid_probe_set_block_size(pr, ZONEFS_BLOCK_SIZE);
+
+	return 0;
+}
+
+const struct blkid_idinfo zonefs_idinfo =
+{
+	.name           = "zonefs",
+	.usage          = BLKID_USAGE_FILESYSTEM,
+	.probefunc      = probe_zonefs,
+	.magics         =
+        {
+		{
+			.magic = (char *)ZONEFS_MAGIC,
+			.len = ZONEFS_MAGIC_SIZE,
+			.kboff = ZONEFS_SB_OFST,
+			.sboff = ZONEFS_MAGIC_OFST,
+		},
+		{ NULL }
+	}
+};
-- 
2.25.1


             reply index

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-20  4:55 Damien Le Moal [this message]
2020-03-23 10:33 ` Karel Zak
2020-03-23 10:38   ` Damien Le Moal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200320045543.2053382-1-damien.lemoal@wdc.com \
    --to=damien.lemoal@wdc.com \
    --cc=bensberg@justemail.net \
    --cc=kzak@redhat.com \
    --cc=util-linux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Util-Linux Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/util-linux/0 util-linux/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 util-linux util-linux/ https://lore.kernel.org/util-linux \
		util-linux@vger.kernel.org
	public-inbox-index util-linux

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.util-linux


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git