diff --git a/mm/page_owner.c b/mm/page_owner.c index bbec66cd1b72..ed437cbdb6ca 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -148,7 +148,7 @@ void __reset_page_owner(struct page *page, unsigned short order) return; page_owner = get_page_owner(page_ext); - alloc_handle = page_owner->handle; + alloc_handle = READ_ONCE(page_owner->handle); handle = save_stack(GFP_NOWAIT | __GFP_NOWARN); for (i = 0; i < (1 << order); i++) { @@ -159,7 +159,8 @@ void __reset_page_owner(struct page *page, unsigned short order) page_ext = page_ext_next(page_ext); } page_ext_put(page_ext); - stack_depot_dec_count(alloc_handle); + if (alloc_handle) + stack_depot_dec_count(alloc_handle); } static inline void __set_page_owner_handle(struct page_ext *page_ext,