md: Always set RECOVERY_NEEDED when clearing RECOVERY_FROZEN
authorNeilBrown <neilb@suse.de>
Tue, 28 Oct 2014 21:49:50 +0000 (08:49 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Nov 2014 17:23:04 +0000 (09:23 -0800)
commit4e2e6c8457fabdd38b9e9b3b83d46a3e5eeb0bfc
treee09c3101afa47d50557ebe811821175ec5cfb3b2
parent57c340a8ca1133e9771a533aecd117414a499a4b
md: Always set RECOVERY_NEEDED when clearing RECOVERY_FROZEN

commit 45eaf45dfa4850df16bc2e8e7903d89021137f40 upstream.

md_check_recovery will skip any recovery and also clear
MD_RECOVERY_NEEDED if MD_RECOVERY_FROZEN is set.
So when we clear _FROZEN, we must set _NEEDED and ensure that
md_check_recovery gets run.
Otherwise we could miss out on something that is needed.

In particular, this can make it impossible to remove a
failed device from an array is the  'recovery-needed' processing
didn't happen.
Suitable for stable kernels since 3.13.

Reported-and-tested-by: Joe Lawrence <joe.lawrence@stratus.com>
Fixes: 30b8feb730f9b9b3c5de02580897da03f59b6b16
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/md/md.c