Commit 8246291e authored by Kemeng Shi's avatar Kemeng Shi Committed by Andrew Morton

writeback: factor out balance_wb_limits to remove repeated code

Factor out balance_wb_limits to remove repeated code

[shikemeng@huaweicloud.com: add comment]
  Link: https://lkml.kernel.org/r/20240606033547.344376-1-shikemeng@huaweicloud.com
[akpm@linux-foundation.org: s/fileds/fields/ in comment]
Link: https://lkml.kernel.org/r/20240514125254.142203-9-shikemeng@huaweicloud.comSigned-off-by: default avatarKemeng Shi <shikemeng@huaweicloud.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 236d0f16
...@@ -1783,6 +1783,21 @@ static inline void wb_dirty_exceeded(struct dirty_throttle_control *dtc, ...@@ -1783,6 +1783,21 @@ static inline void wb_dirty_exceeded(struct dirty_throttle_control *dtc,
((dtc->dirty > dtc->thresh) || strictlimit); ((dtc->dirty > dtc->thresh) || strictlimit);
} }
/*
* The limits fields dirty_exceeded and pos_ratio won't be updated if wb is
* in freerun state. Please don't use these invalid fields in freerun case.
*/
static void balance_wb_limits(struct dirty_throttle_control *dtc,
bool strictlimit)
{
wb_dirty_freerun(dtc, strictlimit);
if (dtc->freerun)
return;
wb_dirty_exceeded(dtc, strictlimit);
wb_position_ratio(dtc);
}
/* /*
* balance_dirty_pages() must be called by processes which are generating dirty * balance_dirty_pages() must be called by processes which are generating dirty
* data. It looks at the number of dirty pages in the machine and will force * data. It looks at the number of dirty pages in the machine and will force
...@@ -1869,12 +1884,9 @@ static int balance_dirty_pages(struct bdi_writeback *wb, ...@@ -1869,12 +1884,9 @@ static int balance_dirty_pages(struct bdi_writeback *wb,
* Calculate global domain's pos_ratio and select the * Calculate global domain's pos_ratio and select the
* global dtc by default. * global dtc by default.
*/ */
wb_dirty_freerun(gdtc, strictlimit); balance_wb_limits(gdtc, strictlimit);
if (gdtc->freerun) if (gdtc->freerun)
goto free_running; goto free_running;
wb_dirty_exceeded(gdtc, strictlimit);
wb_position_ratio(gdtc);
sdtc = gdtc; sdtc = gdtc;
if (mdtc) { if (mdtc) {
...@@ -1884,12 +1896,9 @@ static int balance_dirty_pages(struct bdi_writeback *wb, ...@@ -1884,12 +1896,9 @@ static int balance_dirty_pages(struct bdi_writeback *wb,
* both global and memcg domains. Choose the one * both global and memcg domains. Choose the one
* w/ lower pos_ratio. * w/ lower pos_ratio.
*/ */
wb_dirty_freerun(mdtc, strictlimit); balance_wb_limits(mdtc, strictlimit);
if (mdtc->freerun) if (mdtc->freerun)
goto free_running; goto free_running;
wb_dirty_exceeded(mdtc, strictlimit);
wb_position_ratio(mdtc);
if (mdtc->pos_ratio < gdtc->pos_ratio) if (mdtc->pos_ratio < gdtc->pos_ratio)
sdtc = mdtc; sdtc = mdtc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment