diff options
author | 2013-04-16 22:11:57 +0900 | |
---|---|---|
committer | 2013-05-02 15:40:41 -0700 | |
commit | cc34a8e663b2908b9ab487dab8456d117a1e0b93 (patch) | |
tree | 44afa617c1072371827df144f61e9781a99d9419 /drivers/scsi | |
parent | [SCSI] scsi_debug: prohibit scsi_debug_unmap_granularity == scsi_debug_unmap_... (diff) | |
download | linux-cc34a8e663b2908b9ab487dab8456d117a1e0b93.tar.gz linux-cc34a8e663b2908b9ab487dab8456d117a1e0b93.tar.bz2 linux-cc34a8e663b2908b9ab487dab8456d117a1e0b93.zip |
[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 <akinobu.mita@gmail.com>
Acked-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/scsi_debug.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 5c321409fff3..4b5d3887ff47 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; } |