Commit c25e9b24 authored by Changpeng Liu's avatar Changpeng Liu Committed by Jim Harris
Browse files

scsi: add persistent reserve in command with report capabilities support



Change-Id: I676c385ffd51c0ad2c606f948f21beb031ef4c95
Signed-off-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/436095


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
parent fecac0d8
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -618,6 +618,29 @@ spdk_scsi_pr_in_read_reservations(struct spdk_scsi_task *task,
	return sizeof(param->header);
}

static int
spdk_scsi_pr_in_report_capabilities(struct spdk_scsi_task *task,
				    uint8_t *data, uint16_t data_len)
{
	struct spdk_scsi_pr_in_report_capabilities_data *param;

	SPDK_DEBUGLOG(SPDK_LOG_SCSI, "PR IN REPORT CAPABILITIES\n");
	param = (struct spdk_scsi_pr_in_report_capabilities_data *)data;

	memset(param, 0, sizeof(*param));
	/* TODO: can support more capabilities bits */
	to_be16(&param->length, sizeof(*param));
	param->tmv = 1;
	param->wr_ex = 1;
	param->ex_ac = 1;
	param->wr_ex_ro = 1;
	param->ex_ac_ro = 1;
	param->wr_ex_ar = 1;
	param->ex_ac_ar = 1;

	return sizeof(*param);
}

int
spdk_scsi_pr_in(struct spdk_scsi_task *task,
		uint8_t *cdb, uint8_t *data,
@@ -641,6 +664,9 @@ spdk_scsi_pr_in(struct spdk_scsi_task *task,
		}
		rc = spdk_scsi_pr_in_read_reservations(task, data, data_len);
		break;
	case SPDK_SCSI_PR_IN_REPORT_CAPABILITIES:
		rc = spdk_scsi_pr_in_report_capabilities(task, data, data_len);
		break;
	default:
		goto invalid;
	}