X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;ds=sidebyside;f=mm%2Fpage-writeback.c;h=9f459f7f8f8312b762cf2222927f39f10e023de6;hb=04094226d6ce8c0cb590891e13872109aa6722f1;hp=7e2da284e427188aafefe15b0d6b0f0c6ec80544;hpb=7a3ecddc571cc3294e5d6bb5948ff2b0cfa12735;p=linux-2.6-microblaze.git 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);