diff options
author | Neil Brown <neilb@suse.de> | 2008-05-27 09:18:52 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2008-05-27 09:18:52 +1000 |
commit | 75aa18b53cb2df342bc78dd9e44cd0f0c51075f0 (patch) | |
tree | 440b2622a2a035f19f70f249d24e39ce79366321 | |
parent | 25dbe93ab48b6cb45e1fc72b27aaa75d4c1fa48c (diff) |
Start mdmon during incremental assembly of container
-rw-r--r-- | Incremental.c | 24 | ||||
-rw-r--r-- | super-ddf.c | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/Incremental.c b/Incremental.c index 18cdf3fa..5c582bb3 100644 --- a/Incremental.c +++ b/Incremental.c @@ -849,11 +849,35 @@ int Incremental_container(struct supertype *st, char *devname, int verbose, default: sysfs_set_str(sra, NULL, "array_state", "readonly"); + /* start mdmon if needed. */ + if (mdmon_running(st->container_dev)) + signal_mdmon(st->container_dev); + else { + int dn = st->container_dev; + int i; + switch(fork()) { + case 0: + /* FIXME yuk. CLOSE_EXEC?? */ + for (i=3; i < 100; i++) + close(i); + execl("./mdmon", "mdmon", + map_dev(dev2major(dn), + dev2minor(dn), + 1), NULL); + exit(1); + case -1: fprintf(stderr, Name + ": cannot fork. " + "Array remains readonly\n"); + return 1; + default: ; /* parent - good */ + } + } break; } if (verbose >= 0) printf("Started %s with %d devices\n", chosen_name, working); + /* FIXME should have an O_EXCL and wait for read-auto */ } else if (verbose >= 0) printf("%s assembled with %d devices but " diff --git a/super-ddf.c b/super-ddf.c index f0cb1f1f..1e910171 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -2350,6 +2350,7 @@ static int load_super_ddf_all(struct supertype *st, int fd, st->ss = &super_ddf_container; st->minor_version = 0; st->max_devs = 512; + st->container_dev = fd2devnum(fd); } return 0; } |