scsi: sd_zbc: Cleanup sd_zbc_alloc_report_buffer()
authorDamien Le Moal <damien.lemoal@wdc.com>
Mon, 11 Nov 2019 02:39:29 +0000 (11:39 +0900)
committerJens Axboe <axboe@kernel.dk>
Wed, 13 Nov 2019 02:12:04 +0000 (19:12 -0700)
commit23a50861adda26a3f3b3ec5fbca0583133d89538
treeeb14d3c23dca0b31c45c31d637a77b18c061885e
parent6d09c4086ed9fc72afb3be4b47ecfa34f57f15f9
scsi: sd_zbc: Cleanup sd_zbc_alloc_report_buffer()

There is no need to arbitrarily limit the size of a report zone to the
number of zones defined by SD_ZBC_REPORT_MAX_ZONES. Rather, simply
calculate the report buffer size needed for the requested number of
zones without exceeding the device total number of zones. This buffer
size limitation to the hardware maximum transfer size and page mapping
capabilities is kept unchanged. Starting with this initial buffer size,
the allocation is optimized by iterating over decreasing buffer size
until the allocation succeeds (each iteration is allowed to fail fast
using the __GFP_NORETRY flag). This ensures forward progress for zone
reports and avoids failures of zones revalidation under memory pressure.

While at it, also replace the hard coded 512 B sector size with the
SECTOR_SIZE macro.

Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/scsi/sd_zbc.c