This series addresses a reccuring problem with zone revalidation failures observed during extensive testing with memory constrained system and device hot-plugging. The problem source is failure to allocate large memory areas with alloc_pages() or kmalloc() in blk_revalidate_disk_zones() to store the disk array of zones (struct blk_zone) or in sd_zbc_report_zones() for the report zones command reply buffer. The solution proposed here is to: 1) limit the number of zones to be reported with a single report zones command execution, and 2) Use vmalloc to allocate large-ish arrays and buffers in place of alloc_pages() or kmalloc(). With these changes, tests do not show any zone revalidation failures while not impacting the time taken for a disk zone inspection during device scan and revalidation. Changes from v4: * bio_copy_kern does not use the vmalloc buffer for IO so does not need flush/invalidate_kernel_vmap_range() of the buffer. Changes from v3: * Reworked use of flush_kernel_vmap_range() and invalidate_kernel_vmap_range() to contain the calls within bio.c, transparently to the user of bio_map_kern(). * Add similar support to bio_copy_kern(). Changes from v2: * Move invalidate_kernel_vmap_range() of vmalloc-ed buffer to sd_zbc.c in patch 2, after completion of scsi_execute_req(). * In patch 2, add flush_kernel_vmap_range() before scsi_execute_req(). Changes from V1: * Added call to invalidate_kernel_vmap_range() for vmalloc-ed buffers in patch 1. * Fixed patch 2 compilation error with Sparc64 (kbuild robot) Damien Le Moal (3): block: Allow mapping of vmalloc-ed buffers sd_zbc: Fix report zones buffer allocation block: Limit zone array allocation size block/bio.c | 29 ++++++++++++++- block/blk-zoned.c | 29 +++++++-------- drivers/scsi/sd_zbc.c | 83 +++++++++++++++++++++++++++++++----------- include/linux/blkdev.h | 5 +++ 4 files changed, 108 insertions(+), 38 deletions(-) -- 2.21.0