From: Tang Yizhou <yizhou.tang@xxxxxxxxxx> In domain_dirty_limits(), the calculation of the thresh and bg_thresh variable needs to consider whether it's for global dirtypage writeback or memcg dirtypage writeback. However, in the rt_task branch, the accumulation of both variables only considers the global_wb_domain, which seems strange to me. I find the accumulation was introduced in the commit a53eaff8c119 ("MM: increase safety margin provided by PF_LESS_THROTTLE"). IMHO, realtime tasks are given a higher page cache limit because they require higher responsiveness, but we also need to consider whether the writeback of realtime tasks occurs in the global dirtypage writeback or in the memcg dirtypage writeback scenario. Later Neil said he didn't know what was wanted for realtime in the commit message of commit a37b0715ddf3 ("mm/writeback: replace PF_LESS_THROTTLE with PF_LOCAL_THROTTLE"). I guess he made this small mistake since the commit a53eaff8c119 ("MM: increase safety margin provided by PF_LESS_THROTTLE"). Fixes: a53eaff8c119 ("MM: increase safety margin provided by PF_LESS_THROTTLE") CC: NeilBrown <neilb@xxxxxxxx> CC: Tejun Heo <tj@xxxxxxxxxx> CC: Fengguang Wu <wufengguang@xxxxxxxxxx> Signed-off-by: Tang Yizhou <yizhou.tang@xxxxxxxxxx> --- v2: Rewrite the commit message. mm/page-writeback.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 516b1aa247e8..7d92de73360e 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -419,8 +419,8 @@ static void domain_dirty_limits(struct dirty_throttle_control *dtc) bg_thresh = thresh / 2; tsk = current; if (rt_task(tsk)) { - bg_thresh += bg_thresh / 4 + global_wb_domain.dirty_limit / 32; - thresh += thresh / 4 + global_wb_domain.dirty_limit / 32; + bg_thresh += bg_thresh / 4 + dtc_dom(dtc)->dirty_limit / 32; + thresh += thresh / 4 + dtc_dom(dtc)->dirty_limit / 32; } dtc->thresh = thresh; dtc->bg_thresh = bg_thresh; -- 2.25.1