From 75aa18b53cb2df342bc78dd9e44cd0f0c51075f0 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 27 May 2008 09:18:52 +1000 Subject: [PATCH] Start mdmon during incremental assembly of container --- Incremental.c | 24 ++++++++++++++++++++++++ super-ddf.c | 1 + 2 files changed, 25 insertions(+) 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; } -- 2.39.2