]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm/memory-failure: pass the folio to collect_procs_ksm()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 12 Apr 2024 19:35:08 +0000 (20:35 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 6 May 2024 00:53:47 +0000 (17:53 -0700)
We've already calculated it, so pass it in instead of recalculating it in
collect_procs_ksm().

Link: https://lkml.kernel.org/r/20240412193510.2356957-12-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Jane Chu <jane.chu@oracle.com>
Reviewed-by: Miaohe Lin <linmiaohe@huawei.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Cc: Oscar Salvador <osalvador@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/ksm.h
mm/ksm.c
mm/memory-failure.c

index 358803cfd4d5eb9fca866e57d1ce95e99c212e7b..52c63a9c5a9cdf586f5e5b1545bcae5def078a3f 100644 (file)
@@ -81,15 +81,9 @@ struct folio *ksm_might_need_to_copy(struct folio *folio,
 
 void rmap_walk_ksm(struct folio *folio, struct rmap_walk_control *rwc);
 void folio_migrate_ksm(struct folio *newfolio, struct folio *folio);
-
-#ifdef CONFIG_MEMORY_FAILURE
-void collect_procs_ksm(struct page *page, struct list_head *to_kill,
-                      int force_early);
-#endif
-
-#ifdef CONFIG_PROC_FS
+void collect_procs_ksm(struct folio *folio, struct page *page,
+               struct list_head *to_kill, int force_early);
 long ksm_process_profit(struct mm_struct *);
-#endif /* CONFIG_PROC_FS */
 
 #else  /* !CONFIG_KSM */
 
@@ -120,12 +114,10 @@ static inline void ksm_might_unmap_zero_page(struct mm_struct *mm, pte_t pte)
 {
 }
 
-#ifdef CONFIG_MEMORY_FAILURE
-static inline void collect_procs_ksm(struct page *page,
+static inline void collect_procs_ksm(struct folio *folio, struct page *page,
                                     struct list_head *to_kill, int force_early)
 {
 }
-#endif
 
 #ifdef CONFIG_MMU
 static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
index 159604ad47799caabe4fd78c13d9eb4be8cfcda3..e1034bf1c937e9b58860cf99ac46f16b911fc4a2 100644 (file)
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -3178,12 +3178,11 @@ again:
 /*
  * Collect processes when the error hit an ksm page.
  */
-void collect_procs_ksm(struct page *page, struct list_head *to_kill,
-                      int force_early)
+void collect_procs_ksm(struct folio *folio, struct page *page,
+               struct list_head *to_kill, int force_early)
 {
        struct ksm_stable_node *stable_node;
        struct ksm_rmap_item *rmap_item;
-       struct folio *folio = page_folio(page);
        struct vm_area_struct *vma;
        struct task_struct *tsk;
 
index 498564f23abbfc23b9be6e837cb98b8cc9238d26..ec30611ec5ad0ebf77789e278cc6d2f9567ff30d 100644 (file)
@@ -729,7 +729,7 @@ static void collect_procs(struct folio *folio, struct page *page,
        if (!folio->mapping)
                return;
        if (unlikely(folio_test_ksm(folio)))
-               collect_procs_ksm(page, tokill, force_early);
+               collect_procs_ksm(folio, page, tokill, force_early);
        else if (folio_test_anon(folio))
                collect_procs_anon(folio, page, tokill, force_early);
        else