From 284546ef89168c9003da192a177cae774199f889 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Mon, 20 Jan 2014 15:23:31 +1100 Subject: [PATCH 07/13] 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 --- Assemble.c | 4 ++++ 1 file changed, 4 insertions(+) --- mdadm-3.3.orig/Assemble.c +++ mdadm-3.3/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; }