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@xxxxxxxxxx> --- 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