Re: [PATCH v2 1/4] xen/balloon: fix accounting in alloc_xenballooned_pages error path

2020-07-24 Thread Jürgen Groß

On 24.07.20 14:42, Roger Pau Monne wrote:

target_unpopulated is incremented with nr_pages at the start of the
function, but the call to free_xenballooned_pages will only subtract
pgno number of pages, and thus the rest need to be subtracted before
returning or else accounting will be skewed.

Signed-off-by: Roger Pau Monné 


Reviewed-by: Juergen Gross 


Juergen


[PATCH v2 1/4] xen/balloon: fix accounting in alloc_xenballooned_pages error path

2020-07-24 Thread Roger Pau Monne
target_unpopulated is incremented with nr_pages at the start of the
function, but the call to free_xenballooned_pages will only subtract
pgno number of pages, and thus the rest need to be subtracted before
returning or else accounting will be skewed.

Signed-off-by: Roger Pau Monné 
Cc: sta...@vger.kernel.org
---
Cc: Boris Ostrovsky 
Cc: Juergen Gross 
Cc: Stefano Stabellini 
Cc: xen-de...@lists.xenproject.org
---
 drivers/xen/balloon.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
index 77c57568e5d7..3cb10ed32557 100644
--- a/drivers/xen/balloon.c
+++ b/drivers/xen/balloon.c
@@ -630,6 +630,12 @@ int alloc_xenballooned_pages(int nr_pages, struct page 
**pages)
  out_undo:
mutex_unlock(_mutex);
free_xenballooned_pages(pgno, pages);
+   /*
+* NB: free_xenballooned_pages will only subtract pgno pages, but since
+* target_unpopulated is incremented with nr_pages at the start we need
+* to remove the remaining ones also, or accounting will be screwed.
+*/
+   balloon_stats.target_unpopulated -= nr_pages - pgno;
return ret;
 }
 EXPORT_SYMBOL(alloc_xenballooned_pages);
-- 
2.27.0