dcavalca / rpms / util-linux

Forked from rpms/util-linux 2 years ago
Clone
d8d8bc
From fb9ea75a8a69b06eb6a4039b841ce3ccabb76775 Mon Sep 17 00:00:00 2001
d8d8bc
From: Andrey Albershteyn <aalbersh@redhat.com>
d8d8bc
Date: Wed, 27 Apr 2022 13:24:56 +0200
d8d8bc
Subject: libblkid: add FSLASTBLOCK field interface showing area occupied by fs
d8d8bc
d8d8bc
Add interface to let filesystem set FSLASTBLOCK which is basically
d8d8bc
total number of fsblocks (area occupied by fs). Enable that field in
d8d8bc
the 'superblocks' sample.
d8d8bc
d8d8bc
Upstream: http://github.com/util-linux/util-linux/commit/b7cb26ec3
d8d8bc
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=2064810
d8d8bc
Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com>
d8d8bc
---
d8d8bc
 libblkid/samples/superblocks.c         |  3 ++-
d8d8bc
 libblkid/src/blkid.h.in                | 23 ++++++++++++-----------
d8d8bc
 libblkid/src/superblocks/superblocks.c | 13 +++++++++++++
d8d8bc
 libblkid/src/superblocks/superblocks.h |  1 +
d8d8bc
 4 files changed, 28 insertions(+), 12 deletions(-)
d8d8bc
d8d8bc
diff --git a/libblkid/samples/superblocks.c b/libblkid/samples/superblocks.c
d8d8bc
index 38903ecee..b7f94ec14 100644
d8d8bc
--- a/libblkid/samples/superblocks.c
d8d8bc
+++ b/libblkid/samples/superblocks.c
d8d8bc
@@ -44,7 +44,8 @@ int main(int argc, char *argv[])
d8d8bc
 			BLKID_SUBLKS_UUID | BLKID_SUBLKS_UUIDRAW |
d8d8bc
 			BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE |
d8d8bc
 			BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION |
d8d8bc
-			BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_FSSIZE);
d8d8bc
+			BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_FSSIZE |
d8d8bc
+			BLKID_SUBLKS_FSLASTBLOCK);
d8d8bc
 
d8d8bc
 	rc = blkid_do_safeprobe(pr);
d8d8bc
 	if (rc == -1)
d8d8bc
diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in
d8d8bc
index ad4becf0a..56e64f9ab 100644
d8d8bc
--- a/libblkid/src/blkid.h.in
d8d8bc
+++ b/libblkid/src/blkid.h.in
d8d8bc
@@ -271,17 +271,18 @@ extern int blkid_superblocks_get_name(size_t idx, const char **name, int *usage)
d8d8bc
 extern int blkid_probe_enable_superblocks(blkid_probe pr, int enable)
d8d8bc
 			__ul_attribute__((nonnull));
d8d8bc
 
d8d8bc
-#define BLKID_SUBLKS_LABEL	(1 << 1) /* read LABEL from superblock */
d8d8bc
-#define BLKID_SUBLKS_LABELRAW	(1 << 2) /* read and define LABEL_RAW result value*/
d8d8bc
-#define BLKID_SUBLKS_UUID	(1 << 3) /* read UUID from superblock */
d8d8bc
-#define BLKID_SUBLKS_UUIDRAW	(1 << 4) /* read and define UUID_RAW result value */
d8d8bc
-#define BLKID_SUBLKS_TYPE	(1 << 5) /* define TYPE result value */
d8d8bc
-#define BLKID_SUBLKS_SECTYPE	(1 << 6) /* define compatible fs type (second type) */
d8d8bc
-#define BLKID_SUBLKS_USAGE	(1 << 7) /* define USAGE result value */
d8d8bc
-#define BLKID_SUBLKS_VERSION	(1 << 8) /* read FS type from superblock */
d8d8bc
-#define BLKID_SUBLKS_MAGIC	(1 << 9) /* define SBMAGIC and SBMAGIC_OFFSET */
d8d8bc
-#define BLKID_SUBLKS_BADCSUM	(1 << 10) /* allow a bad checksum */
d8d8bc
-#define BLKID_SUBLKS_FSSIZE	(1 << 11) /* read and define FSSIZE from superblock */
d8d8bc
+#define BLKID_SUBLKS_LABEL		(1 << 1) /* read LABEL from superblock */
d8d8bc
+#define BLKID_SUBLKS_LABELRAW		(1 << 2) /* read and define LABEL_RAW result value*/
d8d8bc
+#define BLKID_SUBLKS_UUID		(1 << 3) /* read UUID from superblock */
d8d8bc
+#define BLKID_SUBLKS_UUIDRAW		(1 << 4) /* read and define UUID_RAW result value */
d8d8bc
+#define BLKID_SUBLKS_TYPE		(1 << 5) /* define TYPE result value */
d8d8bc
+#define BLKID_SUBLKS_SECTYPE		(1 << 6) /* define compatible fs type (second type) */
d8d8bc
+#define BLKID_SUBLKS_USAGE		(1 << 7) /* define USAGE result value */
d8d8bc
+#define BLKID_SUBLKS_VERSION		(1 << 8) /* read FS type from superblock */
d8d8bc
+#define BLKID_SUBLKS_MAGIC		(1 << 9) /* define SBMAGIC and SBMAGIC_OFFSET */
d8d8bc
+#define BLKID_SUBLKS_BADCSUM		(1 << 10) /* allow a bad checksum */
d8d8bc
+#define BLKID_SUBLKS_FSSIZE		(1 << 11) /* read and define FSSIZE from superblock */
d8d8bc
+#define BLKID_SUBLKS_FSLASTBLOCK	(1 << 12) /* read and define FSLASTBLOCK from superblock */
d8d8bc
 
