blk-throttle: Do not use kblockd workqueue for throtl work
authorVivek Goyal <vgoyal@redhat.com>
Tue, 1 Mar 2011 18:40:54 +0000 (13:40 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 7 Mar 2011 23:05:23 +0000 (15:05 -0800)
commite815788988678cd443b7f77603602d09e5a0da86
treebd5cd45f65c5b238653af4912b3b2b91d006d74c
parentc5a3ef83c9b4cd3eb38b4c33ef4aed89eb790d53
blk-throttle: Do not use kblockd workqueue for throtl work

commit 450adcbe518ab3a3953d8475309525d22de77cba upstream.

o Dominik Klein reported a system hang issue while doing some blkio
  throttling testing.

  https://lkml.org/lkml/2011/2/24/173

o Some tracing revealed that CFQ was not dispatching any more jobs as
  queue unplug was not happening. And queue unplug was not happening
  because unplug work was not being called as there was one throttling
  work on same cpu which as not finished yet. And throttling work had not
  finished as it was tyring to dispatch a bio to CFQ but all the request
  descriptors were consume to it was put to sleep.

o So basically it is a cyclic dependecny between CFQ unplug work and
  throtl dispatch work. Tejun suggested that use separate workqueue for
  such cases.

o This patch uses a separate workqueue for throttle related work and
  does not rely on kblockd workqueue anymore.

Reported-by: Dominik Klein <dk@in-telegence.net>
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
block/blk-core.c
block/blk-throttle.c
include/linux/blkdev.h