summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2016-12-22 13:14:59 +1100
committerJes Sorensen <Jes.Sorensen@redhat.com>2016-12-22 12:19:10 -0500
commitc07566f14c89f42b5908bd36d1857d327d1bcc41 (patch)
treeb8b3059e295bc6f5c58e7804387d3470dc248ecd
parent6df5d1833f52cce0e1925920fdca5f90e6428667 (diff)
downloadmdadm-c07566f14c89f42b5908bd36d1857d327d1bcc41.tar.gz
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 <robert@leblancnet.us> Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
-rw-r--r--sysfs.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/sysfs.c b/sysfs.c
index 84c7348..b0657a0 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;