aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2015-07-21 20:20:07 -0400
committerNeilBrown <neilb@suse.com>2015-07-22 00:09:29 -0400
commitee5d004fd0591536a061451eba2b187092e9127c (patch)
tree79283cce6691fa2ce9438c470c5984593438abcd
parent299b0685e31c9f3dcc2d58ee3beca761a40b44b3 (diff)
md: flush ->event_work before stopping array.
The 'event_work' worker used by dm-raid may still be running when the array is stopped. This can result in an oops. So flush the workqueue on which it is run after detaching and before destroying the device. Reported-by: Heinz Mauelshagen <heinzm@redhat.com> Signed-off-by: NeilBrown <neilb@suse.com> Cc: stable@vger.kernel.org (2.6.38+ please delay 2 weeks after -final release) Fixes: 9d09e663d550 ("dm: raid456 basic support")
-rw-r--r--drivers/md/md.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index df92d30ca054..5025b3ec13cd 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -5382,6 +5382,8 @@ static void __md_stop(struct mddev *mddev)
5382{ 5382{
5383 struct md_personality *pers = mddev->pers; 5383 struct md_personality *pers = mddev->pers;
5384 mddev_detach(mddev); 5384 mddev_detach(mddev);
5385 /* Ensure ->event_work is done */
5386 flush_workqueue(md_misc_wq);
5385 spin_lock(&mddev->lock); 5387 spin_lock(&mddev->lock);
5386 mddev->ready = 0; 5388 mddev->ready = 0;
5387 mddev->pers = NULL; 5389 mddev->pers = NULL;