linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] xen-blkfront: free allocated page
@ 2012-11-16 18:26 Roger Pau Monne
  2012-11-16 18:26 ` [PATCH 2/2] xen-blkback: move free persistent grants code Roger Pau Monne
  0 siblings, 1 reply; 2+ messages in thread
From: Roger Pau Monne @ 2012-11-16 18:26 UTC (permalink / raw)
  To: xen-devel, linux-kernel, konrad.wilk; +Cc: Roger Pau Monne

Free the page allocated for the persistent grant.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
 drivers/block/xen-blkfront.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index f1de806..96e9b00 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -806,6 +806,7 @@ static void blkif_free(struct blkfront_info *info, int suspend)
 		all_gnts = llist_del_all(&info->persistent_gnts);
 		llist_for_each_entry(persistent_gnt, all_gnts, node) {
 			gnttab_end_foreign_access(persistent_gnt->gref, 0, 0UL);
+			__free_page(pfn_to_page(persistent_gnt->pfn));
 			kfree(persistent_gnt);
 		}
 		info->persistent_gnts_c = 0;
-- 
1.7.7.5 (Apple Git-26)


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH 2/2] xen-blkback: move free persistent grants code
  2012-11-16 18:26 [PATCH 1/2] xen-blkfront: free allocated page Roger Pau Monne
@ 2012-11-16 18:26 ` Roger Pau Monne
  0 siblings, 0 replies; 2+ messages in thread
From: Roger Pau Monne @ 2012-11-16 18:26 UTC (permalink / raw)
  To: xen-devel, linux-kernel, konrad.wilk; +Cc: Roger Pau Monne

Move the code that frees persistent grants from the red-black tree
to a function. This will make it easier for other consumers to move
this to a common place.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
 drivers/block/xen-blkback/blkback.c |   68 +++++++++++++++++++----------------
 1 files changed, 37 insertions(+), 31 deletions(-)

diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
index a059616..74374fb 100644
--- a/drivers/block/xen-blkback/blkback.c
+++ b/drivers/block/xen-blkback/blkback.c
@@ -212,6 +212,39 @@ static struct persistent_gnt *get_persistent_gnt(struct rb_root *root,
 	return NULL;
 }
 
+static void free_persistent_gnts(struct rb_root *root, unsigned int num)
+{
+	struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+	struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+	struct persistent_gnt *persistent_gnt;
+	int ret = 0;
+	int segs_to_unmap = 0;
+
+	foreach_grant(persistent_gnt, root, node) {
+		BUG_ON(persistent_gnt->handle ==
+			BLKBACK_INVALID_HANDLE);
+		gnttab_set_unmap_op(&unmap[segs_to_unmap],
+			(unsigned long) pfn_to_kaddr(page_to_pfn(
+				persistent_gnt->page)),
+			GNTMAP_host_map,
+			persistent_gnt->handle);
+
+		pages[segs_to_unmap] = persistent_gnt->page;
+		rb_erase(&persistent_gnt->node, root);
+		kfree(persistent_gnt);
+		num--;
+
+		if (++segs_to_unmap == BLKIF_MAX_SEGMENTS_PER_REQUEST ||
+			!rb_next(&persistent_gnt->node)) {
+			ret = gnttab_unmap_refs(unmap, NULL, pages,
+				segs_to_unmap);
+			BUG_ON(ret);
+			segs_to_unmap = 0;
+		}
+	}
+	BUG_ON(num != 0);
+}
+
 /*
  * Retrieve from the 'pending_reqs' a free pending_req structure to be used.
  */
@@ -358,11 +391,6 @@ int xen_blkif_schedule(void *arg)
 {
 	struct xen_blkif *blkif = arg;
 	struct xen_vbd *vbd = &blkif->vbd;
-	struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
-	struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
-	struct persistent_gnt *persistent_gnt;
-	int ret = 0;
-	int segs_to_unmap = 0;
 
 	xen_blkif_get(blkif);
 
@@ -391,34 +419,12 @@ int xen_blkif_schedule(void *arg)
 	}
 
 	/* Free all persistent grant pages */
-	if (!RB_EMPTY_ROOT(&blkif->persistent_gnts)) {
-		foreach_grant(persistent_gnt, &blkif->persistent_gnts, node) {
-			BUG_ON(persistent_gnt->handle ==
-				BLKBACK_INVALID_HANDLE);
-			gnttab_set_unmap_op(&unmap[segs_to_unmap],
-			    (unsigned long) pfn_to_kaddr(page_to_pfn(
-				persistent_gnt->page)),
-			    GNTMAP_host_map,
-			    persistent_gnt->handle);
-
-			pages[segs_to_unmap] = persistent_gnt->page;
-			rb_erase(&persistent_gnt->node,
-				&blkif->persistent_gnts);
-			kfree(persistent_gnt);
-			blkif->persistent_gnt_c--;
-
-			if (++segs_to_unmap == BLKIF_MAX_SEGMENTS_PER_REQUEST ||
-				!rb_next(&persistent_gnt->node)) {
-				ret = gnttab_unmap_refs(unmap, NULL, pages,
-							segs_to_unmap);
-				BUG_ON(ret);
-				segs_to_unmap = 0;
-			}
-		}
-	}
+	if (!RB_EMPTY_ROOT(&blkif->persistent_gnts))
+		free_persistent_gnts(&blkif->persistent_gnts,
+			blkif->persistent_gnt_c);
 
-	BUG_ON(blkif->persistent_gnt_c != 0);
 	BUG_ON(!RB_EMPTY_ROOT(&blkif->persistent_gnts));
+	blkif->persistent_gnt_c = 0;
 
 	if (log_stats)
 		print_stats(blkif);
-- 
1.7.7.5 (Apple Git-26)


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-11-16 18:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-16 18:26 [PATCH 1/2] xen-blkfront: free allocated page Roger Pau Monne
2012-11-16 18:26 ` [PATCH 2/2] xen-blkback: move free persistent grants code Roger Pau Monne

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).