diff options
author | Matt Rushton <mrushton@amazon.com> | 2014-02-04 05:26:12 -0500 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2014-02-07 12:58:18 -0500 |
commit | 2ed22e3c3bec5b92b9aba4afdef0cc5e6d859a11 (patch) | |
tree | 2f8931eda57be083e4270279f37d7781591bbd48 | |
parent | 802eee95bde72fd0cd0f3a5b2098375a487d1eda (diff) |
xen-blkback: fix memory leak when persistent grants are used
Currently shrink_free_pagepool() is called before the pages used for
persistent grants are released via free_persistent_gnts(). This
results in a memory leak when a VBD that uses persistent grants is
torn down.
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: "Roger Pau Monné" <roger.pau@citrix.com>
Cc: Ian Campbell <Ian.Campbell@citrix.com>
Reviewed-by: David Vrabel <david.vrabel@citrix.com>
Cc: linux-kernel@vger.kernel.org
Cc: xen-devel@lists.xen.org
Cc: Anthony Liguori <aliguori@amazon.com>
Signed-off-by: Matt Rushton <mrushton@amazon.com>
Signed-off-by: Matt Wilson <msw@amazon.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
-rw-r--r-- | drivers/block/xen-blkback/blkback.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c index 6620b73d0490..30ef7b390df5 100644 --- a/drivers/block/xen-blkback/blkback.c +++ b/drivers/block/xen-blkback/blkback.c | |||
@@ -625,9 +625,6 @@ purge_gnt_list: | |||
625 | print_stats(blkif); | 625 | print_stats(blkif); |
626 | } | 626 | } |
627 | 627 | ||
628 | /* Since we are shutting down remove all pages from the buffer */ | ||
629 | shrink_free_pagepool(blkif, 0 /* All */); | ||
630 | |||
631 | /* Free all persistent grant pages */ | 628 | /* Free all persistent grant pages */ |
632 | if (!RB_EMPTY_ROOT(&blkif->persistent_gnts)) | 629 | if (!RB_EMPTY_ROOT(&blkif->persistent_gnts)) |
633 | free_persistent_gnts(blkif, &blkif->persistent_gnts, | 630 | free_persistent_gnts(blkif, &blkif->persistent_gnts, |
@@ -636,6 +633,9 @@ purge_gnt_list: | |||
636 | BUG_ON(!RB_EMPTY_ROOT(&blkif->persistent_gnts)); | 633 | BUG_ON(!RB_EMPTY_ROOT(&blkif->persistent_gnts)); |
637 | blkif->persistent_gnt_c = 0; | 634 | blkif->persistent_gnt_c = 0; |
638 | 635 | ||
636 | /* Since we are shutting down remove all pages from the buffer */ | ||
637 | shrink_free_pagepool(blkif, 0 /* All */); | ||
638 | |||
639 | if (log_stats) | 639 | if (log_stats) |
640 | print_stats(blkif); | 640 | print_stats(blkif); |
641 | 641 | ||