All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test
@ 2022-04-27 17:05 Andrey Albershteyn
  2022-04-27 17:05 ` [PATCH 1/4] libblkid: add FSLASTBLOCK field interface showing area occupied by fs Andrey Albershteyn
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Andrey Albershteyn @ 2022-04-27 17:05 UTC (permalink / raw)
  To: util-linux; +Cc: Andrey Albershteyn

As discussed in [1] it would be useful to have FSLASTBLOCK tag
(size of the area occupied by filesystem). These few patches:
- add interface to set FSLASTBLOCK
- implement FSLASTBLOCK for ext2/3/4/jbd, xfs and btrfs
- add BTRFS image for blkid test
- update expected output for blkid tests to check FSLASTBLOCK

The BTRFS image is default 'mkfs.btrfs btrfs.img' (115M in size;
looks to be minimum required size)

[1]: https://bugzilla.redhat.com/show_bug.cgi?id=2064810

Andrey Albershteyn (4):
  libblkid: add FSLASTBLOCK field interface showing area occupied by fs
  libblkid: add FSLASTBLOCK implementation for xfs, ext and btrfs
  blkid: add image for btrfs testing
  blkid: add tests for FSLASTBLOCK tag

 libblkid/samples/superblocks.c         |   3 ++-
 libblkid/src/blkid.h.in                |  23 ++++++++++++-----------
 libblkid/src/superblocks/btrfs.c       |   5 +++++
 libblkid/src/superblocks/ext.c         |   5 +++++
 libblkid/src/superblocks/superblocks.c |  13 +++++++++++++
 libblkid/src/superblocks/superblocks.h |   1 +
 libblkid/src/superblocks/xfs.c         |   1 +
 misc-utils/blkid.c                     |   2 +-
 tests/expected/blkid/low-probe-btrfs   |   8 ++++++++
 tests/expected/blkid/low-probe-ext2    |   1 +
 tests/expected/blkid/low-probe-ext3    |   1 +
 tests/expected/blkid/low-probe-jbd     |   1 +
 tests/expected/blkid/low-probe-xfs     |   1 +
 tests/expected/blkid/low-probe-xfs-v5  |   1 +
 tests/ts/blkid/images-fs/btrfs.img     | Bin 0 -> 120586240 bytes
 15 files changed, 53 insertions(+), 13 deletions(-)
 create mode 100644 tests/expected/blkid/low-probe-btrfs
 create mode 100644 tests/ts/blkid/images-fs/btrfs.img

-- 
2.27.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/4] libblkid: add FSLASTBLOCK field interface showing area occupied by fs
  2022-04-27 17:05 [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test Andrey Albershteyn
@ 2022-04-27 17:05 ` Andrey Albershteyn
  2022-04-27 17:05 ` [PATCH 2/4] libblkid: add FSLASTBLOCK implementation for xfs, ext and btrfs Andrey Albershteyn
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Andrey Albershteyn @ 2022-04-27 17:05 UTC (permalink / raw)
  To: util-linux; +Cc: Andrey Albershteyn

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@redhat.com>
---
 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


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/4] libblkid: add FSLASTBLOCK implementation for xfs, ext and btrfs
  2022-04-27 17:05 [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test Andrey Albershteyn
  2022-04-27 17:05 ` [PATCH 1/4] libblkid: add FSLASTBLOCK field interface showing area occupied by fs Andrey Albershteyn
