diff options
author | NeilBrown <neilb@suse.com> | 2016-12-22 13:14:59 +1100 |
---|---|---|
committer | Jes Sorensen <Jes.Sorensen@redhat.com> | 2016-12-22 12:19:10 -0500 |
commit | c07566f14c89f42b5908bd36d1857d327d1bcc41 (patch) | |
tree | b8b3059e295bc6f5c58e7804387d3470dc248ecd | |
parent | 6df5d1833f52cce0e1925920fdca5f90e6428667 (diff) | |
download | mdadm-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.c | 10 |
1 files changed, 2 insertions, 8 deletions
@@ -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; |