diff options
author | NeilBrown <neilb@suse.de> | 2014-01-20 15:23:31 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2014-01-20 15:23:31 +1100 |
commit | 284546ef89168c9003da192a177cae774199f889 (patch) | |
tree | 046e26ca64436c58ca92f2e74160976998431e1f /Assemble.c | |
parent | a34fea0eae78fbabb289a5bce6d7a04bf889156d (diff) | |
download | mdadm-284546ef89168c9003da192a177cae774199f889.tar.gz |
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>
Diffstat (limited to 'Assemble.c')
-rw-r--r-- | Assemble.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -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; } |