nvme/opal: don't use ComPacket header to check level 0 discovery response
According to the TCG Storage Core Architecture V2.0, the level 0 discovery response should use level 0 discovery header and feature descriptors to retrieve the response data buffer. ComPacket header should be used in upper layer. Change-Id: I61e3e206801994b276608f9afbda800eccb2cffa Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1124 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
c61b70c3d5
commit
fbfb3aca28
@ -81,6 +81,13 @@ opal_send_cmd(struct spdk_opal_dev *dev)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
opal_recv_cmd(struct spdk_opal_dev *dev)
|
opal_recv_cmd(struct spdk_opal_dev *dev)
|
||||||
|
{
|
||||||
|
return spdk_nvme_ctrlr_security_receive(dev->ctrlr, SPDK_SCSI_SECP_TCG, dev->comid,
|
||||||
|
0, dev->resp, IO_BUFFER_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
opal_recv_check(struct spdk_opal_dev *dev)
|
||||||
{
|
{
|
||||||
void *response = dev->resp;
|
void *response = dev->resp;
|
||||||
struct spdk_opal_compacket *header = response;
|
struct spdk_opal_compacket *header = response;
|
||||||
@ -89,12 +96,6 @@ opal_recv_cmd(struct spdk_opal_dev *dev)
|
|||||||
uint64_t now;
|
uint64_t now;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
ret = spdk_nvme_ctrlr_security_receive(dev->ctrlr, SPDK_SCSI_SECP_TCG, dev->comid,
|
|
||||||
0, dev->resp, IO_BUFFER_LENGTH);
|
|
||||||
if (ret) {
|
|
||||||
SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
SPDK_DEBUGLOG(SPDK_LOG_OPAL, "outstanding_data=%d, minTransfer=%d\n",
|
SPDK_DEBUGLOG(SPDK_LOG_OPAL, "outstanding_data=%d, minTransfer=%d\n",
|
||||||
header->outstanding_data,
|
header->outstanding_data,
|
||||||
header->min_transfer);
|
header->min_transfer);
|
||||||
@ -111,6 +112,12 @@ opal_recv_cmd(struct spdk_opal_dev *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(response, 0, IO_BUFFER_LENGTH);
|
memset(response, 0, IO_BUFFER_LENGTH);
|
||||||
|
ret = spdk_nvme_ctrlr_security_receive(dev->ctrlr, SPDK_SCSI_SECP_TCG, dev->comid,
|
||||||
|
0, dev->resp, IO_BUFFER_LENGTH);
|
||||||
|
if (ret) {
|
||||||
|
SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
} while (!ret);
|
} while (!ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -130,10 +137,17 @@ opal_send_recv(struct spdk_opal_dev *dev, spdk_opal_cb cb, void *data)
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = opal_recv_cmd(dev);
|
ret = opal_recv_cmd(dev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = opal_recv_check(dev);
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
return cb(dev, data);
|
return cb(dev, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user