From 97f145c8b8aab6241e7936adaa4a330646552651 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Thu, 28 Dec 2017 12:50:59 -0700 Subject: [PATCH] scsi: convert unmap command to bdev blocks API Use spdk_bdev_unmap_blocks() in place of spdk_bdev_unmap(), since the SCSI UNMAP descriptor already natively operates in blocks rather than bytes. Change-Id: I16a0c38d203cf5f60484229e7872783b11d8de6e Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/393202 Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker Reviewed-by: --- lib/scsi/scsi_bdev.c | 16 +++++++--------- test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c | 6 +++--- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/lib/scsi/scsi_bdev.c b/lib/scsi/scsi_bdev.c index 975a101a5..02dcd2185 100644 --- a/lib/scsi/scsi_bdev.c +++ b/lib/scsi/scsi_bdev.c @@ -1610,23 +1610,21 @@ spdk_bdev_scsi_unmap(struct spdk_bdev *bdev, for (i = 0; i < desc_count; i++) { struct spdk_scsi_unmap_bdesc *desc; - uint64_t block_size; - uint64_t offset; - uint64_t nbytes; + uint64_t offset_blocks; + uint64_t num_blocks; desc = &ctx->desc[i]; - block_size = spdk_bdev_get_block_size(bdev); - offset = from_be64(&desc->lba) * block_size; - nbytes = from_be32(&desc->block_count) * block_size; + offset_blocks = from_be64(&desc->lba); + num_blocks = from_be32(&desc->block_count); - if (nbytes == 0) { + if (num_blocks == 0) { continue; } ctx->count++; - rc = spdk_bdev_unmap(task->desc, task->ch, offset, nbytes, - spdk_bdev_scsi_task_complete_unmap_cmd, ctx); + rc = spdk_bdev_unmap_blocks(task->desc, task->ch, offset_blocks, num_blocks, + spdk_bdev_scsi_task_complete_unmap_cmd, ctx); if (rc) { SPDK_ERRLOG("SCSI Unmapping failed\n"); diff --git a/test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c b/test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c index 097d7b709..638187db4 100644 --- a/test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c +++ b/test/unit/lib/scsi/scsi_bdev.c/scsi_bdev_ut.c @@ -206,9 +206,9 @@ spdk_bdev_writev(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch, } int -spdk_bdev_unmap(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch, - uint64_t offset, uint64_t length, - spdk_bdev_io_completion_cb cb, void *cb_arg) +spdk_bdev_unmap_blocks(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch, + uint64_t offset_blocks, uint64_t num_blocks, + spdk_bdev_io_completion_cb cb, void *cb_arg) { return 0; }