]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mm: use zone lock guard in unreserve_highatomic_pageblock()
authorDmitry Ilvokhin <d@ilvokhin.com>
Wed, 29 Apr 2026 12:02:08 +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 unreserve_highatomic_pageblock()
to replace the explicit lock/unlock pattern with automatic scope-based
cleanup.

Link: https://lore.kernel.org/69db814cd178915cb5615334a29304678f960963.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>
mm/page_alloc.c

index 36d37e9ff3b97fdaf942fcef31d6543be08773b3..56ba22e1a81699eb4c19925b4e9055f3b6ef3a1c 100644 (file)
@@ -3491,7 +3491,6 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac,
                                                bool force)
 {
        struct zonelist *zonelist = ac->zonelist;
-       unsigned long flags;
        struct zoneref *z;
        struct zone *zone;
        struct page *page;
@@ -3508,7 +3507,7 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac,
                                        pageblock_nr_pages)
                        continue;
 
-               spin_lock_irqsave(&zone->lock, flags);
+               guard(spinlock_irqsave)(&zone->lock);
                for (order = 0; order < NR_PAGE_ORDERS; order++) {
                        struct free_area *area = &(zone->free_area[order]);
                        unsigned long size;
@@ -3555,12 +3554,9 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac,
                         * so this should not fail on zone boundaries.
                         */
                        WARN_ON_ONCE(ret == -1);
-                       if (ret > 0) {
-                               spin_unlock_irqrestore(&zone->lock, flags);
+                       if (ret > 0)
                                return ret;
-                       }
                }
-               spin_unlock_irqrestore(&zone->lock, flags);
        }
 
        return false;