summaryrefslogtreecommitdiff
path: root/mdadm.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2013-05-13 12:56:38 +1000
committerNeilBrown <neilb@suse.de>2013-05-13 12:56:38 +1000
commit743eaf8b70501c64c58ad56b435873bf788c878b (patch)
treec0cf2392d54bfe8dc4e9d30a9e0f3ebe44fad335 /mdadm.c
parent6b63c1a4570412c06a40ffa57d35577816259a94 (diff)
misc_scan: don't trust the mapping file too much for device names.
misc_scan assumes that any device name found in the 'mapping' file is usable. Usually it is but sometimes not, such as for inactive devices. Depending on it isn't really robust, when a name is found, check that it exists. If not, fall back on map_dev. This will allow "--detail --scan" to notice inactive devices. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdadm.c')
-rw-r--r--mdadm.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/mdadm.c b/mdadm.c
index c4c5f294..e053db59 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -1645,8 +1645,9 @@ static int misc_scan(char devmode, struct context *c)
for (members = 0; members <= 1; members++) {
for (e=ms ; e ; e=e->next) {
- char *name;
+ char *name = NULL;
struct map_ent *me;
+ struct stat stb;
int member = e->metadata_version &&
strncmp(e->metadata_version,
"external:/", 10) == 0;
@@ -1656,7 +1657,8 @@ static int misc_scan(char devmode, struct context *c)
if (me && me->path
&& strcmp(me->path, "/unknown") != 0)
name = me->path;
- else
+ if (name == NULL ||
+ stat(name, &stb) != 0)
name = get_md_name(e->devnm);
if (!name) {