aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/blk-core.c8
-rw-r--r--block/cfq-iosched.c24
-rw-r--r--include/linux/blkdev.h4
3 files changed, 11 insertions, 25 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index 81f34311659a..73ecbed02605 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2492,14 +2492,6 @@ int kblockd_schedule_work(struct request_queue *q, struct work_struct *work)
2492} 2492}
2493EXPORT_SYMBOL(kblockd_schedule_work); 2493EXPORT_SYMBOL(kblockd_schedule_work);
2494 2494
2495int kblockd_schedule_delayed_work(struct request_queue *q,
2496 struct delayed_work *work,
2497 unsigned long delay)
2498{
2499 return queue_delayed_work(kblockd_workqueue, work, delay);
2500}
2501EXPORT_SYMBOL(kblockd_schedule_delayed_work);
2502
2503int __init blk_dev_init(void) 2495int __init blk_dev_init(void)
2504{ 2496{
2505 BUILD_BUG_ON(__REQ_NR_BITS > 8 * 2497 BUILD_BUG_ON(__REQ_NR_BITS > 8 *
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index ae14cbaf9d0e..690ebd96dc42 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -150,7 +150,7 @@ struct cfq_data {
150 * idle window management 150 * idle window management
151 */ 151 */
152 struct timer_list idle_slice_timer; 152 struct timer_list idle_slice_timer;
153 struct delayed_work unplug_work; 153 struct work_struct unplug_work;
154 154
155 struct cfq_queue *active_queue; 155 struct cfq_queue *active_queue;
156 struct cfq_io_context *active_cic; 156 struct cfq_io_context *active_cic;
@@ -268,13 +268,11 @@ static inline int cfq_bio_sync(struct bio *bio)
268 * scheduler run of queue, if there are requests pending and no one in the 268 * scheduler run of queue, if there are requests pending and no one in the
269 * driver that will restart queueing 269 * driver that will restart queueing
270 */ 270 */
271static inline void cfq_schedule_dispatch(struct cfq_data *cfqd, 271static inline void cfq_schedule_dispatch(struct cfq_data *cfqd)
272 unsigned long delay)
273{ 272{
274 if (cfqd->busy_queues) { 273 if (cfqd->busy_queues) {
275 cfq_log(cfqd, "schedule dispatch"); 274 cfq_log(cfqd, "schedule dispatch");
276 kblockd_schedule_delayed_work(cfqd->queue, &cfqd->unplug_work, 275 kblockd_schedule_work(cfqd->queue, &cfqd->unplug_work);
277 delay);
278 } 276 }
279} 277}
280 278
@@ -1400,7 +1398,7 @@ static void cfq_put_queue(struct cfq_queue *cfqq)
1400 1398
1401 if (unlikely(cfqd->active_queue == cfqq)) { 1399 if (unlikely(cfqd->active_queue == cfqq)) {
1402 __cfq_slice_expired(cfqd, cfqq, 0); 1400 __cfq_slice_expired(cfqd, cfqq, 0);
1403 cfq_schedule_dispatch(cfqd, 0); 1401 cfq_schedule_dispatch(cfqd);
1404 } 1402 }
1405 1403
1406 kmem_cache_free(cfq_pool, cfqq); 1404 kmem_cache_free(cfq_pool, cfqq);
@@ -1495,7 +1493,7 @@ static void cfq_exit_cfqq(struct cfq_data *cfqd, struct cfq_queue *cfqq)
1495{ 1493{
1496 if (unlikely(cfqq == cfqd->active_queue)) { 1494 if (unlikely(cfqq == cfqd->active_queue)) {
1497 __cfq_slice_expired(cfqd, cfqq, 0); 1495 __cfq_slice_expired(cfqd, cfqq, 0);
1498 cfq_schedule_dispatch(cfqd, 0); 1496 cfq_schedule_dispatch(cfqd);
1499 } 1497 }
1500 1498
1501 cfq_put_queue(cfqq); 1499 cfq_put_queue(cfqq);
@@ -2213,7 +2211,7 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
2213 } 2211 }
2214 2212
2215 if (!rq_in_driver(cfqd)) 2213 if (!rq_in_driver(cfqd))
2216 cfq_schedule_dispatch(cfqd, 0); 2214 cfq_schedule_dispatch(cfqd);
2217} 2215}
2218 2216
2219/* 2217/*
@@ -2343,7 +2341,7 @@ queue_fail:
2343 if (cic) 2341 if (cic)
2344 put_io_context(cic->ioc); 2342 put_io_context(cic->ioc);
2345 2343
2346 cfq_schedule_dispatch(cfqd, 0); 2344 cfq_schedule_dispatch(cfqd);
2347 spin_unlock_irqrestore(q->queue_lock, flags); 2345 spin_unlock_irqrestore(q->queue_lock, flags);
2348 cfq_log(cfqd, "set_request fail"); 2346 cfq_log(cfqd, "set_request fail");
2349 return 1; 2347 return 1;
@@ -2352,7 +2350,7 @@ queue_fail:
2352static void cfq_kick_queue(struct work_struct *work) 2350static void cfq_kick_queue(struct work_struct *work)
2353{ 2351{
2354 struct cfq_data *cfqd = 2352 struct cfq_data *cfqd =
2355 container_of(work, struct cfq_data, unplug_work.work); 2353 container_of(work, struct cfq_data, unplug_work);
2356 struct request_queue *q = cfqd->queue; 2354 struct request_queue *q = cfqd->queue;
2357 2355
2358 spin_lock_irq(q->queue_lock); 2356 spin_lock_irq(q->queue_lock);
@@ -2406,7 +2404,7 @@ static void cfq_idle_slice_timer(unsigned long data)
2406expire: 2404expire:
2407 cfq_slice_expired(cfqd, timed_out); 2405 cfq_slice_expired(cfqd, timed_out);
2408out_kick: 2406out_kick:
2409 cfq_schedule_dispatch(cfqd, 0); 2407 cfq_schedule_dispatch(cfqd);
2410out_cont: 2408out_cont:
2411 spin_unlock_irqrestore(cfqd->queue->queue_lock, flags); 2409 spin_unlock_irqrestore(cfqd->queue->queue_lock, flags);
2412} 2410}
@@ -2414,7 +2412,7 @@ out_cont:
2414static void cfq_shutdown_timer_wq(struct cfq_data *cfqd) 2412static void cfq_shutdown_timer_wq(struct cfq_data *cfqd)
2415{ 2413{
2416 del_timer_sync(&cfqd->idle_slice_timer); 2414 del_timer_sync(&cfqd->idle_slice_timer);
2417 cancel_delayed_work_sync(&cfqd->unplug_work); 2415 cancel_work_sync(&cfqd->unplug_work);
2418} 2416}
2419 2417
2420static void cfq_put_async_queues(struct cfq_data *cfqd) 2418static void cfq_put_async_queues(struct cfq_data *cfqd)
@@ -2496,7 +2494,7 @@ static void *cfq_init_queue(struct request_queue *q)
2496 cfqd->idle_slice_timer.function = cfq_idle_slice_timer; 2494 cfqd->idle_slice_timer.function = cfq_idle_slice_timer;
2497 cfqd->idle_slice_timer.data = (unsigned long) cfqd; 2495 cfqd->idle_slice_timer.data = (unsigned long) cfqd;
2498 2496
2499 INIT_DELAYED_WORK(&cfqd->unplug_work, cfq_kick_queue); 2497 INIT_WORK(&cfqd->unplug_work, cfq_kick_queue);
2500 2498
2501 cfqd->cfq_quantum = cfq_quantum; 2499 cfqd->cfq_quantum = cfq_quantum;
2502 cfqd->cfq_fifo_expire[0] = cfq_fifo_expire[0]; 2500 cfqd->cfq_fifo_expire[0] = cfq_fifo_expire[0];
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 25119041e034..221cecd86bd3 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1172,11 +1172,7 @@ static inline void put_dev_sector(Sector p)
1172} 1172}
1173 1173
1174struct work_struct; 1174struct work_struct;
1175struct delayed_work;
1176int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); 1175int kblockd_schedule_work(struct request_queue *q, struct work_struct *work);
1177int kblockd_schedule_delayed_work(struct request_queue *q,
1178 struct delayed_work *work,
1179 unsigned long delay);
1180 1176
1181#define MODULE_ALIAS_BLOCKDEV(major,minor) \ 1177#define MODULE_ALIAS_BLOCKDEV(major,minor) \
1182 MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor)) 1178 MODULE_ALIAS("block-major-" __stringify(major) "-" __stringify(minor))