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
|
||||
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;
|
||||
struct spdk_opal_compacket *header = response;
|
||||
@ -89,12 +96,6 @@ opal_recv_cmd(struct spdk_opal_dev *dev)
|
||||
uint64_t now;
|
||||
|
||||
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",
|
||||
header->outstanding_data,
|
||||
header->min_transfer);
|
||||
@ -111,6 +112,12 @@ opal_recv_cmd(struct spdk_opal_dev *dev)
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
return ret;
|
||||
@ -130,10 +137,17 @@ opal_send_recv(struct spdk_opal_dev *dev, spdk_opal_cb cb, void *data)
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = opal_recv_cmd(dev);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = opal_recv_check(dev);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return cb(dev, data);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user