Add an additional arg to __folio_end_writeback() that takes in the number of pages that were written back. Signed-off-by: Joanne Koong --- mm/filemap.c | 2 +- mm/internal.h | 2 +- mm/page-writeback.c | 13 ++++++------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 751838ef05e5..cbfb0f085eb6 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1657,7 +1657,7 @@ void folio_end_writeback(struct folio *folio) * reused before the folio_wake_bit(). */ folio_get(folio); - if (__folio_end_writeback(folio)) + if (__folio_end_writeback(folio, folio_nr_pages(folio))) folio_wake_bit(folio, PG_writeback); filemap_end_dropbehind_write(folio); diff --git a/mm/internal.h b/mm/internal.h index 45b725c3dc03..2eb156823d45 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -438,7 +438,7 @@ static inline vm_fault_t vmf_anon_prepare(struct vm_fault *vmf) vm_fault_t do_swap_page(struct vm_fault *vmf); void folio_rotate_reclaimable(struct folio *folio); -bool __folio_end_writeback(struct folio *folio); +bool __folio_end_writeback(struct folio *folio, long nr_pages); void deactivate_file_folio(struct folio *folio); void folio_activate(struct folio *folio); diff --git a/mm/page-writeback.c b/mm/page-writeback.c index d1b2c91f0619..65002552458a 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -3006,9 +3006,8 @@ static void wb_inode_writeback_end(struct bdi_writeback *wb) spin_unlock_irqrestore(&wb->work_lock, flags); } -bool __folio_end_writeback(struct folio *folio) +bool __folio_end_writeback(struct folio *folio, long nr_pages) { - long nr = folio_nr_pages(folio); struct address_space *mapping = folio_mapping(folio); bool ret; @@ -3022,8 +3021,8 @@ bool __folio_end_writeback(struct folio *folio) __xa_clear_mark(&mapping->i_pages, folio_index(folio), PAGECACHE_TAG_WRITEBACK); - wb_stat_mod(wb, WB_WRITEBACK, -nr); - __wb_writeout_add(wb, nr); + wb_stat_mod(wb, WB_WRITEBACK, -nr_pages); + __wb_writeout_add(wb, nr_pages); if (!mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK)) { wb_inode_writeback_end(wb); if (mapping->host) @@ -3035,9 +3034,9 @@ bool __folio_end_writeback(struct folio *folio) ret = folio_xor_flags_has_waiters(folio, 1 << PG_writeback); } - lruvec_stat_mod_folio(folio, NR_WRITEBACK, -nr); - zone_stat_mod_folio(folio, NR_ZONE_WRITE_PENDING, -nr); - node_stat_mod_folio(folio, NR_WRITTEN, nr); + lruvec_stat_mod_folio(folio, NR_WRITEBACK, -nr_pages); + zone_stat_mod_folio(folio, NR_ZONE_WRITE_PENDING, -nr_pages); + node_stat_mod_folio(folio, NR_WRITTEN, nr_pages); return ret; } -- 2.47.3