From: Andrey Albershteyn Date: Mon, 25 Apr 2022 15:08:38 +0000 (+0200) Subject: libblkid: implement FSSIZE calculation for XFS X-Git-Tag: v2.39-rc1~690 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d7ec8fe8e45b8d3c843d54d2a8e8682e79d5eb5f;p=thirdparty%2Futil-linux.git libblkid: implement FSSIZE calculation for XFS The implementation is similar to one provided by statfs(2) + lsblk. Signed-off-by: Andrey Albershteyn --- diff --git a/libblkid/src/superblocks/xfs.c b/libblkid/src/superblocks/xfs.c index d8c6fb6d48..444050f55b 100644 --- a/libblkid/src/superblocks/xfs.c +++ b/libblkid/src/superblocks/xfs.c @@ -158,6 +158,15 @@ static int xfs_verify_sb(struct xfs_super_block *ondisk) return 1; } +static uint64_t xfs_fssize(struct xfs_super_block *xs) +{ + uint32_t lsize = xs->sb_logstart ? xs->sb_logblocks : 0; + uint64_t avail_blocks = be64_to_cpu(xs->sb_dblocks) - be32_to_cpu(lsize); + uint64_t fssize = avail_blocks*be32_to_cpu(xs->sb_blocksize); + + return fssize; +} + static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag) { struct xfs_super_block *xs; @@ -173,6 +182,7 @@ static int probe_xfs(blkid_probe pr, const struct blkid_idmag *mag) blkid_probe_set_label(pr, (unsigned char *) xs->sb_fname, sizeof(xs->sb_fname)); blkid_probe_set_uuid(pr, xs->sb_uuid); + blkid_probe_set_fssize(pr, xfs_fssize(xs)); blkid_probe_set_block_size(pr, be16_to_cpu(xs->sb_sectsize)); return 0; }