From: mwilck@arcor.de Date: Fri, 1 Mar 2013 22:28:33 +0000 (+0100) Subject: Detail.c: call load_container for container subarrays X-Git-Tag: mdadm-3.3-rc1~105 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1ea5a98098aa480712824abb34065d98c2ff8d0;p=thirdparty%2Fmdadm.git Detail.c: call load_container for container subarrays Without calling load_container at this point, the info structure may be missing some important information. In particular, information about secondary DDF RAID levels may be wrong if information is only read from a single disk. If this fails, fall back to the previous code. Signed-off-by: Martin Wilck Signed-off-by: NeilBrown --- diff --git a/Detail.c b/Detail.c index 250d5864..0d48b63f 100644 --- a/Detail.c +++ b/Detail.c @@ -103,14 +103,22 @@ int Detail(char *dev, struct context *c) * We want the name of the container, and the member */ int devid = devnm2devid(st->container_devnm); + int cfd, err; member = subarray; container = map_dev_preferred(major(devid), minor(devid), 1, c->prefer); + cfd = open_dev(st->container_devnm); + if (cfd >= 0) { + err = st->ss->load_container(st, cfd, NULL); + close(cfd); + if (err == 0) + info = st->ss->container_content(st, subarray); + } } /* try to load a superblock */ - if (st) for (d = 0; d < max_disks; d++) { + if (st && !info) for (d = 0; d < max_disks; d++) { mdu_disk_info_t disk; char *dv; int fd2;