aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-06-08 16:16:05 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-06-08 16:16:05 -0400
commit8e61f6f7c308a828f8402db6651f6e38ba66c009 (patch)
tree5bbbc54efc0c8cb65fe5d88e797bb7b3d83a943a
parent3d4645bf7a76886c70a482a1c6742bac98553f47 (diff)
parent1d5c76e66433382a1e170d1d5845bb0fed7467aa (diff)
Merge tag 'for-linus-5.2b-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip
Pull xen fix from Juergen Gross: "Just one fix for the Xen block frontend driver avoiding allocations with order > 0" * tag 'for-linus-5.2b-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: xen-blkfront: switch kcalloc to kvcalloc for large array allocation
-rw-r--r--drivers/block/xen-blkfront.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index d43a5677ccbc..a74d03913822 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1310,11 +1310,11 @@ static void blkif_free_ring(struct blkfront_ring_info *rinfo)
1310 } 1310 }
1311 1311
1312free_shadow: 1312free_shadow:
1313 kfree(rinfo->shadow[i].grants_used); 1313 kvfree(rinfo->shadow[i].grants_used);
1314 rinfo->shadow[i].grants_used = NULL; 1314 rinfo->shadow[i].grants_used = NULL;
1315 kfree(rinfo->shadow[i].indirect_grants); 1315 kvfree(rinfo->shadow[i].indirect_grants);
1316 rinfo->shadow[i].indirect_grants = NULL; 1316 rinfo->shadow[i].indirect_grants = NULL;
1317 kfree(rinfo->shadow[i].sg); 1317 kvfree(rinfo->shadow[i].sg);
1318 rinfo->shadow[i].sg = NULL; 1318 rinfo->shadow[i].sg = NULL;
1319 } 1319 }
1320 1320
@@ -1353,7 +1353,7 @@ static void blkif_free(struct blkfront_info *info, int suspend)
1353 for (i = 0; i < info->nr_rings; i++) 1353 for (i = 0; i < info->nr_rings; i++)
1354 blkif_free_ring(&info->rinfo[i]); 1354 blkif_free_ring(&info->rinfo[i]);
1355 1355
1356 kfree(info->rinfo); 1356 kvfree(info->rinfo);
1357 info->rinfo = NULL; 1357 info->rinfo = NULL;
1358 info->nr_rings = 0; 1358 info->nr_rings = 0;
1359} 1359}
@@ -1914,9 +1914,9 @@ static int negotiate_mq(struct blkfront_info *info)
1914 if (!info->nr_rings) 1914 if (!info->nr_rings)
1915 info->nr_rings = 1; 1915 info->nr_rings = 1;
1916 1916
1917 info->rinfo = kcalloc(info->nr_rings, 1917 info->rinfo = kvcalloc(info->nr_rings,
1918 sizeof(struct blkfront_ring_info), 1918 sizeof(struct blkfront_ring_info),
1919 GFP_KERNEL); 1919 GFP_KERNEL);
1920 if (!info->rinfo) { 1920 if (!info->rinfo) {
1921 xenbus_dev_fatal(info->xbdev, -ENOMEM, "allocating ring_info structure"); 1921 xenbus_dev_fatal(info->xbdev, -ENOMEM, "allocating ring_info structure");
1922 info->nr_rings = 0; 1922 info->nr_rings = 0;
@@ -2232,17 +2232,17 @@ static int blkfront_setup_indirect(struct blkfront_ring_info *rinfo)
2232 2232
2233 for (i = 0; i < BLK_RING_SIZE(info); i++) { 2233 for (i = 0; i < BLK_RING_SIZE(info); i++) {
2234 rinfo->shadow[i].grants_used = 2234 rinfo->shadow[i].grants_used =
2235 kcalloc(grants, 2235 kvcalloc(grants,
2236 sizeof(rinfo->shadow[i].grants_used[0]), 2236 sizeof(rinfo->shadow[i].grants_used[0]),
2237 GFP_NOIO); 2237 GFP_NOIO);
2238 rinfo->shadow[i].sg = kcalloc(psegs, 2238 rinfo->shadow[i].sg = kvcalloc(psegs,
2239 sizeof(rinfo->shadow[i].sg[0]), 2239 sizeof(rinfo->shadow[i].sg[0]),
2240 GFP_NOIO); 2240 GFP_NOIO);
2241 if (info->max_indirect_segments) 2241 if (info->max_indirect_segments)
2242 rinfo->shadow[i].indirect_grants = 2242 rinfo->shadow[i].indirect_grants =
2243 kcalloc(INDIRECT_GREFS(grants), 2243 kvcalloc(INDIRECT_GREFS(grants),
2244 sizeof(rinfo->shadow[i].indirect_grants[0]), 2244 sizeof(rinfo->shadow[i].indirect_grants[0]),
2245 GFP_NOIO); 2245 GFP_NOIO);
2246 if ((rinfo->shadow[i].grants_used == NULL) || 2246 if ((rinfo->shadow[i].grants_used == NULL) ||
2247 (rinfo->shadow[i].sg == NULL) || 2247 (rinfo->shadow[i].sg == NULL) ||
2248 (info->max_indirect_segments && 2248 (info->max_indirect_segments &&
@@ -2256,11 +2256,11 @@ static int blkfront_setup_indirect(struct blkfront_ring_info *rinfo)
2256 2256
2257out_of_memory: 2257out_of_memory:
2258 for (i = 0; i < BLK_RING_SIZE(info); i++) { 2258 for (i = 0; i < BLK_RING_SIZE(info); i++) {
2259 kfree(rinfo->shadow[i].grants_used); 2259 kvfree(rinfo->shadow[i].grants_used);
2260 rinfo->shadow[i].grants_used = NULL; 2260 rinfo->shadow[i].grants_used = NULL;
2261 kfree(rinfo->shadow[i].sg); 2261 kvfree(rinfo->shadow[i].sg);
2262 rinfo->shadow[i].sg = NULL; 2262 rinfo->shadow[i].sg = NULL;
2263 kfree(rinfo->shadow[i].indirect_grants); 2263 kvfree(rinfo->shadow[i].indirect_grants);
2264 rinfo->shadow[i].indirect_grants = NULL; 2264 rinfo->shadow[i].indirect_grants = NULL;
2265 } 2265 }
2266 if (!list_empty(&rinfo->indirect_pages)) { 2266 if (!list_empty(&rinfo->indirect_pages)) {