aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChen Wandun <chenwandun@huawei.com>2022-04-28 23:15:57 -0700
committerakpm <akpm@linux-foundation.org>2022-04-28 23:15:57 -0700
commit21f0dd88f23dc9dc46b781f8ec9acf975dca4e6e (patch)
tree8c9d6dc292a5720ebf79856a45db17059901148b
parenttools/vm/page_owner_sort.c: avoid repeated judgments (diff)
downloadlinux-dev-21f0dd88f23dc9dc46b781f8ec9acf975dca4e6e.tar.xz
linux-dev-21f0dd88f23dc9dc46b781f8ec9acf975dca4e6e.zip
mm: rework calculation of bdi_min_ratio in bdi_set_min_ratio
In function bdi_set_min_ratio, min_ratio is unsigned int, it will result underflow when setting min_ratio below bdi->min_ratio, it is confusing. Rework it, no functional change. Link: https://lkml.kernel.org/r/20220422095159.2858305-1-chenwandun@huawei.com Signed-off-by: Chen Wandun <chenwandun@huawei.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Jens Axboe <axboe@kernel.dk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--mm/page-writeback.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 7e2da284e427..9f459f7f8f83 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -650,18 +650,25 @@ static unsigned int bdi_min_ratio;
int bdi_set_min_ratio(struct backing_dev_info *bdi, unsigned int min_ratio)
{
+ unsigned int delta;
int ret = 0;
spin_lock_bh(&bdi_lock);
if (min_ratio > bdi->max_ratio) {
ret = -EINVAL;
} else {
- min_ratio -= bdi->min_ratio;
- if (bdi_min_ratio + min_ratio < 100) {
- bdi_min_ratio += min_ratio;
- bdi->min_ratio += min_ratio;
+ if (min_ratio < bdi->min_ratio) {
+ delta = bdi->min_ratio - min_ratio;
+ bdi_min_ratio -= delta;
+ bdi->min_ratio = min_ratio;
} else {
- ret = -EINVAL;
+ delta = min_ratio - bdi->min_ratio;
+ if (bdi_min_ratio + delta < 100) {
+ bdi_min_ratio += delta;
+ bdi->min_ratio = min_ratio;
+ } else {
+ ret = -EINVAL;
+ }
}
}
spin_unlock_bh(&bdi_lock);