]> 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)
commit98eae7bdfb0d9120e1be887fdc8ae5d141ce8c60
treeedbdf78f783da84eeacb7041a8b64d3096ce1f81
parent874d06cbcdd715efd741d69f90089dac105b2d50
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 874d06c ("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