summaryrefslogtreecommitdiff
path: root/Incremental.c
diff options
context:
space:
mode:
authorPrzemyslaw Czarnowski <przemyslaw.hawrylewicz.czarnowski@intel.com>2010-12-21 09:10:32 +1100
committerNeilBrown <neilb@suse.de>2010-12-21 09:10:32 +1100
commited690d36e26597aa8fdbebe4f3134d1213811416 (patch)
treef0b53646b23c9651c378b61af283bddcdce98ac7 /Incremental.c
parent5ec0f3738aaadfdf182b830df520731a544b45ee (diff)
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 <neilb@suse.de>
Diffstat (limited to 'Incremental.c')
-rw-r--r--Incremental.c9
1 files changed, 9 insertions, 0 deletions
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;
}