[PATCH 1/4] libblkid: add FSLASTBLOCK field interface showing area occupied by fs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add interface to let filesystem set FSLASTBLOCK which is basically
total number of fsblocks (area occupied by fs). Enable that field in
the 'superblocks' sample.

Signed-off-by: Andrey Albershteyn <aalbersh@xxxxxxxxxx>
---
 libblkid/samples/superblocks.c         |  3 ++-
 libblkid/src/blkid.h.in                | 23 ++++++++++++-----------
 libblkid/src/superblocks/superblocks.c | 13 +++++++++++++
 libblkid/src/superblocks/superblocks.h |  1 +
 4 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/libblkid/samples/superblocks.c b/libblkid/samples/superblocks.c
index 38903ecee..b7f94ec14 100644
--- a/libblkid/samples/superblocks.c
+++ b/libblkid/samples/superblocks.c
@@ -44,7 +44,8 @@ int main(int argc, char *argv[])
 			BLKID_SUBLKS_UUID | BLKID_SUBLKS_UUIDRAW |
 			BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE |
 			BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION |
-			BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_FSSIZE);
+			BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_FSSIZE |
+			BLKID_SUBLKS_FSLASTBLOCK);
 
 	rc = blkid_do_safeprobe(pr);
 	if (rc == -1)
diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in
index ad4becf0a..56e64f9ab 100644
--- a/libblkid/src/blkid.h.in
+++ b/libblkid/src/blkid.h.in
@@ -271,17 +271,18 @@ extern int blkid_superblocks_get_name(size_t idx, const char **name, int *usage)
 extern int blkid_probe_enable_superblocks(blkid_probe pr, int enable)
 			__ul_attribute__((nonnull));
 
-#define BLKID_SUBLKS_LABEL	(1 << 1) /* read LABEL from superblock */
-#define BLKID_SUBLKS_LABELRAW	(1 << 2) /* read and define LABEL_RAW result value*/
-#define BLKID_SUBLKS_UUID	(1 << 3) /* read UUID from superblock */
-#define BLKID_SUBLKS_UUIDRAW	(1 << 4) /* read and define UUID_RAW result value */
-#define BLKID_SUBLKS_TYPE	(1 << 5) /* define TYPE result value */
-#define BLKID_SUBLKS_SECTYPE	(1 << 6) /* define compatible fs type (second type) */
-#define BLKID_SUBLKS_USAGE	(1 << 7) /* define USAGE result value */
-#define BLKID_SUBLKS_VERSION	(1 << 8) /* read FS type from superblock */
-#define BLKID_SUBLKS_MAGIC	(1 << 9) /* define SBMAGIC and SBMAGIC_OFFSET */
-#define BLKID_SUBLKS_BADCSUM	(1 << 10) /* allow a bad checksum */
-#define BLKID_SUBLKS_FSSIZE	(1 << 11) /* read and define FSSIZE from superblock */
+#define BLKID_SUBLKS_LABEL		(1 << 1) /* read LABEL from superblock */
+#define BLKID_SUBLKS_LABELRAW		(1 << 2) /* read and define LABEL_RAW result value*/
+#define BLKID_SUBLKS_UUID		(1 << 3) /* read UUID from superblock */
+#define BLKID_SUBLKS_UUIDRAW		(1 << 4) /* read and define UUID_RAW result value */
+#define BLKID_SUBLKS_TYPE		(1 << 5) /* define TYPE result value */
+#define BLKID_SUBLKS_SECTYPE		(1 << 6) /* define compatible fs type (second type) */
+#define BLKID_SUBLKS_USAGE		(1 << 7) /* define USAGE result value */
+#define BLKID_SUBLKS_VERSION		(1 << 8) /* read FS type from superblock */
+#define BLKID_SUBLKS_MAGIC		(1 << 9) /* define SBMAGIC and SBMAGIC_OFFSET */
+#define BLKID_SUBLKS_BADCSUM		(1 << 10) /* allow a bad checksum */
+#define BLKID_SUBLKS_FSSIZE		(1 << 11) /* read and define FSSIZE from superblock */
+#define BLKID_SUBLKS_FSLASTBLOCK	(1 << 12) /* read and define FSLASTBLOCK from superblock */
 
 #define BLKID_SUBLKS_DEFAULT	(BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | \
 				 BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE)
diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c
index adf4ee025..5b899a830 100644
--- a/libblkid/src/superblocks/superblocks.c
+++ b/libblkid/src/superblocks/superblocks.c
@@ -68,6 +68,8 @@
  *
  * @FSSIZE: size of filesystem (implemented for XFS only)
  *
+ * @FSLASTBLOCK: last fsblock/total number of fsblocks
+ *
  * @SYSTEM_ID: ISO9660 system identifier
  *
  * @PUBLISHER_ID: ISO9660 publisher identifier
@@ -595,6 +597,17 @@ int blkid_probe_set_fssize(blkid_probe pr, uint64_t size)
 	return blkid_probe_sprintf_value(pr, "FSSIZE", "%" PRIu64, size);
 }
 
+int blkid_probe_set_fslastblock(blkid_probe pr, uint64_t lastblock)
+{
+	struct blkid_chain *chn = blkid_probe_get_chain(pr);
+
+	if (!(chn->flags & BLKID_SUBLKS_FSLASTBLOCK))
+		return 0;
+
+	return blkid_probe_sprintf_value(pr, "FSLASTBLOCK", "%" PRIu64,
+			lastblock);
+}
+
 int blkid_probe_set_id_label(blkid_probe pr, const char *name,
 			     const unsigned char *data, size_t len)
 {
diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h
index 67803679f..251e2e386 100644
--- a/libblkid/src/superblocks/superblocks.h
+++ b/libblkid/src/superblocks/superblocks.h
@@ -112,6 +112,7 @@ extern int blkid_probe_set_utf8_id_label(blkid_probe pr, const char *name,
 
 int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size);
 int blkid_probe_set_fssize(blkid_probe pr, uint64_t size);
+int blkid_probe_set_fslastblock(blkid_probe pr, uint64_t lastblock);
 
 extern int blkid_probe_is_bitlocker(blkid_probe pr);
 extern int blkid_probe_is_ntfs(blkid_probe pr);
-- 
2.27.0




[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux