mm/writeback: Change __wb_writeout_inc() to __wb_writeout_add()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Sat, 20 Mar 2021 20:45:15 +0000 (16:45 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 18 Oct 2021 11:49:39 +0000 (07:49 -0400)
Allow for accounting N pages at once instead of one page at a time.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: David Howells <dhowells@redhat.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
mm/page-writeback.c

index cb7387d0e77ddc31da19467252a1507b39cf7a14..943cf74a76ed213e898dd7e795e57731d931cc2f 100644 (file)
@@ -562,12 +562,12 @@ static unsigned long wp_next_time(unsigned long cur_time)
        return cur_time;
 }
 
-static void wb_domain_writeout_inc(struct wb_domain *dom,
+static void wb_domain_writeout_add(struct wb_domain *dom,
                                   struct fprop_local_percpu *completions,
-                                  unsigned int max_prop_frac)
+                                  unsigned int max_prop_frac, long nr)
 {
        __fprop_add_percpu_max(&dom->completions, completions,
-                              max_prop_frac, 1);
+                              max_prop_frac, nr);
        /* First event after period switching was turned off? */
        if (unlikely(!dom->period_time)) {
                /*
@@ -585,18 +585,18 @@ static void wb_domain_writeout_inc(struct wb_domain *dom,
  * Increment @wb's writeout completion count and the global writeout
  * completion count. Called from test_clear_page_writeback().
  */
-static inline void __wb_writeout_inc(struct bdi_writeback *wb)
+static inline void __wb_writeout_add(struct bdi_writeback *wb, long nr)
 {
        struct wb_domain *cgdom;
 
-       inc_wb_stat(wb, WB_WRITTEN);
-       wb_domain_writeout_inc(&global_wb_domain, &wb->completions,
-                              wb->bdi->max_prop_frac);
+       wb_stat_mod(wb, WB_WRITTEN, nr);
+       wb_domain_writeout_add(&global_wb_domain, &wb->completions,
+                              wb->bdi->max_prop_frac, nr);
 
        cgdom = mem_cgroup_wb_domain(wb);
        if (cgdom)
-               wb_domain_writeout_inc(cgdom, wb_memcg_completions(wb),
-                                      wb->bdi->max_prop_frac);
+               wb_domain_writeout_add(cgdom, wb_memcg_completions(wb),
+                                      wb->bdi->max_prop_frac, nr);
 }
 
 void wb_writeout_inc(struct bdi_writeback *wb)
@@ -604,7 +604,7 @@ void wb_writeout_inc(struct bdi_writeback *wb)
        unsigned long flags;
 
        local_irq_save(flags);
-       __wb_writeout_inc(wb);
+       __wb_writeout_add(wb, 1);
        local_irq_restore(flags);
 }
 EXPORT_SYMBOL_GPL(wb_writeout_inc);
@@ -2786,7 +2786,7 @@ int test_clear_page_writeback(struct page *page)
                                struct bdi_writeback *wb = inode_to_wb(inode);
 
                                dec_wb_stat(wb, WB_WRITEBACK);
-                               __wb_writeout_inc(wb);
+                               __wb_writeout_add(wb, 1);
                                if (!mapping_tagged(mapping,
                                                    PAGECACHE_TAG_WRITEBACK))
                                        wb_inode_writeback_end(wb);