mm: Move updates of dirty_exceeded into one place
authorJan Kara <jack@suse.cz>
Thu, 23 Jun 2022 17:51:45 +0000 (10:51 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 25 Jul 2022 00:39:31 +0000 (18:39 -0600)
Transition of wb->dirty_exceeded from 0 to 1 happens before we go to
sleep in balance_dirty_pages() while transition from 1 to 0 happens when
exiting from balance_dirty_pages(), possibly based on old values. This
does not make a lot of sense since wb->dirty_exceeded should simply
reflect whether wb is over dirty limit and so we should ratelimit
entering to balance_dirty_pages() less. Move the two updates together.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Stefan Roesch <shr@fb.com>
Link: https://lore.kernel.org/r/20220623175157.1715274-3-shr@fb.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
mm/page-writeback.c

index e59c523..90b1998 100644 (file)
@@ -1729,8 +1729,8 @@ free_running:
                                sdtc = mdtc;
                }
 
-               if (dirty_exceeded && !wb->dirty_exceeded)
-                       wb->dirty_exceeded = 1;
+               if (dirty_exceeded != wb->dirty_exceeded)
+                       wb->dirty_exceeded = dirty_exceeded;
 
                if (time_is_before_jiffies(READ_ONCE(wb->bw_time_stamp) +
                                           BANDWIDTH_INTERVAL))
@@ -1834,9 +1834,6 @@ pause:
                if (fatal_signal_pending(current))
                        break;
        }
-
-       if (!dirty_exceeded && wb->dirty_exceeded)
-               wb->dirty_exceeded = 0;
 }
 
 static DEFINE_PER_CPU(int, bdp_ratelimits);