|
@@ -128,6 +128,36 @@ out:
|
|
|
nvmet_req_complete(req, status);
|
|
|
}
|
|
|
|
|
|
+static void nvmet_execute_get_log_cmd_effects_ns(struct nvmet_req *req)
|
|
|
+{
|
|
|
+ u16 status = NVME_SC_INTERNAL;
|
|
|
+ struct nvme_effects_log *log;
|
|
|
+
|
|
|
+ log = kzalloc(sizeof(*log), GFP_KERNEL);
|
|
|
+ if (!log)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ log->acs[nvme_admin_get_log_page] = cpu_to_le32(1 << 0);
|
|
|
+ log->acs[nvme_admin_identify] = cpu_to_le32(1 << 0);
|
|
|
+ log->acs[nvme_admin_abort_cmd] = cpu_to_le32(1 << 0);
|
|
|
+ log->acs[nvme_admin_set_features] = cpu_to_le32(1 << 0);
|
|
|
+ log->acs[nvme_admin_get_features] = cpu_to_le32(1 << 0);
|
|
|
+ log->acs[nvme_admin_async_event] = cpu_to_le32(1 << 0);
|
|
|
+ log->acs[nvme_admin_keep_alive] = cpu_to_le32(1 << 0);
|
|
|
+
|
|
|
+ log->iocs[nvme_cmd_read] = cpu_to_le32(1 << 0);
|
|
|
+ log->iocs[nvme_cmd_write] = cpu_to_le32(1 << 0);
|
|
|
+ log->iocs[nvme_cmd_flush] = cpu_to_le32(1 << 0);
|
|
|
+ log->iocs[nvme_cmd_dsm] = cpu_to_le32(1 << 0);
|
|
|
+ log->iocs[nvme_cmd_write_zeroes] = cpu_to_le32(1 << 0);
|
|
|
+
|
|
|
+ status = nvmet_copy_to_sgl(req, 0, log, sizeof(*log));
|
|
|
+
|
|
|
+ kfree(log);
|
|
|
+out:
|
|
|
+ nvmet_req_complete(req, status);
|
|
|
+}
|
|
|
+
|
|
|
static void nvmet_execute_get_log_changed_ns(struct nvmet_req *req)
|
|
|
{
|
|
|
struct nvmet_ctrl *ctrl = req->sq->ctrl;
|
|
@@ -208,7 +238,7 @@ static void nvmet_execute_identify_ctrl(struct nvmet_req *req)
|
|
|
|
|
|
/* first slot is read-only, only one slot supported */
|
|
|
id->frmw = (1 << 0) | (1 << 1);
|
|
|
- id->lpa = (1 << 0) | (1 << 2);
|
|
|
+ id->lpa = (1 << 0) | (1 << 1) | (1 << 2);
|
|
|
id->elpe = NVMET_ERROR_LOG_SLOTS - 1;
|
|
|
id->npss = 0;
|
|
|
|
|
@@ -586,6 +616,9 @@ u16 nvmet_parse_admin_cmd(struct nvmet_req *req)
|
|
|
case NVME_LOG_CHANGED_NS:
|
|
|
req->execute = nvmet_execute_get_log_changed_ns;
|
|
|
return 0;
|
|
|
+ case NVME_LOG_CMD_EFFECTS:
|
|
|
+ req->execute = nvmet_execute_get_log_cmd_effects_ns;
|
|
|
+ return 0;
|
|
|
}
|
|
|
break;
|
|
|
case nvme_admin_identify:
|