From: Jonathan Brassow Date: Wed, 16 May 2012 09:06:14 +0000 (-0500) Subject: MD: Add del_timer_sync to mddev_suspend (fix nasty panic) X-Git-Tag: v3.2.18~8 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=ad87af4331c0b242788fbf668eefe2e311f2cd7f;p=karo-tx-linux.git MD: Add del_timer_sync to mddev_suspend (fix nasty panic) commit 0d9f4f135eb6dea06bdcb7065b1e4ff78274a5e9 upstream. Use del_timer_sync to remove timer before mddev_suspend finishes. We don't want a timer going off after an mddev_suspend is called. This is especially true with device-mapper, since it can call the destructor function immediately following a suspend. This results in the removal (kfree) of the structures upon which the timer depends - resulting in a very ugly panic. Therefore, we add a del_timer_sync to mddev_suspend to prevent this. Signed-off-by: NeilBrown Signed-off-by: Ben Hutchings --- diff --git a/drivers/md/md.c b/drivers/md/md.c index 065ab4f46594..adcd850335b1 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -392,6 +392,8 @@ void mddev_suspend(struct mddev *mddev) synchronize_rcu(); wait_event(mddev->sb_wait, atomic_read(&mddev->active_io) == 0); mddev->pers->quiesce(mddev, 1); + + del_timer_sync(&mddev->safemode_timer); } EXPORT_SYMBOL_GPL(mddev_suspend);