diff mbox

xen/balloon: Only mark a page as managed when it is released

Message ID 1481303422-3733-1-git-send-email-ross.lagerwall@citrix.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ross Lagerwall Dec. 9, 2016, 5:10 p.m. UTC
Only mark a page as managed when it is released back to the allocator.
This ensures that the managed page count does not get falsely increased
when a VM is running. Correspondingly change it so that pages are
marked as unmanaged after getting them from the allocator.

Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
---
 drivers/xen/balloon.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Comments

Boris Ostrovsky Dec. 9, 2016, 6:15 p.m. UTC | #1
On 12/09/2016 12:10 PM, Ross Lagerwall wrote:
> Only mark a page as managed when it is released back to the allocator.
> This ensures that the managed page count does not get falsely increased
> when a VM is running. Correspondingly change it so that pages are
> marked as unmanaged after getting them from the allocator.
>
> Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
>


Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Jürgen Groß Dec. 12, 2016, 2:23 p.m. UTC | #2
On 09/12/16 18:10, Ross Lagerwall wrote:
> Only mark a page as managed when it is released back to the allocator.
> This ensures that the managed page count does not get falsely increased
> when a VM is running. Correspondingly change it so that pages are
> marked as unmanaged after getting them from the allocator.
> 
> Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>

Committed to xen/tip.git for-linus-4.10


Juergen
diff mbox

Patch

diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index e4db19e..db107fa 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -180,7 +180,6 @@  static void __balloon_append(struct page *page)
 static void balloon_append(struct page *page)
 {
 	__balloon_append(page);
-	adjust_managed_page_count(page, -1);
 }
 
 /* balloon_retrieve: rescue a page from the balloon, if it is not empty. */
@@ -201,8 +200,6 @@  static struct page *balloon_retrieve(bool require_lowmem)
 	else
 		balloon_stats.balloon_low--;
 
-	adjust_managed_page_count(page, 1);
-
 	return page;
 }
 
@@ -478,7 +475,7 @@  static enum bp_state increase_reservation(unsigned long nr_pages)
 #endif
 
 		/* Relinquish the page back to the allocator. */
-		__free_reserved_page(page);
+		free_reserved_page(page);
 	}
 
 	balloon_stats.current_pages += rc;
@@ -509,6 +506,7 @@  static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
 			state = BP_EAGAIN;
 			break;
 		}
+		adjust_managed_page_count(page, -1);
 		scrub_page(page);
 		list_add(&page->lru, &pages);
 	}