From: Marcin Labun Date: Thu, 16 Dec 2010 14:16:12 +0000 (+0100) Subject: Monitor: Check destination array domain early. X-Git-Tag: mdadm-3.2~161 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=commitdiff_plain;h=5ec0f3738aaadfdf182b830df520731a544b45ee Monitor: Check destination array domain early. Destination arrays that do not have any domains are excluded from spare sharing. We can check it early, without searching for donor arrays. Signed-off-by: Marcin Labun Signed-off-by: NeilBrown --- diff --git a/Monitor.c b/Monitor.c index ce160f3e..e79f658b 100644 --- a/Monitor.c +++ b/Monitor.c @@ -767,8 +767,7 @@ static int move_spare(struct state *from, struct state *to, return 0; } -static int check_donor(struct state *from, struct state *to, - struct domainlist *domlist) +static int check_donor(struct state *from, struct state *to) { struct state *sub; @@ -790,8 +789,6 @@ static int check_donor(struct state *from, struct state *to, return 0; if (from->spare <= 0) return 0; - if (domlist == NULL) - return 0; return 1; } @@ -923,10 +920,15 @@ static void try_spare_migration(struct state *statelist, struct alert_info *info to->metadata->ss->name); if (to->spare_group) domain_add(&domlist, to->spare_group); - + /* + * No spare migration if the destination + * has no domain. Skip this array. + */ + if (!domlist) + continue; for (from=statelist ; from ; from=from->next) { dev_t devid; - if (!check_donor(from, to, domlist)) + if (!check_donor(from, to)) continue; if (from->metadata->ss->external) devid = container_choose_spare(