From: NeilBrown Date: Mon, 20 Jan 2014 04:23:31 +0000 (+1100) Subject: Assemble: avoid infinite loop when auto-assembling partial container. X-Git-Tag: mdadm-3.3.1~80 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=284546ef89168c9003da192a177cae774199f889;p=thirdparty%2Fmdadm.git 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 --- diff --git a/Assemble.c b/Assemble.c index 7e8e7957..fdb38e4e 100644 --- a/Assemble.c +++ b/Assemble.c @@ -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; }