When a balloon page marked PageZeroed is freed during migration,
use put_page_zeroed() to propagate the zeroed hint to the buddy
allocator. Previously the hint was silently lost via plain put_page().

Signed-off-by: Michael S. Tsirkin <[email protected]>
Assisted-by: Claude:claude-opus-4-6
---
 mm/balloon.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/mm/balloon.c b/mm/balloon.c
index 96a8f1e20bc6..1bf7eb2642a9 100644
--- a/mm/balloon.c
+++ b/mm/balloon.c
@@ -324,7 +324,12 @@ static int balloon_page_migrate(struct page *newpage, 
struct page *page,
        balloon_page_finalize(page);
        spin_unlock_irqrestore(&balloon_pages_lock, flags);
 
-       put_page(page);
+       if (PageZeroed(page)) {
+               __ClearPageZeroed(page);
+               put_page_zeroed(page);
+       } else {
+               put_page(page);
+       }
 
        return 0;
 }
-- 
MST


Reply via email to