aboutsummaryrefslogtreecommitdiffstats
diff options
authorDmitry Ilvokhin <d@ilvokhin.com>2026-04-29 12:02:11 +0000
committerAndrew Morton <akpm@linux-foundation.org>2026-05-28 21:05:05 -0700
commit5e22451096cd65ded8a7550fb324c8e6dc3b2b22 (patch)
treef8a8b7b0ed8eea412fd5bf7ce4cd2ac7259c9678
parentee8a0c15c26f6cf67e4e5207cb18e6262d7e886e (diff)
downloadlinux-next-history-5e22451096cd65ded8a7550fb324c8e6dc3b2b22.tar.gz
mm: use zone lock guard in put_page_back_buddy()
Use spinlock_irqsave zone lock guard in put_page_back_buddy() to replace the explicit lock/unlock pattern with automatic scope-based cleanup. Link: https://lore.kernel.org/b0fceedca37139da36aa626ac72eb9840b641021.1777462630.git.d@ilvokhin.com Signed-off-by: Dmitry Ilvokhin <d@ilvokhin.com> Suggested-by: Steven Rostedt <rostedt@goodmis.org> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Brendan Jackman <jackmanb@google.com> Cc: David Hildenbrand <david@kernel.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org> Cc: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--mm/page_alloc.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index f5ad74490c5d2..49711916703ea 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -7675,23 +7675,19 @@ bool take_page_off_buddy(struct page *page)
bool put_page_back_buddy(struct page *page)
{
struct zone *zone = page_zone(page);
- unsigned long flags;
- bool ret = false;
- spin_lock_irqsave(&zone->lock, flags);
+ guard(spinlock_irqsave)(&zone->lock);
if (put_page_testzero(page)) {
unsigned long pfn = page_to_pfn(page);
int migratetype = get_pfnblock_migratetype(page, pfn);
ClearPageHWPoisonTakenOff(page);
__free_one_page(page, pfn, zone, 0, migratetype, FPI_NONE);
- if (TestClearPageHWPoison(page)) {
- ret = true;
- }
+ if (TestClearPageHWPoison(page))
+ return true;
}
- spin_unlock_irqrestore(&zone->lock, flags);
- return ret;
+ return false;
}
#endif