diff --git a/lib/nvme/nvme_opal.c b/lib/nvme/nvme_opal.c index 94d27ecd9..2933404ef 100644 --- a/lib/nvme/nvme_opal.c +++ b/lib/nvme/nvme_opal.c @@ -55,6 +55,23 @@ opal_error_to_human(int error) return spdk_opal_errors[error]; } +static int +opal_flush_response_buffer(struct spdk_opal_dev *dev) +{ + void *response = dev->resp; + int ret = 0; + + ret = spdk_nvme_ctrlr_security_receive(dev->dev_handler, SPDK_SCSI_SECP_TCG, dev->comid, + 0, response, IO_BUFFER_LENGTH); + if (ret) { + SPDK_ERRLOG("Security Receive Error on dev = %p\n", dev); + return ret; + } + + memset(response, 0, IO_BUFFER_LENGTH); + return 0; +} + static int opal_send_cmd(struct spdk_opal_dev *dev) { @@ -104,6 +121,11 @@ opal_send_recv(struct spdk_opal_dev *dev, spdk_opal_cb cb, void *data) { int ret; + ret = opal_flush_response_buffer(dev); + if (ret) { + return ret; + } + ret = opal_send_cmd(dev); if (ret) { return ret;