| From ee5d004fd0591536a061451eba2b187092e9127c Mon Sep 17 00:00:00 2001 |
| From: NeilBrown <neilb@suse.com> |
| Date: Wed, 22 Jul 2015 10:20:07 +1000 |
| Subject: md: flush ->event_work before stopping array. |
| |
| From: NeilBrown <neilb@suse.com> |
| |
| commit ee5d004fd0591536a061451eba2b187092e9127c upstream. |
| |
| 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> |
| Fixes: 9d09e663d550 ("dm: raid456 basic support") |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/md.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/md/md.c |
| +++ b/drivers/md/md.c |
| @@ -5285,6 +5285,8 @@ EXPORT_SYMBOL_GPL(md_stop_writes); |
| static void __md_stop(struct mddev *mddev) |
| { |
| mddev->ready = 0; |
| + /* Ensure ->event_work is done */ |
| + flush_workqueue(md_misc_wq); |
| mddev->pers->stop(mddev); |
| if (mddev->pers->sync_request && mddev->to_remove == NULL) |
| mddev->to_remove = &md_redundancy_group; |