diff options
author | Paolo Valente <paolo.valente@linaro.org> | 2018-03-26 16:06:24 +0200 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-03-26 18:18:27 +0200 |
commit | bc56e2cafa3f80954a278d74bd18349ac3cb8fa5 (patch) | |
tree | bf66485253e3055c244b2475c063e66b90657bc3 /block/bfq-iosched.h | |
parent | nvme: make nvme_get_log_ext non-static (diff) | |
download | linux-bc56e2cafa3f80954a278d74bd18349ac3cb8fa5.tar.xz linux-bc56e2cafa3f80954a278d74bd18349ac3cb8fa5.zip |
block, bfq: lower-bound the estimated peak rate to 1
If a storage device handled by BFQ happens to be slower than 7.5 KB/s
for a certain amount of time (in the order of a second), then the
estimated peak rate of the device, maintained in BFQ, becomes equal to
0. The reason is the limited precision with which the rate is
represented (details on the range of representable values in the
comments introduced by this commit). This leads to a division-by-zero
error where the estimated peak rate is used as divisor. Such a type of
failure has been reported in [1].
This commit addresses this issue by:
1. Lower-bounding the estimated peak rate to 1
2. Adding and improving comments on the range of rates representable
[1] https://www.spinics.net/lists/kernel/msg2739205.html
Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to '')
-rw-r--r-- | block/bfq-iosched.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/block/bfq-iosched.h b/block/bfq-iosched.h index 350c39ae2896..ae2f3dadec44 100644 --- a/block/bfq-iosched.h +++ b/block/bfq-iosched.h @@ -499,7 +499,7 @@ struct bfq_data { u64 delta_from_first; /* * Current estimate of the device peak rate, measured in - * [BFQ_RATE_SHIFT * sectors/usec]. The left-shift by + * [(sectors/usec) / 2^BFQ_RATE_SHIFT]. The left-shift by * BFQ_RATE_SHIFT is performed to increase precision in * fixed-point calculations. */ |