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