| From 0f62fb220aa4ebabe8547d3a9ce4a16d3c045f21 Mon Sep 17 00:00:00 2001 |
| From: NeilBrown <neilb@suse.de> |
| Date: Tue, 6 May 2014 09:36:08 +1000 |
| Subject: md: avoid possible spinning md thread at shutdown. |
| |
| From: NeilBrown <neilb@suse.de> |
| |
| commit 0f62fb220aa4ebabe8547d3a9ce4a16d3c045f21 upstream. |
| |
| If an md array with externally managed metadata (e.g. DDF or IMSM) |
| is in use, then we should not set safemode==2 at shutdown because: |
| |
| 1/ this is ineffective: user-space need to be involved in any 'safemode' handling, |
| 2/ The safemode management code doesn't cope with safemode==2 on external metadata |
| and md_check_recover enters an infinite loop. |
| |
| Even at shutdown, an infinite-looping process can be problematic, so this |
| could cause shutdown to hang. |
| |
| Signed-off-by: NeilBrown <neilb@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/md.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/md/md.c |
| +++ b/drivers/md/md.c |
| @@ -8481,7 +8481,8 @@ static int md_notify_reboot(struct notif |
| if (mddev_trylock(mddev)) { |
| if (mddev->pers) |
| __md_stop_writes(mddev); |
| - mddev->safemode = 2; |
| + if (mddev->persistent) |
| + mddev->safemode = 2; |
| mddev_unlock(mddev); |
| } |
| need_delay = 1; |