diff options
author | Jens Axboe <axboe@fb.com> | 2016-11-28 09:25:50 -0700 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2016-11-28 10:27:03 -0700 |
commit | fa224eed2b5e0f2f9a57281e9dc733c843d590ad (patch) | |
tree | e7cdf9a2458ec2fd000c536add5ac206ee1dd9f9 | |
parent | 80e091d10e8bf7b801d634ea8870b9e907314424 (diff) | |
download | lwn-fa224eed2b5e0f2f9a57281e9dc733c843d590ad.tar.gz lwn-fa224eed2b5e0f2f9a57281e9dc733c843d590ad.zip |
blk-wbt: cleanup disable-by-default for CFQ
Make it clear that we are disabling wbt for the specified queued,
if it was enabled by default. This is in preparation for allowing
users to re-enable wbt, and not have it disabled automatically
again.
Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r-- | block/blk-wbt.c | 10 | ||||
-rw-r--r-- | block/blk-wbt.h | 4 | ||||
-rw-r--r-- | block/cfq-iosched.c | 9 |
3 files changed, 13 insertions, 10 deletions
diff --git a/block/blk-wbt.c b/block/blk-wbt.c index 92df2f7c5af1..7c0e618d6e7d 100644 --- a/block/blk-wbt.c +++ b/block/blk-wbt.c @@ -665,15 +665,21 @@ void wbt_set_write_cache(struct rq_wb *rwb, bool write_cache_on) rwb->wc = write_cache_on; } -void wbt_disable(struct rq_wb *rwb) + /* + * Disable wbt, if enabled by default. Only called from CFQ, if we have + * cgroups enabled + */ +void wbt_disable_default(struct request_queue *q) { + struct rq_wb *rwb = q->rq_wb; + if (rwb) { del_timer_sync(&rwb->window_timer); rwb->win_nsec = rwb->min_lat_nsec = 0; wbt_update_limits(rwb); } } -EXPORT_SYMBOL_GPL(wbt_disable); +EXPORT_SYMBOL_GPL(wbt_disable_default); u64 wbt_default_latency_nsec(struct request_queue *q) { diff --git a/block/blk-wbt.h b/block/blk-wbt.h index 9dfc88ad7f30..8f485f8e1baf 100644 --- a/block/blk-wbt.h +++ b/block/blk-wbt.h @@ -105,7 +105,7 @@ void wbt_exit(struct request_queue *); void wbt_update_limits(struct rq_wb *); void wbt_requeue(struct rq_wb *, struct blk_issue_stat *); void wbt_issue(struct rq_wb *, struct blk_issue_stat *); -void wbt_disable(struct rq_wb *); +void wbt_disable_default(struct request_queue *); void wbt_set_queue_depth(struct rq_wb *, unsigned int); void wbt_set_write_cache(struct rq_wb *, bool); @@ -141,7 +141,7 @@ static inline void wbt_requeue(struct rq_wb *rwb, struct blk_issue_stat *stat) static inline void wbt_issue(struct rq_wb *rwb, struct blk_issue_stat *stat) { } -static inline void wbt_disable(struct rq_wb *rwb) +static inline void wbt_disable_default(struct request_queue *q) { } static inline void wbt_set_queue_depth(struct rq_wb *rwb, unsigned int depth) diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 9894dc985e09..c73a6fcaeb9d 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -3780,13 +3780,10 @@ static void check_blkcg_changed(struct cfq_io_cq *cic, struct bio *bio) /* * If we have a non-root cgroup, we can depend on that to * do proper throttling of writes. Turn off wbt for that - * case. + * case, if it was enabled by default. */ - if (nonroot_cg) { - struct request_queue *q = cfqd->queue; - - wbt_disable(q->rq_wb); - } + if (nonroot_cg) + wbt_disable_default(cfqd->queue); /* * Drop reference to queues. New queues will be assigned in new |