Commit 7455910d authored by Daniel Verkamp's avatar Daniel Verkamp
Browse files

scsi_bdev: simplify scsi_readwrite helper function



Factor out the common data direction Check Condition logic from read
and write.

Change-Id: Ia2fbd5f69eefd826ebb5ab2a8e99aeb380f1b7ea
Signed-off-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 8e379851
Loading
Loading
Loading
Loading
+12 −22
Original line number Diff line number Diff line
@@ -1457,11 +1457,8 @@ spdk_bdev_scsi_readwrite(struct spdk_bdev *bdev,
			 struct spdk_scsi_task *task,
			 uint64_t lba, uint32_t xfer_len, bool is_read)
{
	if (is_read) {
		if ((task->dxfer_dir == SPDK_SCSI_DIR_FROM_DEV) ||
		    (task->dxfer_dir == SPDK_SCSI_DIR_NONE)) {
			return spdk_bdev_scsi_read(bdev, task, lba, xfer_len);
		} else {
	if (task->dxfer_dir != SPDK_SCSI_DIR_NONE &&
	    task->dxfer_dir != (is_read ? SPDK_SCSI_DIR_FROM_DEV : SPDK_SCSI_DIR_TO_DEV)) {
		SPDK_ERRLOG("Incorrect data direction\n");
		spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION,
					  SPDK_SCSI_SENSE_NO_SENSE,
@@ -1469,18 +1466,11 @@ spdk_bdev_scsi_readwrite(struct spdk_bdev *bdev,
					  SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
		return SPDK_SCSI_TASK_COMPLETE;
	}

	if (is_read) {
		return spdk_bdev_scsi_read(bdev, task, lba, xfer_len);
	} else {
		if ((task->dxfer_dir == SPDK_SCSI_DIR_TO_DEV) ||
		    (task->dxfer_dir == SPDK_SCSI_DIR_NONE)) {
		return spdk_bdev_scsi_write(bdev, task, lba, xfer_len);
		} else {
			SPDK_ERRLOG("Incorrect data direction\n");
			spdk_scsi_task_set_status(task, SPDK_SCSI_STATUS_CHECK_CONDITION,
						  SPDK_SCSI_SENSE_NO_SENSE,
						  SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE,
						  SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
			return SPDK_SCSI_TASK_COMPLETE;
		}
	}
}