]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
mkfs: fix blkid probe API violations causing weird output
authorDarrick J. Wong <djwong@kernel.org>
Thu, 24 Apr 2025 21:53:55 +0000 (14:53 -0700)
committerAndrey Albershteyn <aalbersh@kernel.org>
Mon, 28 Apr 2025 10:56:58 +0000 (12:56 +0200)
The blkid_do_fullprobe function in libblkid 2.38.1 will try to read the
last 512 bytes off the end of a block device.  If the block device has a
2k LBA size, that read will fail.  blkid_do_fullprobe passes the -EIO
back to the caller (mkfs) even though the API documentation says it
only returns 1, 0, or -1.

Change the "cannot detect existing fs" logic to look for any negative
number.  Otherwise, you get unhelpful output like this:

$ mkfs.xfs -l size=32m -b size=4096 /dev/loop3
mkfs.xfs: Use the -f option to force overwrite.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
libxfs/topology.c

index 8c6affb4c4e43611e66132cf5c6879515530e453..96ee74b61b30f5fc2ef4a9841cd338a1e95630d1 100644 (file)
@@ -205,7 +205,8 @@ check_overwrite(
 out:
        if (pr)
                blkid_free_probe(pr);
-       if (ret == -1)
+       /* libblkid 2.38.1 lies and can return -EIO */
+       if (ret < 0)
                fprintf(stderr,
                        _("%s: probe of %s failed, cannot detect "
                          "existing filesystem.\n"), progname, device);