Assemble: avoid infinite loop when auto-assembling partial container.

When auto-assembling we loop until we get no successes.

If a device is found that look like it is part of an already-existing
container, but we subsequently fail to add that device, then the fact
that the container is running looks like a success.  This can result
in infinite looping.
So if a container was already partially assemble, and is still only
partially assembled after we try to add devices, then don't treat that
as success.

Signed-off-by: NeilBrown  <neilb@suse.de>
This commit is contained in:
NeilBrown 2014-01-20 15:23:31 +11:00
parent a34fea0eae
commit 284546ef89
1 changed files with 4 additions and 0 deletions

View File

@ -990,6 +990,10 @@ static int start_array(int mdfd,
}
st->ss->free_super(st);
sysfs_uevent(content, "change");
if (err_ok && okcnt < (unsigned)content->array.raid_disks)
/* Was partial, is still partial, so signal an error
* to ensure we don't retry */
return 1;
return 0;
}