block: remove WQ_POWER_EFFICIENT from kblockd
authorMatias Bjørling <m@bjorling.me>
Wed, 11 Jun 2014 21:43:54 +0000 (23:43 +0200)
committerJens Axboe <axboe@fb.com>
Wed, 11 Jun 2014 21:53:39 +0000 (15:53 -0600)
blk-mq issues async requests through kblockd. To issue a work request on
a specific CPU, kblockd_schedule_delayed_work_on is used. However, the
specific CPU choice may not be honored, if the power_efficient option
for workqueues is set. blk-mq requires that we have strict per-cpu
scheduling, so it wont work properly if kblockd is marked
POWER_EFFICIENT and power_efficient is set.

Remove the kblockd WQ_POWER_EFFICIENT flag to prevent this behavior.
This essentially reverts part of commit 695588f9454b, which added
the WQ_POWER_EFFICIENT marker to kblockd.

Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-core.c

index 9aca8c71e70b0bf8d8936462f1517a62da6c8432..55f91b88bb14cebf629adc40d60aa776fd4dfa2e 100644 (file)
@@ -3311,8 +3311,7 @@ int __init blk_dev_init(void)
 
        /* used for unplugging and affects IO latency/throughput - HIGHPRI */
        kblockd_workqueue = alloc_workqueue("kblockd",
-                                           WQ_MEM_RECLAIM | WQ_HIGHPRI |
-                                           WQ_POWER_EFFICIENT, 0);
+                                           WQ_MEM_RECLAIM | WQ_HIGHPRI, 0);
        if (!kblockd_workqueue)
                panic("Failed to create kblockd\n");