From: Darrick J. Wong <djwong@xxxxxxxxxx> 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@xxxxxxxxxx> --- libxfs/topology.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libxfs/topology.c b/libxfs/topology.c index 8c6affb4c4e436..96ee74b61b30f5 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);