md: don't start resync thread directly from md thread.
authorNeilBrown <neilb@suse.de>
Mon, 29 Sep 2014 22:10:42 +0000 (08:10 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 14 Oct 2014 02:08:28 +0000 (13:08 +1100)
commitac05f256691fe427a3e84c19261adb0b67dd73c0
tree2f7254e7117eac0fc0d974029e5bb5422866a73c
parent8b1afc3d6751063d3f0cdefe55719b1cd2f7edcc
md: don't start resync thread directly from md thread.

The main 'md' thread is needed for processing writes, so if it blocks
write requests could be delayed.

Starting a new thread requires some GFP_KERNEL allocations and so can
wait for writes to complete.  This can deadlock.

So instead, ask a workqueue to start the sync thread.
There is no particular rush for this to happen, so any work queue
will do.

MD_RECOVERY_RUNNING is used to ensure only one thread is started.

Reported-by: BillStuff <billstuff2001@sbcglobal.net>
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/md.c