Using keventd for running request_fns is risky because keventd itself can block on disk I/O. drivers/block/ll_rw_blk.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/block/ll_rw_blk.c~unplug-use-kblockd drivers/block/ll_rw_blk.c --- 25/drivers/block/ll_rw_blk.c~unplug-use-kblockd 2003-04-01 02:33:37.000000000 -0800 +++ 25-akpm/drivers/block/ll_rw_blk.c 2003-04-01 02:33:37.000000000 -0800 @@ -1019,7 +1019,7 @@ static void blk_unplug_timeout(unsigned { request_queue_t *q = (request_queue_t *)data; - schedule_work(&q->unplug_work); + kblockd_schedule_work(&q->unplug_work); } /** @@ -1167,7 +1167,7 @@ void blk_cleanup_queue(request_queue_t * count -= __blk_cleanup_queue(&q->rq[WRITE]); del_timer_sync(&q->unplug_timer); - flush_scheduled_work(); + kblockd_flush(); if (count) printk("blk_cleanup_queue: leaked requests (%d)\n", count); _