Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Thumshirn <jthumshirn@suse.de>2018-10-15 12:01:10 +0200
committerJohannes Thumshirn <jthumshirn@suse.de>2018-10-15 12:01:10 +0200
commita16c62fa0e63e54f4976ccb7c12c01303c441742 (patch)
treec4dbafd2562bfc61269d2ae47cac15252061e9fa
parent2624e2e94896a8946b30b29a637780c07cd9acc5 (diff)
blkdev_report_zones_ioctl(): Use vmalloc() to allocate large
buffers (bsc#1111819).
-rw-r--r--patches.fixes/blkdev_report_zones_ioctl-use-vmalloc-to-allocate-large-buffers.patch69
-rw-r--r--series.conf1
2 files changed, 70 insertions, 0 deletions
diff --git a/patches.fixes/blkdev_report_zones_ioctl-use-vmalloc-to-allocate-large-buffers.patch b/patches.fixes/blkdev_report_zones_ioctl-use-vmalloc-to-allocate-large-buffers.patch
new file mode 100644
index 0000000000..fe1e1b5bde
--- /dev/null
+++ b/patches.fixes/blkdev_report_zones_ioctl-use-vmalloc-to-allocate-large-buffers.patch
@@ -0,0 +1,69 @@
+From: Bart Van Assche <bart.vanassche@wdc.com>
+Date: Tue, 22 May 2018 08:27:22 -0700
+Subject: blkdev_report_zones_ioctl(): Use vmalloc() to allocate large buffers
+Git-commit: 327ea4adcfa37194739f1ec7c70568944d292281
+Patch-mainline: v4.18-rc1
+References: bsc#1111819
+
+Avoid that complaints similar to the following appear in the kernel log
+if the number of zones is sufficiently large:
+
+ fio: page allocation failure: order:9, mode:0x140c0c0(GFP_KERNEL|__GFP_COMP|__GFP_ZERO), nodemask=(null)
+ Call Trace:
+ dump_stack+0x63/0x88
+ warn_alloc+0xf5/0x190
+ __alloc_pages_slowpath+0x8f0/0xb0d
+ __alloc_pages_nodemask+0x242/0x260
+ alloc_pages_current+0x6a/0xb0
+ kmalloc_order+0x18/0x50
+ kmalloc_order_trace+0x26/0xb0
+ __kmalloc+0x20e/0x220
+ blkdev_report_zones_ioctl+0xa5/0x1a0
+ blkdev_ioctl+0x1ba/0x930
+ block_ioctl+0x41/0x50
+ do_vfs_ioctl+0xaa/0x610
+ SyS_ioctl+0x79/0x90
+ do_syscall_64+0x79/0x1b0
+ entry_SYSCALL_64_after_hwframe+0x3d/0xa2
+
+Fixes: 3ed05a987e0f ("blk-zoned: implement ioctls")
+Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
+Cc: Shaun Tancheff <shaun.tancheff@seagate.com>
+Cc: Damien Le Moal <damien.lemoal@hgst.com>
+Cc: Christoph Hellwig <hch@lst.de>
+Cc: Martin K. Petersen <martin.petersen@oracle.com>
+Cc: Hannes Reinecke <hare@suse.com>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Acked-by: Johannes Thumshirn <jthumshirn@suse.de>
+---
+ block/blk-zoned.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/block/blk-zoned.c b/block/blk-zoned.c
+index 08e84ef2bc05..3d08dc84db16 100644
+--- a/block/blk-zoned.c
++++ b/block/blk-zoned.c
+@@ -328,7 +328,11 @@ int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode,
+ if (!rep.nr_zones)
+ return -EINVAL;
+
+- zones = kcalloc(rep.nr_zones, sizeof(struct blk_zone), GFP_KERNEL);
++ if (rep.nr_zones > INT_MAX / sizeof(struct blk_zone))
++ return -ERANGE;
++
++ zones = kvmalloc(rep.nr_zones * sizeof(struct blk_zone),
++ GFP_KERNEL | __GFP_ZERO);
+ if (!zones)
+ return -ENOMEM;
+
+@@ -350,7 +354,7 @@ int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode,
+ }
+
+ out:
+- kfree(zones);
++ kvfree(zones);
+
+ return ret;
+ }
+
diff --git a/series.conf b/series.conf
index 01c5959f31..eb5ba1f649 100644
--- a/series.conf
+++ b/series.conf
@@ -15667,6 +15667,7 @@
patches.suse/net-usb-cdc_mbim-add-flag-FLAG_SEND_ZLP.patch
patches.fixes/fix-io_destroy-aio_complete-race.patch
patches.suse/0001-nbd-fix-nbd-device-deletion.patch
+ patches.fixes/blkdev_report_zones_ioctl-use-vmalloc-to-allocate-large-buffers.patch
patches.fixes/bdi-Move-cgroup-bdi_writeback-to-a-dedicated-low-con.patch
patches.fixes/block-don-t-print-a-message-when-the-device-went-awa.patch
patches.drivers/nvme-fix-lockdep-warning-in-nvme_mpath_clear_current_path.patch