]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
writeback: factor out balance_wb_limits to remove repeated code
authorKemeng Shi <shikemeng@huaweicloud.com>
Tue, 14 May 2024 12:52:54 +0000 (20:52 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 4 Jul 2024 02:29:54 +0000 (19:29 -0700)
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.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/page-writeback.c

index bf050abd9053aa3ed02dd3a1932fb4d42badd626..7168e25f88e5bf00fc899121514be29ff99718f1 100644 (file)
@@ -1783,6 +1783,21 @@ static inline void wb_dirty_exceeded(struct dirty_throttle_control *dtc,
                ((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
  * data.  It looks at the number of dirty pages in the machine and will force
@@ -1869,12 +1884,9 @@ free_running:
                 * Calculate global domain's pos_ratio and select the
                 * global dtc by default.
                 */
-               wb_dirty_freerun(gdtc, strictlimit);
+               balance_wb_limits(gdtc, strictlimit);
                if (gdtc->freerun)
                        goto free_running;
-
-               wb_dirty_exceeded(gdtc, strictlimit);
-               wb_position_ratio(gdtc);
                sdtc = gdtc;
 
                if (mdtc) {
@@ -1884,12 +1896,9 @@ free_running:
                         * both global and memcg domains.  Choose the one
                         * w/ lower pos_ratio.
                         */
-                       wb_dirty_freerun(mdtc, strictlimit);
+                       balance_wb_limits(mdtc, strictlimit);
                        if (mdtc->freerun)
                                goto free_running;
-
-                       wb_dirty_exceeded(mdtc, strictlimit);
-                       wb_position_ratio(mdtc);
                        if (mdtc->pos_ratio < gdtc->pos_ratio)
                                sdtc = mdtc;
                }