From: Roger Pau Monne <roger....@citrix.com>

commit 1d5c76e66433382a1e170d1d5845bb0fed7467aa upstream.

There's no reason to request physically contiguous memory for those
allocations.

[boris: added CC to stable]

Cc: sta...@vger.kernel.org
Reported-by: Ian Jackson <ian.jack...@citrix.com>
Signed-off-by: Roger Pau Monné <roger....@citrix.com>
Reviewed-by: Juergen Gross <jgr...@suse.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.w...@oracle.com>
Signed-off-by: Boris Ostrovsky <boris.ostrov...@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/block/xen-blkfront.c |   38 +++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 19 deletions(-)

--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1310,11 +1310,11 @@ static void blkif_free_ring(struct blkfr
                }
 
 free_shadow:
-               kfree(rinfo->shadow[i].grants_used);
+               kvfree(rinfo->shadow[i].grants_used);
                rinfo->shadow[i].grants_used = NULL;
-               kfree(rinfo->shadow[i].indirect_grants);
+               kvfree(rinfo->shadow[i].indirect_grants);
                rinfo->shadow[i].indirect_grants = NULL;
-               kfree(rinfo->shadow[i].sg);
+               kvfree(rinfo->shadow[i].sg);
                rinfo->shadow[i].sg = NULL;
        }
 
@@ -1353,7 +1353,7 @@ static void blkif_free(struct blkfront_i
        for (i = 0; i < info->nr_rings; i++)
                blkif_free_ring(&info->rinfo[i]);
 
-       kfree(info->rinfo);
+       kvfree(info->rinfo);
        info->rinfo = NULL;
        info->nr_rings = 0;
 }
@@ -1914,9 +1914,9 @@ static int negotiate_mq(struct blkfront_
        if (!info->nr_rings)
                info->nr_rings = 1;
 
-       info->rinfo = kcalloc(info->nr_rings,
-                             sizeof(struct blkfront_ring_info),
-                             GFP_KERNEL);
+       info->rinfo = kvcalloc(info->nr_rings,
+                              sizeof(struct blkfront_ring_info),
+                              GFP_KERNEL);
        if (!info->rinfo) {
                xenbus_dev_fatal(info->xbdev, -ENOMEM, "allocating ring_info 
structure");
                info->nr_rings = 0;
@@ -2232,17 +2232,17 @@ static int blkfront_setup_indirect(struc
 
        for (i = 0; i < BLK_RING_SIZE(info); i++) {
                rinfo->shadow[i].grants_used =
-                       kcalloc(grants,
-                               sizeof(rinfo->shadow[i].grants_used[0]),
-                               GFP_NOIO);
-               rinfo->shadow[i].sg = kcalloc(psegs,
-                                             sizeof(rinfo->shadow[i].sg[0]),
-                                             GFP_NOIO);
+                       kvcalloc(grants,
+                                sizeof(rinfo->shadow[i].grants_used[0]),
+                                GFP_NOIO);
+               rinfo->shadow[i].sg = kvcalloc(psegs,
+                                              sizeof(rinfo->shadow[i].sg[0]),
+                                              GFP_NOIO);
                if (info->max_indirect_segments)
                        rinfo->shadow[i].indirect_grants =
-                               kcalloc(INDIRECT_GREFS(grants),
-                                       
sizeof(rinfo->shadow[i].indirect_grants[0]),
-                                       GFP_NOIO);
+                               kvcalloc(INDIRECT_GREFS(grants),
+                                        
sizeof(rinfo->shadow[i].indirect_grants[0]),
+                                        GFP_NOIO);
                if ((rinfo->shadow[i].grants_used == NULL) ||
                        (rinfo->shadow[i].sg == NULL) ||
                     (info->max_indirect_segments &&
@@ -2256,11 +2256,11 @@ static int blkfront_setup_indirect(struc
 
 out_of_memory:
        for (i = 0; i < BLK_RING_SIZE(info); i++) {
-               kfree(rinfo->shadow[i].grants_used);
+               kvfree(rinfo->shadow[i].grants_used);
                rinfo->shadow[i].grants_used = NULL;
-               kfree(rinfo->shadow[i].sg);
+               kvfree(rinfo->shadow[i].sg);
                rinfo->shadow[i].sg = NULL;
-               kfree(rinfo->shadow[i].indirect_grants);
+               kvfree(rinfo->shadow[i].indirect_grants);
                rinfo->shadow[i].indirect_grants = NULL;
        }
        if (!list_empty(&rinfo->indirect_pages)) {


Reply via email to