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 <marcin.labun@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Marcin Labun 2010-12-16 15:16:12 +01:00 committed by NeilBrown
parent 0d30ccec0e
commit 5ec0f3738a
1 changed files with 8 additions and 6 deletions

View File

@ -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(