[PATCH 0/6] scsi_debug: fix logical block provisioning support

Akinobu Mita
2013-04-16T13:12:24Z

I tried testing the logical block provisioning support in scsi_debug,
but it didn't work as I expected.

For example, load scsi_debug module with UNMAP command supported
and fill the storage with random data.

# modprobe scsi_debug lbpu=1
# dd if=/dev/urandom of=/dev/sdb

Then, try to unmap LBA 0, but Get LBA status reports:

# sg_unmap --lba=0 --num=1 /dev/sdb
# sg_get_lba_status --lba=0 /dev/sdb
descriptor LBA: 0x0000000000000000 blocks: 16384 mapped

This is unexpected result. Because UNMAP command to LBA 0 finished
without any errors, but Get LBA status shows that LBA 0 is still mapped.

I looked around the logical block provisioning support in scsi_debug,
and I found several problems there. This patch series tries to fix
these problems and it is broken into small patches as much as possible
for ease of review.

Cc: "James E.J. Bottomley" <JBottomley@parallels.com>
Cc: linux-scsi@vger.kernel.org
Cc: Douglas Gilbert <dgilbert@interlog.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>

Akinobu Mita (6):
scsi_debug: call map_region() and unmap_region() only when needed
scsi_debug: prohibit scsi_debug_unmap_granularity ==
scsi_debug_unmap_alignment
scsi_debug: clear correct memory region when LBPRZ is enabled
scsi_debug: add translation functions between LBA and index of
provisioning map
scsi_debug: fix initialization of provisioning map
scsi_debug: fix logical block provisioning support

drivers/scsi/scsi_debug.c | 97 ++++++++++++++++++++++++-----------------------
1 file changed, 50 insertions(+), 47 deletions(-)

--
1.8.1.4