* [PATCH] mm/mlock: abstract a function to decide whether necessary to drain mlock_pvec
@ 2022-04-22 2:20 Wei Yang
2022-04-22 2:39 ` Matthew Wilcox
0 siblings, 1 reply; 2+ messages in thread
From: Wei Yang @ 2022-04-22 2:20 UTC (permalink / raw)
To: akpm; +Cc: linux-mm, Wei Yang, Matthew Wilcox, Hugh Dickins
Just like the function pagevec_add_and_need_flush does, we can abstract
a function mlock_add_and_need_flush to decide whether it is necessary to
drain mlock_pvec.
No functional change is expected.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
CC: Matthew Wilcox (Oracle) <willy@infradead.org>
CC: Hugh Dickins <hughd@google.com>
---
mm/mlock.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/mm/mlock.c b/mm/mlock.c
index efd2dd2943de..26125d733934 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -169,6 +169,24 @@ static inline struct page *mlock_new(struct page *page)
return (struct page *)((unsigned long)page + NEW_PAGE);
}
+static inline struct page *mlock_dummy(struct page *page)
+{
+ return page;
+}
+
+/* return true if mlock_pvec needs to drain */
+static bool mlock_add_and_need_flush(struct pagevec *pvec, struct folio *folio,
+ struct page *(*mlock)(struct page *page))
+{
+ bool ret = false;
+
+ if (!pagevec_add(pvec, mlock(&folio->page)) ||
+ folio_test_large(folio) || lru_cache_disabled())
+ ret = true;
+
+ return ret;
+}
+
/*
* mlock_pagevec() is derived from pagevec_lru_move_fn():
* perhaps that can make use of such page pointer flags in future,
@@ -233,8 +251,7 @@ void mlock_folio(struct folio *folio)
}
folio_get(folio);
- if (!pagevec_add(pvec, mlock_lru(&folio->page)) ||
- folio_test_large(folio) || lru_cache_disabled())
+ if (mlock_add_and_need_flush(pvec, folio, mlock_lru))
mlock_pagevec(pvec);
put_cpu_var(mlock_pvec);
}
@@ -253,8 +270,7 @@ void mlock_new_page(struct page *page)
__count_vm_events(UNEVICTABLE_PGMLOCKED, nr_pages);
get_page(page);
- if (!pagevec_add(pvec, mlock_new(page)) ||
- PageHead(page) || lru_cache_disabled())
+ if (mlock_add_and_need_flush(pvec, page_folio(page), mlock_new))
mlock_pagevec(pvec);
put_cpu_var(mlock_pvec);
}
@@ -273,8 +289,7 @@ void munlock_page(struct page *page)
*/
get_page(page);
- if (!pagevec_add(pvec, page) ||
- PageHead(page) || lru_cache_disabled())
+ if (mlock_add_and_need_flush(pvec, page_folio(page), mlock_dummy))
mlock_pagevec(pvec);
put_cpu_var(mlock_pvec);
}
--
2.33.1
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH] mm/mlock: abstract a function to decide whether necessary to drain mlock_pvec
2022-04-22 2:20 [PATCH] mm/mlock: abstract a function to decide whether necessary to drain mlock_pvec Wei Yang
@ 2022-04-22 2:39 ` Matthew Wilcox
0 siblings, 0 replies; 2+ messages in thread
From: Matthew Wilcox @ 2022-04-22 2:39 UTC (permalink / raw)
To: Wei Yang; +Cc: akpm, linux-mm, Hugh Dickins
On Fri, Apr 22, 2022 at 02:20:59AM +0000, Wei Yang wrote:
> Just like the function pagevec_add_and_need_flush does, we can abstract
> a function mlock_add_and_need_flush to decide whether it is necessary to
> drain mlock_pvec.
>
> No functional change is expected.
>
> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
> CC: Matthew Wilcox (Oracle) <willy@infradead.org>
> CC: Hugh Dickins <hughd@google.com>
> ---
> mm/mlock.c | 27 +++++++++++++++++++++------
> 1 file changed, 21 insertions(+), 6 deletions(-)
This seems like a needless abstraction to me that makes understanding
the code flow harder, not simpler.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-04-22 2:39 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-22 2:20 [PATCH] mm/mlock: abstract a function to decide whether necessary to drain mlock_pvec Wei Yang
2022-04-22 2:39 ` Matthew Wilcox
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox