diff options
| -rw-r--r-- | block/cfq-iosched.c | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 7c3893d4447a..39c43307dc6c 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
| @@ -306,16 +306,6 @@ struct cfq_data { | |||
| 306 | unsigned long last_delayed_sync; | 306 | unsigned long last_delayed_sync; |
| 307 | }; | 307 | }; |
| 308 | 308 | ||
| 309 | static inline struct cfq_group *blkg_to_cfqg(struct blkio_group *blkg) | ||
| 310 | { | ||
| 311 | return blkg_to_pdata(blkg, &blkio_policy_cfq); | ||
| 312 | } | ||
| 313 | |||
| 314 | static inline struct blkio_group *cfqg_to_blkg(struct cfq_group *cfqg) | ||
| 315 | { | ||
| 316 | return pdata_to_blkg(cfqg, &blkio_policy_cfq); | ||
| 317 | } | ||
| 318 | |||
| 319 | static struct cfq_group *cfq_get_next_cfqg(struct cfq_data *cfqd); | 309 | static struct cfq_group *cfq_get_next_cfqg(struct cfq_data *cfqd); |
| 320 | 310 | ||
| 321 | static struct cfq_rb_root *service_tree_for(struct cfq_group *cfqg, | 311 | static struct cfq_rb_root *service_tree_for(struct cfq_group *cfqg, |
| @@ -377,6 +367,26 @@ CFQ_CFQQ_FNS(wait_busy); | |||
| 377 | #undef CFQ_CFQQ_FNS | 367 | #undef CFQ_CFQQ_FNS |
| 378 | 368 | ||
| 379 | #ifdef CONFIG_CFQ_GROUP_IOSCHED | 369 | #ifdef CONFIG_CFQ_GROUP_IOSCHED |
| 370 | static inline struct cfq_group *blkg_to_cfqg(struct blkio_group *blkg) | ||
| 371 | { | ||
| 372 | return blkg_to_pdata(blkg, &blkio_policy_cfq); | ||
| 373 | } | ||
| 374 | |||
| 375 | static inline struct blkio_group *cfqg_to_blkg(struct cfq_group *cfqg) | ||
| 376 | { | ||
| 377 | return pdata_to_blkg(cfqg, &blkio_policy_cfq); | ||
| 378 | } | ||
| 379 | |||
| 380 | static inline void cfqg_get(struct cfq_group *cfqg) | ||
| 381 | { | ||
| 382 | return blkg_get(cfqg_to_blkg(cfqg)); | ||
| 383 | } | ||
| 384 | |||
| 385 | static inline void cfqg_put(struct cfq_group *cfqg) | ||
| 386 | { | ||
| 387 | return blkg_put(cfqg_to_blkg(cfqg)); | ||
| 388 | } | ||
| 389 | |||
| 380 | #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ | 390 | #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ |
| 381 | blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \ | 391 | blk_add_trace_msg((cfqd)->queue, "cfq%d%c %s " fmt, (cfqq)->pid, \ |
| 382 | cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \ | 392 | cfq_cfqq_sync((cfqq)) ? 'S' : 'A', \ |
| @@ -386,11 +396,19 @@ CFQ_CFQQ_FNS(wait_busy); | |||
| 386 | blk_add_trace_msg((cfqd)->queue, "%s " fmt, \ | 396 | blk_add_trace_msg((cfqd)->queue, "%s " fmt, \ |
| 387 | blkg_path(cfqg_to_blkg((cfqg))), ##args) \ | 397 | blkg_path(cfqg_to_blkg((cfqg))), ##args) \ |
| 388 | 398 | ||
| 389 | #else | 399 | #else /* CONFIG_CFQ_GROUP_IOSCHED */ |
| 400 | |||
| 401 | static inline struct cfq_group *blkg_to_cfqg(struct blkio_group *blkg) { return NULL; } | ||
| 402 | static inline struct blkio_group *cfqg_to_blkg(struct cfq_group *cfqg) { return NULL; } | ||
| 403 | static inline void cfqg_get(struct cfq_group *cfqg) { } | ||
| 404 | static inline void cfqg_put(struct cfq_group *cfqg) { } | ||
| 405 | |||
| 390 | #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ | 406 | #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ |
| 391 | blk_add_trace_msg((cfqd)->queue, "cfq%d " fmt, (cfqq)->pid, ##args) | 407 | blk_add_trace_msg((cfqd)->queue, "cfq%d " fmt, (cfqq)->pid, ##args) |
| 392 | #define cfq_log_cfqg(cfqd, cfqg, fmt, args...) do {} while (0) | 408 | #define cfq_log_cfqg(cfqd, cfqg, fmt, args...) do {} while (0) |
| 393 | #endif | 409 | |
| 410 | #endif /* CONFIG_CFQ_GROUP_IOSCHED */ | ||
| 411 | |||
| 394 | #define cfq_log(cfqd, fmt, args...) \ | 412 | #define cfq_log(cfqd, fmt, args...) \ |
| 395 | blk_add_trace_msg((cfqd)->queue, "cfq " fmt, ##args) | 413 | blk_add_trace_msg((cfqd)->queue, "cfq " fmt, ##args) |
| 396 | 414 | ||
| @@ -1090,7 +1108,7 @@ static void cfq_link_cfqq_cfqg(struct cfq_queue *cfqq, struct cfq_group *cfqg) | |||
| 1090 | 1108 | ||
| 1091 | cfqq->cfqg = cfqg; | 1109 | cfqq->cfqg = cfqg; |
| 1092 | /* cfqq reference on cfqg */ | 1110 | /* cfqq reference on cfqg */ |
| 1093 | blkg_get(cfqg_to_blkg(cfqg)); | 1111 | cfqg_get(cfqg); |
| 1094 | } | 1112 | } |
| 1095 | 1113 | ||
| 1096 | #else /* GROUP_IOSCHED */ | 1114 | #else /* GROUP_IOSCHED */ |
| @@ -2505,7 +2523,7 @@ static void cfq_put_queue(struct cfq_queue *cfqq) | |||
| 2505 | 2523 | ||
| 2506 | BUG_ON(cfq_cfqq_on_rr(cfqq)); | 2524 | BUG_ON(cfq_cfqq_on_rr(cfqq)); |
| 2507 | kmem_cache_free(cfq_pool, cfqq); | 2525 | kmem_cache_free(cfq_pool, cfqq); |
| 2508 | blkg_put(cfqg_to_blkg(cfqg)); | 2526 | cfqg_put(cfqg); |
| 2509 | } | 2527 | } |
| 2510 | 2528 | ||
| 2511 | static void cfq_put_cooperator(struct cfq_queue *cfqq) | 2529 | static void cfq_put_cooperator(struct cfq_queue *cfqq) |
| @@ -3276,7 +3294,7 @@ static void cfq_put_request(struct request *rq) | |||
| 3276 | cfqq->allocated[rw]--; | 3294 | cfqq->allocated[rw]--; |
| 3277 | 3295 | ||
| 3278 | /* Put down rq reference on cfqg */ | 3296 | /* Put down rq reference on cfqg */ |
| 3279 | blkg_put(cfqg_to_blkg(RQ_CFQG(rq))); | 3297 | cfqg_put(RQ_CFQG(rq)); |
| 3280 | rq->elv.priv[0] = NULL; | 3298 | rq->elv.priv[0] = NULL; |
| 3281 | rq->elv.priv[1] = NULL; | 3299 | rq->elv.priv[1] = NULL; |
| 3282 | 3300 | ||
| @@ -3364,7 +3382,7 @@ new_queue: | |||
| 3364 | cfqq->allocated[rw]++; | 3382 | cfqq->allocated[rw]++; |
| 3365 | 3383 | ||
| 3366 | cfqq->ref++; | 3384 | cfqq->ref++; |
| 3367 | blkg_get(cfqg_to_blkg(cfqq->cfqg)); | 3385 | cfqg_get(cfqq->cfqg); |
| 3368 | rq->elv.priv[0] = cfqq; | 3386 | rq->elv.priv[0] = cfqq; |
| 3369 | rq->elv.priv[1] = cfqq->cfqg; | 3387 | rq->elv.priv[1] = cfqq->cfqg; |
| 3370 | spin_unlock_irq(q->queue_lock); | 3388 | spin_unlock_irq(q->queue_lock); |
| @@ -3545,7 +3563,7 @@ static int cfq_init_queue(struct request_queue *q) | |||
| 3545 | 3563 | ||
| 3546 | spin_lock_irq(q->queue_lock); | 3564 | spin_lock_irq(q->queue_lock); |
| 3547 | cfq_link_cfqq_cfqg(&cfqd->oom_cfqq, cfqd->root_group); | 3565 | cfq_link_cfqq_cfqg(&cfqd->oom_cfqq, cfqd->root_group); |
| 3548 | blkg_put(cfqg_to_blkg(cfqd->root_group)); | 3566 | cfqg_put(cfqd->root_group); |
| 3549 | spin_unlock_irq(q->queue_lock); | 3567 | spin_unlock_irq(q->queue_lock); |
| 3550 | 3568 | ||
| 3551 | init_timer(&cfqd->idle_slice_timer); | 3569 | init_timer(&cfqd->idle_slice_timer); |
