From 6802b86414b48c4f118da09c7bf7ee142a459fa0 Mon Sep 17 00:00:00 2001 From: Stefan Haberland Date: Thu, 30 Jul 2020 15:10:42 +0200 Subject: [PATCH] libutil: determine base device address in case of given partition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit util_sys_get_dev_addr() returns the device address for a given blockdevice. This does not work for partitions but some tools rely on the ability to get the device address for partitions. Add code that first determines the base device for a partition. Fixes: 6014d07cb106 ("dasdview/libdasd/zipl: Use util_sys_get_dev_addr() instead of u2s_getbusid()") Signed-off-by: Stefan Haberland Reviewed-by: Jan Hoeppner Reviewed-by: Philipp Rudo Signed-off-by: Jan Höppner --- libutil/util_sys.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libutil/util_sys.c b/libutil/util_sys.c index 96f1548e..fd11086d 100644 --- a/libutil/util_sys.c +++ b/libutil/util_sys.c @@ -141,13 +141,17 @@ int util_sys_get_dev_addr(const char *dev, char *addr) unsigned int maj, min; struct stat s; ssize_t len; + dev_t base; char *path; if (stat(dev, &s) != 0) return -1; - maj = major(s.st_rdev); - min = minor(s.st_rdev); + if (util_sys_get_base_dev(s.st_rdev, &base)) + return -1; + + maj = major(base); + min = minor(base); if (S_ISBLK(s.st_mode)) path = util_path_sysfs("dev/block/%u:%u/device", maj, min);