Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mm/memcontrol: remove __mod_lruvec_page_state()

There are no more callers of __mod_lruvec_page_state(), so convert the
implementation to __lruvec_stat_mod_folio(), removing two calls to
compound_head() (one explicit, one hidden inside page_memcg()).

Link: https://lkml.kernel.org/r/20231228085748.1083901-7-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Zi Yan <ziy@nvidia.com>
Acked-by: Shakeel Butt <shakeelb@google.com>
Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Matthew Wilcox (Oracle) and committed by
Andrew Morton
c701123b b54d60b1

+22 -23
+18 -18
include/linux/vmstat.h
··· 556 556 local_irq_restore(flags); 557 557 } 558 558 559 - void __mod_lruvec_page_state(struct page *page, 559 + void __lruvec_stat_mod_folio(struct folio *folio, 560 560 enum node_stat_item idx, int val); 561 561 562 - static inline void mod_lruvec_page_state(struct page *page, 562 + static inline void lruvec_stat_mod_folio(struct folio *folio, 563 563 enum node_stat_item idx, int val) 564 564 { 565 565 unsigned long flags; 566 566 567 567 local_irq_save(flags); 568 - __mod_lruvec_page_state(page, idx, val); 568 + __lruvec_stat_mod_folio(folio, idx, val); 569 569 local_irq_restore(flags); 570 + } 571 + 572 + static inline void mod_lruvec_page_state(struct page *page, 573 + enum node_stat_item idx, int val) 574 + { 575 + lruvec_stat_mod_folio(page_folio(page), idx, val); 570 576 } 571 577 572 578 #else ··· 589 583 mod_node_page_state(lruvec_pgdat(lruvec), idx, val); 590 584 } 591 585 592 - static inline void __mod_lruvec_page_state(struct page *page, 593 - enum node_stat_item idx, int val) 586 + static inline void __lruvec_stat_mod_folio(struct folio *folio, 587 + enum node_stat_item idx, int val) 594 588 { 595 - __mod_node_page_state(page_pgdat(page), idx, val); 589 + __mod_node_page_state(folio_pgdat(folio), idx, val); 590 + } 591 + 592 + static inline void lruvec_stat_mod_folio(struct folio *folio, 593 + enum node_stat_item idx, int val) 594 + { 595 + mod_node_page_state(folio_pgdat(folio), idx, val); 596 596 } 597 597 598 598 static inline void mod_lruvec_page_state(struct page *page, ··· 608 596 } 609 597 610 598 #endif /* CONFIG_MEMCG */ 611 - 612 - static inline void __lruvec_stat_mod_folio(struct folio *folio, 613 - enum node_stat_item idx, int val) 614 - { 615 - __mod_lruvec_page_state(&folio->page, idx, val); 616 - } 617 599 618 600 static inline void __lruvec_stat_add_folio(struct folio *folio, 619 601 enum node_stat_item idx) ··· 619 613 enum node_stat_item idx) 620 614 { 621 615 __lruvec_stat_mod_folio(folio, idx, -folio_nr_pages(folio)); 622 - } 623 - 624 - static inline void lruvec_stat_mod_folio(struct folio *folio, 625 - enum node_stat_item idx, int val) 626 - { 627 - mod_lruvec_page_state(&folio->page, idx, val); 628 616 } 629 617 630 618 static inline void lruvec_stat_add_folio(struct folio *folio,
+4 -5
mm/memcontrol.c
··· 890 890 __mod_memcg_lruvec_state(lruvec, idx, val); 891 891 } 892 892 893 - void __mod_lruvec_page_state(struct page *page, enum node_stat_item idx, 893 + void __lruvec_stat_mod_folio(struct folio *folio, enum node_stat_item idx, 894 894 int val) 895 895 { 896 - struct page *head = compound_head(page); /* rmap on tail pages */ 897 896 struct mem_cgroup *memcg; 898 - pg_data_t *pgdat = page_pgdat(page); 897 + pg_data_t *pgdat = folio_pgdat(folio); 899 898 struct lruvec *lruvec; 900 899 901 900 rcu_read_lock(); 902 - memcg = page_memcg(head); 901 + memcg = folio_memcg(folio); 903 902 /* Untracked pages have no memcg, no lruvec. Update only the node */ 904 903 if (!memcg) { 905 904 rcu_read_unlock(); ··· 910 911 __mod_lruvec_state(lruvec, idx, val); 911 912 rcu_read_unlock(); 912 913 } 913 - EXPORT_SYMBOL(__mod_lruvec_page_state); 914 + EXPORT_SYMBOL(__lruvec_stat_mod_folio); 914 915 915 916 void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val) 916 917 {