@ 2022-04-27 17:05 ` Andrey Albershteyn
  2022-04-27 17:05 ` [PATCH 4/4] blkid: add tests for FSLASTBLOCK tag Andrey Albershteyn
  2022-04-27 17:30 ` [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test Andrey Albershteyn
  3 siblings, 0 replies; 5+ messages in thread
From: Andrey Albershteyn @ 2022-04-27 17:05 UTC (permalink / raw)
  To: util-linux; +Cc: Andrey Albershteyn

Implementation of FSLASTBLOCK for most common filesystems. Most of
the fs store total number of reserved blocks in superblock.

Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com>
---
 libblkid/src/superblocks/btrfs.c | 5 +++++
 libblkid/src/superblocks/ext.c   | 5 +++++
 libblkid/src/superblocks/xfs.c   | 1 +
 3 files changed, 11 insertions(+)

diff --git a/libblkid/src/superblocks/btrfs.c b/libblkid/src/superblocks/btrfs.c
index 78d767d26..0ead1f591 100644
--- a/libblkid/src/superblocks/btrfs.c
+++ b/libblkid/src/superblocks/btrfs.c
@@ -236,6 +236,11 @@ static int probe_btrfs(blkid_probe pr, const struct blkid_idmag *mag)
 	blkid_probe_set_uuid_as(pr, bfs->dev_item.uuid, "UUID_SUB");
 	blkid_probe_set_block_size(pr, le32_to_cpu(bfs->sectorsize));
 
+	uint32_t sectorsize_log = 31 -
+		__builtin_clz(le32_to_cpu(bfs->sectorsize));
+	blkid_probe_set_fslastblock(pr,
+			le64_to_cpu(bfs->total_bytes) >> sectorsize_log);
+
 	return 0;
 }
 
diff --git a/libblkid/src/superblocks/ext.c b/libblkid/src/superblocks/ext.c
index 3870522fa..105bdfcf3 100644
--- a/libblkid/src/superblocks/ext.c
+++ b/libblkid/src/superblocks/ext.c
@@ -190,6 +190,11 @@ static void ext_get_info(blkid_probe pr, int ver, struct ext2_super_block *es)
 
 	if (le32_to_cpu(es->s_log_block_size) < 32)
 		blkid_probe_set_block_size(pr, 1024U << le32_to_cpu(es->s_log_block_size));
+
+	uint64_t fslastblock = es->s_blocks_count |
+		((es->s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) ?
+		(uint64_t) es->s_blocks_count_hi << 32 : 0);
+	blkid_probe_set_fslastblock(pr, fslastblock);
 }
 
 
diff --git a/libblkid/src/superblocks/xfs.c b/libblkid/src/superblocks/xfs.c
index 444050f55..1f2e92cac 100644
--- a/libblkid/src/superblocks/xfs.c
+++ b/libblkid/src/superblocks/xfs.c
@@ -183,6 +183,7 @@ static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag)
 				sizeof(xs->sb_fname));
 	blkid_probe_set_uuid(pr, xs->sb_uuid);
 	blkid_probe_set_fssize(pr, xfs_fssize(xs));
+	blkid_probe_set_fslastblock(pr, be64_to_cpu(xs->sb_dblocks));
 	blkid_probe_set_block_size(pr, be16_to_cpu(xs->sb_sectsize));
 	return 0;
 }
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 4/4] blkid: add tests for FSLASTBLOCK tag
  2022-04-27 17:05 [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test Andrey Albershteyn
  2022-04-27 17:05 ` [PATCH 1/4] libblkid: add FSLASTBLOCK field interface showing area occupied by fs Andrey Albershteyn
  2022-04-27 17:05 ` [PATCH 2/4] libblkid: add FSLASTBLOCK implementation for xfs, ext and btrfs Andrey Albershteyn
@ 2022-04-27 17:05 ` Andrey Albershteyn
  2022-04-27 17:30 ` [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test Andrey Albershteyn
  3 siblings, 0 replies; 5+ messages in thread
From: Andrey Albershteyn @ 2022-04-27 17:05 UTC (permalink / raw)
  To: util-linux; +Cc: Andrey Albershteyn

Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com>
---
 misc-utils/blkid.c                    | 2 +-
 tests/expected/blkid/low-probe-btrfs  | 1 +
 tests/expected/blkid/low-probe-ext2   | 1 +
 tests/expected/blkid/low-probe-ext3   | 1 +
 tests/expected/blkid/low-probe-jbd    | 1 +
 tests/expected/blkid/low-probe-xfs    | 1 +
 tests/expected/blkid/low-probe-xfs-v5 | 1 +
 7 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/misc-utils/blkid.c b/misc-utils/blkid.c
index 2edcd2b41..5a3e43624 100644
--- a/misc-utils/blkid.c
+++ b/misc-utils/blkid.c
@@ -922,7 +922,7 @@ int main(int argc, char **argv)
 				BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID |
 				BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE |
 				BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION |
-				BLKID_SUBLKS_FSSIZE);
+				BLKID_SUBLKS_FSSIZE | BLKID_SUBLKS_FSLASTBLOCK);
 
 
 			if (fltr_usage &&
diff --git a/tests/expected/blkid/low-probe-btrfs b/tests/expected/blkid/low-probe-btrfs
index 509fac378..48649389a 100644
--- a/tests/expected/blkid/low-probe-btrfs
+++ b/tests/expected/blkid/low-probe-btrfs
@@ -1,4 +1,5 @@
 ID_FS_BLOCK_SIZE=4096
+ID_FS_FSLASTBLOCK=29440
 ID_FS_TYPE=btrfs
 ID_FS_USAGE=filesystem
 ID_FS_UUID=d4a78b72-55e4-4811-86a6-09af936d43f9
diff --git a/tests/expected/blkid/low-probe-ext2 b/tests/expected/blkid/low-probe-ext2
index 087da97a4..e236c6e8a 100644
--- a/tests/expected/blkid/low-probe-ext2
+++ b/tests/expected/blkid/low-probe-ext2
@@ -1,4 +1,5 @@
 ID_FS_BLOCK_SIZE=1024
+ID_FS_FSLASTBLOCK=100
 ID_FS_LABEL=test-ext2
 ID_FS_LABEL_ENC=test-ext2
 ID_FS_TYPE=ext2
diff --git a/tests/expected/blkid/low-probe-ext3 b/tests/expected/blkid/low-probe-ext3
index 8684884c1..164fefb7b 100644
--- a/tests/expected/blkid/low-probe-ext3
+++ b/tests/expected/blkid/low-probe-ext3
@@ -1,4 +1,5 @@
 ID_FS_BLOCK_SIZE=1024
+ID_FS_FSLASTBLOCK=2048
 ID_FS_LABEL=test-ext3
 ID_FS_LABEL_ENC=test-ext3
 ID_FS_SEC_TYPE=ext2
diff --git a/tests/expected/blkid/low-probe-jbd b/tests/expected/blkid/low-probe-jbd
index c9f9f6b79..f5462a2a3 100644
--- a/tests/expected/blkid/low-probe-jbd
+++ b/tests/expected/blkid/low-probe-jbd
@@ -1,4 +1,5 @@
 ID_FS_BLOCK_SIZE=1024
+ID_FS_FSLASTBLOCK=1024
 ID_FS_LOGUUID=0d7a07df-7b06-4829-bce7-3b9c3ece570c
 ID_FS_TYPE=jbd
 ID_FS_USAGE=other
diff --git a/tests/expected/blkid/low-probe-xfs b/tests/expected/blkid/low-probe-xfs
index a91e92bcc..be9c4194a 100644
--- a/tests/expected/blkid/low-probe-xfs
+++ b/tests/expected/blkid/low-probe-xfs
@@ -1,4 +1,5 @@
 ID_FS_BLOCK_SIZE=512
+ID_FS_FSLASTBLOCK=4096
 ID_FS_FSSIZE=11862016
 ID_FS_LABEL=test-xfs
 ID_FS_LABEL_ENC=test-xfs
diff --git a/tests/expected/blkid/low-probe-xfs-v5 b/tests/expected/blkid/low-probe-xfs-v5
index 129b41f26..fd2cba933 100644
--- a/tests/expected/blkid/low-probe-xfs-v5
+++ b/tests/expected/blkid/low-probe-xfs-v5
@@ -1,4 +1,5 @@
 ID_FS_BLOCK_SIZE=512
+ID_FS_FSLASTBLOCK=5120
 ID_FS_FSSIZE=17469440
 ID_FS_LABEL=test-xfs-v5
 ID_FS_LABEL_ENC=test-xfs-v5
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test
  2022-04-27 17:05 [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test Andrey Albershteyn
                   ` (2 preceding siblings ...)
  2022-04-27 17:05 ` [PATCH 4/4] blkid: add tests for FSLASTBLOCK tag Andrey Albershteyn
@ 2022-04-27 17:30 ` Andrey Albershteyn
  3 siblings, 0 replies; 5+ messages in thread
From: Andrey Albershteyn @ 2022-04-27 17:30 UTC (permalink / raw)
  To: util-linux

Oh well the 3rd patch haven't passed message length check (as it
contains binary image for BTRFS - too long message). I will create
GitHub pull request for that.

-- 
- Andrey


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-04-27 17:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-27 17:05 [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test Andrey Albershteyn
2022-04-27 17:05 ` [PATCH 1/4] libblkid: add FSLASTBLOCK field interface showing area occupied by fs Andrey Albershteyn
2022-04-27 17:05 ` [PATCH 2/4] libblkid: add FSLASTBLOCK implementation for xfs, ext and btrfs Andrey Albershteyn
2022-04-27 17:05 ` [PATCH 4/4] blkid: add tests for FSLASTBLOCK tag Andrey Albershteyn
2022-04-27 17:30 ` [PATCH 0/4] Add FSLASTBLOCK tag and blkid with btrfs test Andrey Albershteyn

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.