d8d8bc
 #define BLKID_SUBLKS_DEFAULT	(BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | \
d8d8bc
 				 BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE)
d8d8bc
diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c
d8d8bc
index adf4ee025..5b899a830 100644
d8d8bc
--- a/libblkid/src/superblocks/superblocks.c
d8d8bc
+++ b/libblkid/src/superblocks/superblocks.c
d8d8bc
@@ -68,6 +68,8 @@
d8d8bc
  *
d8d8bc
  * @FSSIZE: size of filesystem (implemented for XFS only)
d8d8bc
  *
d8d8bc
+ * @FSLASTBLOCK: last fsblock/total number of fsblocks
d8d8bc
+ *
d8d8bc
  * @SYSTEM_ID: ISO9660 system identifier
d8d8bc
  *
d8d8bc
  * @PUBLISHER_ID: ISO9660 publisher identifier
d8d8bc
@@ -595,6 +597,17 @@ int blkid_probe_set_fssize(blkid_probe pr, uint64_t size)
d8d8bc
 	return blkid_probe_sprintf_value(pr, "FSSIZE", "%" PRIu64, size);
d8d8bc
 }
d8d8bc
 
d8d8bc
+int blkid_probe_set_fslastblock(blkid_probe pr, uint64_t lastblock)
d8d8bc
+{
d8d8bc
+	struct blkid_chain *chn = blkid_probe_get_chain(pr);
d8d8bc
+
d8d8bc
+	if (!(chn->flags & BLKID_SUBLKS_FSLASTBLOCK))
d8d8bc
+		return 0;
d8d8bc
+
d8d8bc
+	return blkid_probe_sprintf_value(pr, "FSLASTBLOCK", "%" PRIu64,
d8d8bc
+			lastblock);
d8d8bc
+}
d8d8bc
+
d8d8bc
 int blkid_probe_set_id_label(blkid_probe pr, const char *name,
d8d8bc
 			     const unsigned char *data, size_t len)
d8d8bc
 {
d8d8bc
diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h
d8d8bc
index 67803679f..251e2e386 100644
d8d8bc
--- a/libblkid/src/superblocks/superblocks.h
d8d8bc
+++ b/libblkid/src/superblocks/superblocks.h
d8d8bc
@@ -112,6 +112,7 @@ extern int blkid_probe_set_utf8_id_label(blkid_probe pr, const char *name,
d8d8bc
 
d8d8bc
 int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size);
d8d8bc
 int blkid_probe_set_fssize(blkid_probe pr, uint64_t size);
d8d8bc
+int blkid_probe_set_fslastblock(blkid_probe pr, uint64_t lastblock);
d8d8bc
 
d8d8bc
 extern int blkid_probe_is_bitlocker(blkid_probe pr);
d8d8bc
 extern int blkid_probe_is_ntfs(blkid_probe pr);
d8d8bc
-- 
d8d8bc
2.36.1
d8d8bc