diff options
Diffstat (limited to 'drivers/xen/privcmd.c')
| -rw-r--r-- | drivers/xen/privcmd.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c index 8e74590fa1b..569a13b9e85 100644 --- a/drivers/xen/privcmd.c +++ b/drivers/xen/privcmd.c @@ -533,12 +533,17 @@ static void privcmd_close(struct vm_area_struct *vma)  {  	struct page **pages = vma->vm_private_data;  	int numpgs = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; +	int rc;  	if (!xen_feature(XENFEAT_auto_translated_physmap) || !numpgs || !pages)  		return; -	xen_unmap_domain_mfn_range(vma, numpgs, pages); -	free_xenballooned_pages(numpgs, pages); +	rc = xen_unmap_domain_mfn_range(vma, numpgs, pages); +	if (rc == 0) +		free_xenballooned_pages(numpgs, pages); +	else +		pr_crit("unable to unmap MFN range: leaking %d pages. rc=%d\n", +			numpgs, rc);  	kfree(pages);  }  | 
