lkml.org 
[lkml]   [2024]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] mm/memory-failure: remove shake_page()
Date
Use a folio in get_any_page() to save 5 calls to compound head and
convert the last user of shake_page() to shake_folio(). This allows us
to remove the shake_page() definition.

Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
---
mm/memory-failure.c | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 16ada4fb02b79..273f6fef29f25 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -385,11 +385,6 @@ void shake_folio(struct folio *folio)
}
EXPORT_SYMBOL_GPL(shake_folio);

-static void shake_page(struct page *page)
-{
- shake_folio(page_folio(page));
-}
-
static unsigned long dev_pagemap_mapping_shift(struct vm_area_struct *vma,
unsigned long address)
{
@@ -1433,6 +1428,7 @@ static int get_any_page(struct page *p, unsigned long flags)
{
int ret = 0, pass = 0;
bool count_increased = false;
+ struct folio *folio = page_folio(p);

if (flags & MF_COUNT_INCREASED)
count_increased = true;
@@ -1446,7 +1442,7 @@ static int get_any_page(struct page *p, unsigned long flags)
if (pass++ < 3)
goto try_again;
ret = -EBUSY;
- } else if (!PageHuge(p) && !is_free_buddy_page(p)) {
+ } else if (!folio_test_hugetlb(folio) && !is_free_buddy_page(p)) {
/* We raced with put_page, retry. */
if (pass++ < 3)
goto try_again;
@@ -1459,7 +1455,7 @@ static int get_any_page(struct page *p, unsigned long flags)
* page, retry.
*/
if (pass++ < 3) {
- shake_page(p);
+ shake_folio(folio);
goto try_again;
}
ret = -EIO;
@@ -1467,7 +1463,7 @@ static int get_any_page(struct page *p, unsigned long flags)
}
}

- if (PageHuge(p) || HWPoisonHandlable(p, flags)) {
+ if (folio_test_hugetlb(folio) || HWPoisonHandlable(p, flags)) {
ret = 1;
} else {
/*
@@ -1475,12 +1471,12 @@ static int get_any_page(struct page *p, unsigned long flags)
* it into something we can handle.
*/
if (pass++ < 3) {
- put_page(p);
- shake_page(p);
+ folio_put(folio);
+ shake_folio(folio);
count_increased = false;
goto try_again;
}
- put_page(p);
+ folio_put(folio);
ret = -EIO;
}
out:
@@ -1643,7 +1639,7 @@ static bool hwpoison_user_mappings(struct folio *folio, struct page *p,

/*
* try_to_unmap() might put mlocked page in lru cache, so call
- * shake_page() again to ensure that it's flushed.
+ * shake_folio() again to ensure that it's flushed.
*/
if (mlocked)
shake_folio(folio);
--
2.44.0

\
 
 \ /
  Last update: 2024-04-26 19:16    [W:0.057 / U:0.440 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site