md: fix and update workqueue usage
authorTejun Heo <tj@kernel.org>
Fri, 15 Oct 2010 13:36:08 +0000 (15:36 +0200)
committerNeilBrown <neilb@suse.de>
Thu, 28 Oct 2010 06:32:29 +0000 (17:32 +1100)
commite804ac780e2f01cb3b914daca2fd4780d1743db1
tree60447c76ea9dbaa526c8cabc14898e4df4498bf6
parent57dab0bdf689d42972975ec646d862b0900a4bf3
md: fix and update workqueue usage

Workqueue usage in md has two problems.

* Flush can be used during or depended upon by memory reclaim, but md
  uses the system workqueue for flush_work which may lead to deadlock.

* md depends on flush_scheduled_work() to achieve exclusion against
  completion of removal of previous instances.  flush_scheduled_work()
  may incur unexpected amount of delay and is scheduled to be removed.

This patch adds two workqueues to md - md_wq and md_misc_wq.  The
former is guaranteed to make forward progress under memory pressure
and serves flush_work.  The latter serves as the flush domain for
other works.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/md.c