From d62118b6dd99b8f64350206a6ea6996083b28c9a Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Mon, 28 Nov 2016 09:40:34 -0700 Subject: blk-wbt: allow wbt to be enabled always through sysfs Currently there's no way to enable wbt if it's not enabled in the kernel config by default for a device. Allow a write to the 'wbt_lat_usec' queue sysfs file to enable wbt. This is useful for both the kernel config case, but also if the device is CFQ managed and it was turned off by default. Signed-off-by: Jens Axboe --- block/blk-sysfs.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'block/blk-sysfs.c') diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index f0ca569e276b9..a978414917690 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c @@ -425,20 +425,30 @@ static ssize_t queue_wb_lat_store(struct request_queue *q, const char *page, ssize_t ret; s64 val; - rwb = q->rq_wb; - if (!rwb) - return -EINVAL; - ret = queue_var_store64(&val, page); if (ret < 0) return ret; + if (val < -1) + return -EINVAL; + + rwb = q->rq_wb; + if (!rwb) { + ret = wbt_init(q); + if (ret) + return ret; + + rwb = q->rq_wb; + if (!rwb) + return -EINVAL; + } if (val == -1) rwb->min_lat_nsec = wbt_default_latency_nsec(q); else if (val >= 0) rwb->min_lat_nsec = val * 1000ULL; - else - return -EINVAL; + + if (rwb->enable_state == WBT_STATE_ON_DEFAULT) + rwb->enable_state = WBT_STATE_ON_MANUAL; wbt_update_limits(rwb); return count; -- cgit v1.2.3