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>
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);