]> git.baikalelectronics.ru Git - kernel.git/commit
megaraid: fix BUG_ON() from incorrect use of delayed work
authorXiaotian Feng <xtfeng@gmail.com>
Tue, 4 Dec 2012 11:33:54 +0000 (19:33 +0800)
committerTejun Heo <tj@kernel.org>
Tue, 4 Dec 2012 15:29:47 +0000 (07:29 -0800)
commit719470675634fc902af50c53a2e9ae6949c018f2
treeedbdf78f783da84eeacb7041a8b64d3096ce1f81
parent8d0685845c9f307da6bcb939a27366b3c2eb5188
megaraid: fix BUG_ON() from incorrect use of delayed work

megaraid use INIT_WORK to declare a hotplug_work, but cast the
hotplug_work from work_struct to delayed_work and
schedule_delayed_work on it.  This is very dangerous, as other part of
delayed_work might be kernel memories allocated by others.

With commit 8d06858 ("workqueue: mod_delayed_work_on() shouldn't queue
timer on 0 delay"), schedule_delayed_work() will check dwork->timer
before queue_work even when @delay is 0, this causes megaraid code to
hit the BUG_ON() in workqueue code.  Change megaraid code to use
delayed work.

Signed-off-by: Xiaotian Feng <dannyfeng@tencent.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Neela Syam Kolli <megaraidlinux@lsi.com>
Cc: "James E.J. Bottomley" <JBottomley@parallels.com>
Cc: linux-scsi@vger.kernel.org
drivers/scsi/megaraid/megaraid_sas.h
drivers/scsi/megaraid/megaraid_sas_base.c