From 044e134fffff0706f1141a8fb1d19f95641abfdf Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Thu, 24 Apr 2025 14:53:55 -0700 Subject: [PATCH] mkfs: fix blkid probe API violations causing weird output 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 Reviewed-by: Christoph Hellwig --- libxfs/topology.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libxfs/topology.c b/libxfs/topology.c index 8c6affb4..96ee74b6 100644 --- a/libxfs/topology.c +++ b/libxfs/topology.c @@ -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); -- 2.47.2