summaryrefslogtreecommitdiffstats
path: root/block/blk-sysfs.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@fb.com>2016-11-28 09:22:47 -0700
committerJens Axboe <axboe@fb.com>2016-11-28 10:27:03 -0700
commit80e091d10e8bf7b801d634ea8870b9e907314424 (patch)
tree05d99a001b158de7e3f6f9eb119f28bb226b8bc2 /block/blk-sysfs.c
parentfeffa5cc7b47f38210d4997ceb3fe30881d6c337 (diff)
downloadlinux-stable-80e091d10e8bf7b801d634ea8870b9e907314424.tar.gz
linux-stable-80e091d10e8bf7b801d634ea8870b9e907314424.tar.bz2
linux-stable-80e091d10e8bf7b801d634ea8870b9e907314424.zip
blk-wbt: allow reset of default latency through sysfs
Allow a write of '-1' to reset the default latency target for a given device. This removes knowledge of the different default settings for rotational vs non-rotational from user space. Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/blk-sysfs.c')
-rw-r--r--block/blk-sysfs.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index 1855c6770045..f0ca569e276b 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -42,12 +42,12 @@ queue_var_store(unsigned long *var, const char *page, size_t count)
return count;
}
-static ssize_t queue_var_store64(u64 *var, const char *page)
+static ssize_t queue_var_store64(s64 *var, const char *page)
{
int err;
- u64 v;
+ s64 v;
- err = kstrtou64(page, 10, &v);
+ err = kstrtos64(page, 10, &v);
if (err < 0)
return err;
@@ -421,18 +421,26 @@ static ssize_t queue_wb_lat_show(struct request_queue *q, char *page)
static ssize_t queue_wb_lat_store(struct request_queue *q, const char *page,
size_t count)
{
+ struct rq_wb *rwb;
ssize_t ret;
- u64 val;
+ s64 val;
- if (!q->rq_wb)
+ rwb = q->rq_wb;
+ if (!rwb)
return -EINVAL;
ret = queue_var_store64(&val, page);
if (ret < 0)
return ret;
- q->rq_wb->min_lat_nsec = val * 1000ULL;
- wbt_update_limits(q->rq_wb);
+ 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;
+
+ wbt_update_limits(rwb);
return count;
}