From: NeilBrown Date: Thu, 22 Dec 2016 02:14:59 +0000 (+1100) Subject: Make get_component_size() work with named array. X-Git-Tag: mdadm-4.0~8 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=commitdiff_plain;h=c07566f14c89f42b5908bd36d1857d327d1bcc41 Make get_component_size() work with named array. get_component_size() still assumes that all array are /sys/block/md%d or /sys/block/md_d%d and so doesn't work with e.g. /sys/block/md_foo. This cause "mdadm --detail" to report Used Dev Size : unknown and causes problems when added spares and in other circumstances. So change it to use stat2devnm() which does the right thing with all types of array names. Reported-and-tested-by: Robert LeBlanc Signed-off-by: NeilBrown Signed-off-by: Jes Sorensen --- diff --git a/sysfs.c b/sysfs.c index 84c73485..b0657a04 100644 --- a/sysfs.c +++ b/sysfs.c @@ -400,14 +400,8 @@ unsigned long long get_component_size(int fd) int n; if (fstat(fd, &stb)) return 0; - if (major(stb.st_rdev) != (unsigned)get_mdp_major()) - snprintf(fname, MAX_SYSFS_PATH_LEN, - "/sys/block/md%d/md/component_size", - (int)minor(stb.st_rdev)); - else - snprintf(fname, MAX_SYSFS_PATH_LEN, - "/sys/block/md_d%d/md/component_size", - (int)minor(stb.st_rdev)>>MdpMinorShift); + snprintf(fname, MAX_SYSFS_PATH_LEN, + "/sys/block/%s/md/component_size", stat2devnm(&stb)); fd = open(fname, O_RDONLY); if (fd < 0) return 0;