diff options
author | Baolin Wang <baolin.wang@linux.alibaba.com> | 2020-10-08 11:52:25 +0800 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-10-08 08:01:38 -0600 |
commit | 5b7048b89745c3c5fb4b3080fb7bced61dba2a2b (patch) | |
tree | 42f5930231ace93e1cb02357fecbe6f67fa17593 /block/blk-throttle.c | |
parent | b185efa78bf9f13e32f115169e4ab35e68993461 (diff) | |
download | lwn-5b7048b89745c3c5fb4b3080fb7bced61dba2a2b.tar.gz lwn-5b7048b89745c3c5fb4b3080fb7bced61dba2a2b.zip |
blk-throttle: Fix IO hang for a corner case
It can not scale up in throtl_adjusted_limit() if we set bps or iops is
1, which will cause IO hang when enable low limit. Thus we should treat
1 as a illegal value to avoid this issue.
Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-throttle.c')
-rw-r--r-- | block/blk-throttle.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/block/blk-throttle.c b/block/blk-throttle.c index b0d8f7cc5e92..0649bceebf35 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c @@ -1687,13 +1687,13 @@ static ssize_t tg_set_limit(struct kernfs_open_file *of, goto out_finish; ret = -EINVAL; - if (!strcmp(tok, "rbps")) + if (!strcmp(tok, "rbps") && val > 1) v[0] = val; - else if (!strcmp(tok, "wbps")) + else if (!strcmp(tok, "wbps") && val > 1) v[1] = val; - else if (!strcmp(tok, "riops")) + else if (!strcmp(tok, "riops") && val > 1) v[2] = min_t(u64, val, UINT_MAX); - else if (!strcmp(tok, "wiops")) + else if (!strcmp(tok, "wiops") && val > 1) v[3] = min_t(u64, val, UINT_MAX); else if (off == LIMIT_LOW && !strcmp(tok, "idle")) idle_time = val; |