diff options
Diffstat (limited to 'bfq-lock-division-zero.patch')
-rw-r--r-- | bfq-lock-division-zero.patch | 35 |
1 files changed, 0 insertions, 35 deletions
diff --git a/bfq-lock-division-zero.patch b/bfq-lock-division-zero.patch deleted file mode 100644 index e8d8727d5117..000000000000 --- a/bfq-lock-division-zero.patch +++ /dev/null @@ -1,35 +0,0 @@ -Rate should never overflow or become zero because it is used as divider. -This patch accumulates it with saturation. - -Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> ---- - block/bfq-iosched.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c -index aeca22d91101..a236c8d541b5 100644 ---- a/block/bfq-iosched.c -+++ b/block/bfq-iosched.c -@@ -2546,7 +2546,8 @@ static void bfq_reset_rate_computation(struct bfq_data *bfqd, - - static void bfq_update_rate_reset(struct bfq_data *bfqd, struct request *rq) - { -- u32 rate, weight, divisor; -+ u32 weight, divisor; -+ u64 rate; - - /* - * For the convergence property to hold (see comments on -@@ -2634,9 +2635,10 @@ static void bfq_update_rate_reset(struct bfq_data *bfqd, struct request *rq) - */ - bfqd->peak_rate *= divisor-1; - bfqd->peak_rate /= divisor; -- rate /= divisor; /* smoothing constant alpha = 1/divisor */ -+ do_div(rate, divisor); /* smoothing constant alpha = 1/divisor */ - -- bfqd->peak_rate += rate; -+ /* rate should never overlow or become zero */ -+ bfqd->peak_rate = clamp_t(u64, rate + bfqd->peak_rate, 1, U32_MAX); - update_thr_responsiveness_params(bfqd); - - reset_computation: |