From 1c278e81813fc481114413f730ad348319382ffe Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 7 Dec 2011 08:39:39 +1100 Subject: [PATCH] monitor: don't unblock a device that isn't blocked. When we see a failed device, we both unblock and remove it (after updating the metadata). However it might not be blocked as there can be a delay between unblocking and the device being free to be removed. If this happens the clearing of 'blocked' succeeds so md sends a sysfs notification and mdmon checks again and tries to clear 'blocked' again. Thus it enters a busy-loop until the 'remove' succeeds. To avoid this, only try to unblock if the device was blocked. Signed-off-by: NeilBrown --- monitor.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monitor.c b/monitor.c index b002e90f..29bde18a 100644 --- a/monitor.c +++ b/monitor.c @@ -339,7 +339,8 @@ static int read_and_act(struct active_array *a) a->container->ss->set_disk(a, mdi->disk.raid_disk, mdi->curr_state); check_degraded = 1; - mdi->next_state |= DS_UNBLOCK; + if (mdi->curr_state & DS_BLOCKED) + mdi->next_state |= DS_UNBLOCK; if (a->curr_state == read_auto) { a->container->ss->set_array_state(a, 0); a->next_state = active; -- 2.39.2