Move logic for clearing dirty stats into a helper function both folio_account_cleaned() and __folio_clear_dirty_for_io() invoke. Signed-off-by: Joanne Koong Reviewed-by: Jeff Layton --- mm/page-writeback.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 294339887e55..e0410cfbe480 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -2701,6 +2701,14 @@ static void folio_account_dirtied(struct folio *folio, } } +static void __clear_dirty_for_io_stats(struct folio *folio, + struct bdi_writeback *wb, long nr_pages) +{ + lruvec_stat_mod_folio(folio, NR_FILE_DIRTY, -nr_pages); + zone_stat_mod_folio(folio, NR_ZONE_WRITE_PENDING, -nr_pages); + wb_stat_mod(wb, WB_RECLAIMABLE, -nr_pages); +} + /* * Helper function for deaccounting dirty page without writeback. * @@ -2709,9 +2717,7 @@ void folio_account_cleaned(struct folio *folio, struct bdi_writeback *wb) { long nr = folio_nr_pages(folio); - lruvec_stat_mod_folio(folio, NR_FILE_DIRTY, -nr); - zone_stat_mod_folio(folio, NR_ZONE_WRITE_PENDING, -nr); - wb_stat_mod(wb, WB_RECLAIMABLE, -nr); + __clear_dirty_for_io_stats(folio, wb, nr); task_io_account_cancelled_write(nr * PAGE_SIZE); } @@ -3005,14 +3011,9 @@ static bool __folio_clear_dirty_for_io(struct folio *folio, bool update_stats) */ wb = unlocked_inode_to_wb_begin(inode, &cookie); if (folio_test_clear_dirty(folio)) { - if (update_stats) { - long nr = folio_nr_pages(folio); - lruvec_stat_mod_folio(folio, NR_FILE_DIRTY, - -nr); - zone_stat_mod_folio(folio, - NR_ZONE_WRITE_PENDING, -nr); - wb_stat_mod(wb, WB_RECLAIMABLE, -nr); - } + if (update_stats) + __clear_dirty_for_io_stats(folio, wb, + folio_nr_pages(folio)); ret = true; } unlocked_inode_to_wb_end(inode, &cookie); -- 2.47.3