diff options
author | Karel Zak | 2018-06-08 11:37:55 +0200 |
---|---|---|
committer | Karel Zak | 2018-06-08 11:42:48 +0200 |
commit | ddf287b4eccdf23e5364e20e9a461fa89ccddf48 (patch) | |
tree | c441b5b8cc5b00d3b99c3a3a64d067391340d3f4 | |
parent | losetup: keep -f and <devname> mutually exclusive (diff) | |
download | kernel-qcow2-util-linux-ddf287b4eccdf23e5364e20e9a461fa89ccddf48.tar.gz kernel-qcow2-util-linux-ddf287b4eccdf23e5364e20e9a461fa89ccddf48.tar.xz kernel-qcow2-util-linux-ddf287b4eccdf23e5364e20e9a461fa89ccddf48.zip |
blkzone: fix whole device detection
Matias Bjørling wrote:
The current detection code for chunk size assumes that the
underlying device is a device that uses the minor device id
as the partition id, and that the whole device has minor id 0.
This is not true for example null_blk and nvme device drivers.
Let's use sysfs_devno_to_wholedisk() to get whole-disk devno.
Addresses: https://github.com/karelzak/util-linux/pull/646
Reported-by: Matias Bjørling matias.bjorling@wdc.com
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r-- | sys-utils/blkzone.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sys-utils/blkzone.c b/sys-utils/blkzone.c index 6d837ff28..9c6dda011 100644 --- a/sys-utils/blkzone.c +++ b/sys-utils/blkzone.c @@ -116,8 +116,7 @@ static unsigned long blkdev_chunk_sectors(const char *dname) { struct sysfs_cxt cxt = UL_SYSFSCXT_EMPTY; dev_t devno = sysfs_devname_to_devno(dname, NULL); - int major_no = major(devno); - int block_no = minor(devno) & ~0x0f; + dev_t disk; uint64_t sz; int rc; @@ -126,8 +125,10 @@ static unsigned long blkdev_chunk_sectors(const char *dname) * This method masks off the partition specified by the minor device * component. */ - devno = makedev(major_no, block_no); - if (sysfs_init(&cxt, devno, NULL)) + if (sysfs_devno_to_wholedisk(devno, NULL, 0, &disk) != 0) + return 0; + + if (sysfs_init(&cxt, disk, NULL)) return 0; rc = sysfs_read_u64(&cxt, "queue/chunk_sectors", &sz); |