From: NeilBrown Date: Tue, 6 Dec 2011 21:39:39 +0000 (+1100) Subject: monitor: don't unblock a device that isn't blocked. X-Git-Tag: mdadm-3.2.3~40 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1c278e81813fc481114413f730ad348319382ffe;p=thirdparty%2Fmdadm.git 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 --- 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;