From: Neil Brown Date: Mon, 26 May 2008 23:18:52 +0000 (+1000) Subject: Start mdmon during incremental assembly of container X-Git-Tag: devel~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75aa18b53cb2df342bc78dd9e44cd0f0c51075f0;p=thirdparty%2Fmdadm.git Start mdmon during incremental assembly of container --- 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; }