]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
writeback: factor out wb_dirty_exceeded to remove repeated code
authorKemeng Shi <shikemeng@huaweicloud.com>
Tue, 14 May 2024 12:52:53 +0000 (20:52 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 4 Jul 2024 02:29:54 +0000 (19:29 -0700)
Factor out wb_dirty_exceeded to remove repeated code

Link: https://lkml.kernel.org/r/20240514125254.142203-8-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Acked-by: Tejun Heo <tj@kernel.org>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/page-writeback.c

index e03beb95a62e79f7056cc53e1c65cb93a00edd0e..bf050abd9053aa3ed02dd3a1932fb4d42badd626 100644 (file)
@@ -140,6 +140,7 @@ struct dirty_throttle_control {
 
        unsigned long           pos_ratio;
        bool                    freerun;
+       bool                    dirty_exceeded;
 };
 
 /*
@@ -1775,6 +1776,13 @@ static void wb_dirty_freerun(struct dirty_throttle_control *dtc,
                       dirty_freerun_ceiling(dtc->wb_thresh, dtc->wb_bg_thresh);
 }
 
+static inline void wb_dirty_exceeded(struct dirty_throttle_control *dtc,
+                                    bool strictlimit)
+{
+       dtc->dirty_exceeded = (dtc->wb_dirty > dtc->wb_thresh) &&
+               ((dtc->dirty > dtc->thresh) || strictlimit);
+}
+
 /*
  * 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
@@ -1797,7 +1805,6 @@ static int balance_dirty_pages(struct bdi_writeback *wb,
        long max_pause;
        long min_pause;
        int nr_dirtied_pause;
-       bool dirty_exceeded = false;
        unsigned long task_ratelimit;
        unsigned long dirty_ratelimit;
        struct backing_dev_info *bdi = wb->bdi;
@@ -1866,9 +1873,7 @@ free_running:
                if (gdtc->freerun)
                        goto free_running;
 
-               dirty_exceeded = (gdtc->wb_dirty > gdtc->wb_thresh) &&
-                       ((gdtc->dirty > gdtc->thresh) || strictlimit);
-
+               wb_dirty_exceeded(gdtc, strictlimit);
                wb_position_ratio(gdtc);
                sdtc = gdtc;
 
@@ -1883,17 +1888,14 @@ free_running:
                        if (mdtc->freerun)
                                goto free_running;
 
-                       dirty_exceeded |= (mdtc->wb_dirty > mdtc->wb_thresh) &&
-                               ((mdtc->dirty > mdtc->thresh) || strictlimit);
-
+                       wb_dirty_exceeded(mdtc, strictlimit);
                        wb_position_ratio(mdtc);
                        if (mdtc->pos_ratio < gdtc->pos_ratio)
                                sdtc = mdtc;
                }
 
-               if (dirty_exceeded != wb->dirty_exceeded)
-                       wb->dirty_exceeded = dirty_exceeded;
-
+               wb->dirty_exceeded = gdtc->dirty_exceeded ||
+                                    (mdtc && mdtc->dirty_exceeded);
                if (time_is_before_jiffies(READ_ONCE(wb->bw_time_stamp) +
                                           BANDWIDTH_INTERVAL))
                        __wb_update_bandwidth(gdtc, mdtc, true);