From 863ecca27cfc937bc6fb2131e0d0e35947e38ce6 Mon Sep 17 00:00:00 2001 From: Andrey Albershteyn Date: Mon, 25 Apr 2022 17:08:37 +0200 Subject: libblkid: add interface for FSSIZE field Add interface to let filesystem probe calculate and set FSSIZE. Enable that field in the 'superblocks' sample. Upstream: http://github.com/util-linux/util-linux/commit/ad08ae0aa Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=2064810 Signed-off-by: Andrey Albershteyn --- libblkid/samples/superblocks.c | 2 +- libblkid/src/blkid.h.in | 1 + libblkid/src/superblocks/superblocks.c | 11 +++++++++++ libblkid/src/superblocks/superblocks.h | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/libblkid/samples/superblocks.c b/libblkid/samples/superblocks.c index 7d9555771..38903ecee 100644 --- a/libblkid/samples/superblocks.c +++ b/libblkid/samples/superblocks.c @@ -44,7 +44,7 @@ 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_MAGIC | BLKID_SUBLKS_FSSIZE); rc = blkid_do_safeprobe(pr); if (rc == -1) diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in index 3cd4116d9..ad4becf0a 100644 --- a/libblkid/src/blkid.h.in +++ b/libblkid/src/blkid.h.in @@ -281,6 +281,7 @@ extern int blkid_probe_enable_superblocks(blkid_probe pr, int enable) #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_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 f21365538..9adc2cfa3 100644 --- a/libblkid/src/superblocks/superblocks.c +++ b/libblkid/src/superblocks/superblocks.c @@ -7,6 +7,7 @@ * GNU Lesser General Public License. */ +#include #include #include #include @@ -584,6 +585,16 @@ static int blkid_probe_set_usage(blkid_probe pr, int usage) return blkid_probe_set_value(pr, "USAGE", (unsigned char *) u, strlen(u) + 1); } +int blkid_probe_set_fssize(blkid_probe pr, uint64_t size) +{ + struct blkid_chain *chn = blkid_probe_get_chain(pr); + + if (!(chn->flags & BLKID_SUBLKS_FSSIZE)) + return 0; + + return blkid_probe_sprintf_value(pr, "FSSIZE", "%" PRIu64, size); +} + 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 9c489c438..67803679f 100644 --- a/libblkid/src/superblocks/superblocks.h +++ b/libblkid/src/superblocks/superblocks.h @@ -111,6 +111,7 @@ extern int blkid_probe_set_utf8_id_label(blkid_probe pr, const char *name, const unsigned char *data, size_t len, int enc); int blkid_probe_set_block_size(blkid_probe pr, unsigned block_size); +int blkid_probe_set_fssize(blkid_probe pr, uint64_t size); extern int blkid_probe_is_bitlocker(blkid_probe pr); extern int blkid_probe_is_ntfs(blkid_probe pr); -- 2.36.1