From cc34a8e663b2908b9ab487dab8456d117a1e0b93 Mon Sep 17 00:00:00 2001 From: Akinobu Mita Date: Tue, 16 Apr 2013 22:11:57 +0900 Subject: [PATCH] [SCSI] scsi_debug: clear correct memory region when LBPRZ is enabled The function unmap_region() clears memory region specified as the logical block address and the number of logical blocks in ramdisk storage (fake_storep) if lbpu and lbprz module parameters are enabled. In the while loop of unmap_region(), it advances optimal unmap granularity in logical blocks. But it only clears one logical block at LBA 'block' per loop iteration. And furthermore, the 'block' is not pointing to a logical block address which should be cleared, it is a index of probisioning map (map_storep). Signed-off-by: Akinobu Mita Acked-by: Martin K. Petersen Signed-off-by: James Bottomley --- drivers/scsi/scsi_debug.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 5c32140..4b5d388 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -2059,8 +2059,9 @@ static void unmap_region(sector_t lba, unsigned int len) clear_bit(block, map_storep); if (scsi_debug_lbprz) memset(fake_storep + - block * scsi_debug_sector_size, 0, - scsi_debug_sector_size); + lba * scsi_debug_sector_size, 0, + scsi_debug_sector_size * + scsi_debug_unmap_granularity); } lba += granularity - rem; } -- 2.7.4