Commit a520198d authored by Daniel Verkamp's avatar Daniel Verkamp
Browse files

scsi: convert sync command to bdev blocks API



Use spdk_bdev_flush_blocks() in place of spdk_bdev_flush(), since the
SCSI SYNCHRONIZE CACHE command already natively operates in blocks
rather than bytes.

Change-Id: I11810948fb8d0b6b911d48620e2a363f767cc7f7
Signed-off-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/393201


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatar <shuhei.matsumoto.xt@hitachi.com>
parent 623161da
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -1415,9 +1415,6 @@ spdk_bdev_scsi_sync(struct spdk_bdev *bdev, struct spdk_scsi_task *task,
		    uint64_t lba, uint32_t num_blocks)
{
	uint64_t bdev_num_blocks;
	uint64_t blen;
	uint64_t offset;
	uint64_t nbytes;
	int rc;

	if (num_blocks == 0) {
@@ -1425,9 +1422,6 @@ spdk_bdev_scsi_sync(struct spdk_bdev *bdev, struct spdk_scsi_task *task,
	}

	bdev_num_blocks = spdk_bdev_get_num_blocks(bdev);
	blen = spdk_bdev_get_block_size(bdev);
	offset = lba * blen;
	nbytes = num_blocks * blen;

	if (lba >= bdev_num_blocks || num_blocks > bdev_num_blocks ||
	    lba > (bdev_num_blocks - num_blocks)) {
@@ -1439,11 +1433,11 @@ spdk_bdev_scsi_sync(struct spdk_bdev *bdev, struct spdk_scsi_task *task,
		return SPDK_SCSI_TASK_COMPLETE;
	}

	rc = spdk_bdev_flush(task->desc, task->ch, offset, nbytes,
	rc = spdk_bdev_flush_blocks(task->desc, task->ch, lba, num_blocks,
				    spdk_bdev_scsi_task_complete_cmd, task);

	if (rc) {
		SPDK_ERRLOG("spdk_bdev_flush() failed\n");
		SPDK_ERRLOG("spdk_bdev_flush_blocks() failed\n");
		spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION,
					  SPDK_SCSI_SENSE_NO_SENSE,
					  SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE,
+3 −3
Original line number Diff line number Diff line
@@ -221,8 +221,8 @@ spdk_bdev_reset(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch,
}

int
spdk_bdev_flush(struct spdk_bdev_desc *desc, struct spdk_io_channel *ch,
		uint64_t offset, uint64_t length,
spdk_bdev_flush_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;