md: use MD_RECOVERY_INTR instead of kthread_should_stop in resync thread.
authorNeilBrown <neilb@suse.de>
Tue, 19 Nov 2013 01:02:01 +0000 (12:02 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 19 Nov 2013 04:19:17 +0000 (15:19 +1100)
commitc91abf5a3546a4ff0838d2905f4d7eae2795f724
tree39b3735cebfa73ff370f2738bd8578a113fe4215
parent29f097c4d968021ee4fad1b033be5825ff78330e
md: use MD_RECOVERY_INTR instead of kthread_should_stop in resync thread.

We currently use kthread_should_stop() in various places in the
sync/reshape code to abort early.
However some places set MD_RECOVERY_INTR but don't immediately call
md_reap_sync_thread() (and we will shortly get another one).
When this happens we are relying on md_check_recovery() to reap the
thread and that only happen when it finishes normally.
So MD_RECOVERY_INTR must lead to a normal finish without the
kthread_should_stop() test.

So replace all relevant tests, and be more careful when the thread is
interrupted not to acknowledge that latest step in a reshape as it may
not be fully committed yet.

Also add a test on MD_RECOVERY_INTR in the 'is_mddev_idle' loop
so we don't wait have to wait for the speed to drop before we can abort.

Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/md.c
drivers/md/raid10.c
drivers/md/raid5.c