]> sourceware.org Git - lvm2.git/commitdiff
dev-type: get swap device size from blkid using FSSIZE
authorPeter Rajnoha <prajnoha@redhat.com>
Thu, 19 Sep 2024 10:39:46 +0000 (12:39 +0200)
committerPeter Rajnoha <prajnoha@redhat.com>
Wed, 2 Oct 2024 11:31:54 +0000 (13:31 +0200)
blkid does not report FSLASTBLOCK for a swap device. However, blkid
does report FSSIZE for swap devices, so use this field (and including
the header size which is of FSBLOCKSIZE for the swap) instead to
set the "filesystem last block" which is used subsequently for
further calculations and conditions.

lib/device/dev-type.c

index eab640168834dba3cae2716b88c8ae01452bca08..e89ed82c8323ecd308749a761d44d74fbfcaab9a 100644 (file)
@@ -943,6 +943,7 @@ int fs_get_blkid(const char *pathname, struct fs_info *fsi)
        const char *str = "";
        size_t len = 0;
        uint64_t fslastblock = 0;
+       uint64_t fssize = 0;
        unsigned int fsblocksize = 0;
        int rc;
 
@@ -993,10 +994,25 @@ int fs_get_blkid(const char *pathname, struct fs_info *fsi)
        if (!blkid_probe_lookup_value(probe, "FSBLOCKSIZE", &str, &len) && len)
                fsblocksize = (unsigned int)atoi(str);
 
+       if (!blkid_probe_lookup_value(probe, "FSSIZE", &str, &len) && len)
+               fssize = strtoull(str, NULL, 0);
+
        blkid_free_probe(probe);
 
        if (fslastblock && fsblocksize)
                fsi->fs_last_byte = fslastblock * fsblocksize;
+       else if (fssize) {
+               fsi->fs_last_byte = fssize;
+
+               /*
+                * For swap, there's no FSLASTBLOCK reported by blkid. We do have FSSIZE reported though.
+                * The last block is then calculated as:
+                *    FSSIZE (== size of the usable swap area) + FSBLOCKSIZE (== size of the swap header)
+                */
+               if (!strcmp(fsi->fstype, "swap"))
+                       fsi->fs_last_byte += fsblocksize;
+
+       }
 
        log_debug("libblkid TYPE %s BLOCK_SIZE %d FSLASTBLOCK %llu FSBLOCKSIZE %u fs_last_byte %llu",
                  fsi->fstype, fsi->fs_block_size_bytes, (unsigned long long)fslastblock, fsblocksize,
This page took 0.036839 seconds and 5 git commands to generate.