From ed690d36e26597aa8fdbebe4f3134d1213811416 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czarnowski Date: Tue, 21 Dec 2010 09:10:32 +1100 Subject: [PATCH] fix: adding spare via incremental do not trigger recovery After incremental has added spare, monitor should be woken up in order to see if anything has changed. If mdmon is not waken up, recovery do not start. Signed-off-by: NeilBrown --- Incremental.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Incremental.c b/Incremental.c index bc4531a5..8c5076f9 100644 --- a/Incremental.c +++ b/Incremental.c @@ -443,6 +443,7 @@ int Incremental(char *devname, int verbose, int runstop, /* 7/ Is there enough devices to possibly start the array? */ /* 7a/ if not, finish with success. */ if (info.array.level == LEVEL_CONTAINER) { + char *devname = NULL; /* Try to assemble within the container */ map_unlock(&map); sysfs_uevent(&info, "change"); @@ -451,6 +452,8 @@ int Incremental(char *devname, int verbose, int runstop, ": container %s now has %d devices\n", chosen_name, info.array.working_disks); wait_for(chosen_name, mdfd); + if (st->ss->external) + devname = devnum2devname(fd2devnum(mdfd)); close(mdfd); sysfs_free(sra); rv = Incremental(chosen_name, verbose, runstop, @@ -460,6 +463,12 @@ int Incremental(char *devname, int verbose, int runstop, * have enough devices to start yet */ rv = 0; + /* after spare is added, ping monitor for external metadata + * so that it can eg. try to rebuild degraded array */ + if (st->ss->external) { + ping_monitor(devname); + free(devname); + } return rv; } -- 2.39.2