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>
This commit is contained in:
parent
6df5d1833f
commit
c07566f14c
10
sysfs.c
10
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;
|
||||
|
|
Loading…
Reference in New Issue