From c1ea5a98098aa480712824abb34065d98c2ff8d0 Mon Sep 17 00:00:00 2001 From: "mwilck@arcor.de" Date: Fri, 1 Mar 2013 23:28:33 +0100 Subject: [PATCH] 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 --- Detail.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Detail.c b/Detail.c index 250d586..0d48b63 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;