]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mm: use zone lock guard in unset_migratetype_isolate()
authorDmitry Ilvokhin <d@ilvokhin.com>
Wed, 29 Apr 2026 12:02:07 +0000 (12:02 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 29 May 2026 04:05:04 +0000 (21:05 -0700)
Use spinlock_irqsave zone lock guard in unset_migratetype_isolate() to
replace the explicit lock/unlock and goto pattern with automatic
scope-based cleanup.

Link: https://lore.kernel.org/815c0905ea77828ed32bf56ff0a6d3c6548eb3a2.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>
Acked-by: Zi Yan <ziy@nvidia.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>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/page_isolation.c

index c48ff5c00244928fd49e485b7453baa06a93db8f..9d606052dd809f168712712d1b4751a47a5258fa 100644 (file)
@@ -223,15 +223,14 @@ static int set_migratetype_isolate(struct page *page, enum pb_isolate_mode mode,
 static void unset_migratetype_isolate(struct page *page)
 {
        struct zone *zone;
-       unsigned long flags;
        bool isolated_page = false;
        unsigned int order;
        struct page *buddy;
 
        zone = page_zone(page);
-       spin_lock_irqsave(&zone->lock, flags);
+       guard(spinlock_irqsave)(&zone->lock);
        if (!is_migrate_isolate_page(page))
-               goto out;
+               return;
 
        /*
         * Because freepage with more than pageblock_order on isolated
@@ -279,8 +278,6 @@ static void unset_migratetype_isolate(struct page *page)
                __putback_isolated_page(page, order, get_pageblock_migratetype(page));
        }
        zone->nr_isolate_pageblock--;
-out:
-       spin_unlock_irqrestore(&zone->lock, flags);
 }
 
 static inline struct page *