The command functions combined with the changed-ns-list-log command.
The output almost same but different as lists attached or allocated NSs.
Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
ENTRY("get-log", "Generic NVMe get log, returns log in raw format", get_log)
ENTRY("telemetry-log", "Retrieve FW Telemetry log write to file", get_telemetry_log)
ENTRY("fw-log", "Retrieve FW Log, show it", get_fw_log)
- ENTRY("changed-ns-list-log", "Retrieve Changed Namespace List, show it", get_changed_ns_list_log)
+ ENTRY("changed-ns-list-log", "Retrieve Changed Attached Namespace List, show it", get_changed_attach_ns_list_log)
ENTRY("smart-log", "Retrieve SMART Log, show it", get_smart_log)
ENTRY("ana-log", "Retrieve ANA Log, show it", get_ana_log)
ENTRY("error-log", "Retrieve Error Log, show it", get_error_log)
ENTRY("supported-cap-config-log", "Retrieve the list of Supported Capacity Configuration Descriptors", get_supp_cap_config_log)
ENTRY("mgmt-addr-list-log", "Retrieve Management Address List Log, show it", get_mgmt_addr_list_log)
ENTRY("rotational-media-info-log", "Retrieve Rotational Media Information Log, show it", get_rotational_media_info_log)
+ ENTRY("changed-alloc-ns-list-log", "Retrieve Changed Allocated Namespace List, show it", get_changed_alloc_ns_list_log)
ENTRY("set-feature", "Set a feature and show the resulting value", set_feature)
ENTRY("set-property", "Set a property and show the resulting value", set_property)
ENTRY("get-property", "Get a property and show the resulting value", get_property)
d_raw((unsigned char *)fw_log, sizeof(*fw_log));
}
-static void binary_changed_ns_list_log(struct nvme_ns_list *log,
- const char *devname)
+static void binary_changed_ns_list_log(struct nvme_ns_list *log, const char *devname, bool alloc)
{
d_raw((unsigned char *)log, sizeof(*log));
}
json_print(r);
}
-void json_changed_ns_list_log(struct nvme_ns_list *log,
- const char *devname)
+void json_changed_ns_list_log(struct nvme_ns_list *log, const char *devname, bool alloc)
{
struct json_object *r = json_create_object();
struct json_object *nsi = json_create_object();
__u32 nsid;
int i;
+ _cleanup_free_ char *k = NULL;
+
if (log->ns[0] == cpu_to_le32(0xffffffff))
return;
- obj_add_str(r, "Changed Namespace List Log", devname);
+ if (asprintf(&k, "Changed %s Namespace List Log", alloc ? "Allocated" : "Attached") > 0)
+ obj_add_str(r, k, devname);
for (i = 0; i < NVME_ID_NS_LIST_MAX; i++) {
nsid = le32_to_cpu(log->ns[i]);
}
}
-static void stdout_changed_ns_list_log(struct nvme_ns_list *log,
- const char *devname)
+static void stdout_changed_ns_list_log(struct nvme_ns_list *log, const char *devname, bool alloc)
{
__u32 nsid;
int i;
nvme_print(fw_log, flags, fw_log, devname);
}
-void nvme_show_changed_ns_list_log(struct nvme_ns_list *log,
- const char *devname,
- nvme_print_flags_t flags)
+void nvme_show_changed_ns_list_log(struct nvme_ns_list *log, const char *devname,
+ nvme_print_flags_t flags, bool alloc)
{
- nvme_print(ns_list_log, flags, log, devname);
+ nvme_print(ns_list_log, flags, log, devname, alloc);
}
void nvme_print_effects_log_pages(struct list_head *list,
void (*media_unit_stat_log)(struct nvme_media_unit_stat_log *mus);
void (*mi_cmd_support_effects_log)(struct nvme_mi_cmd_supported_effects_log *mi_cmd_log, const char *devname);
void (*ns_list)(struct nvme_ns_list *ns_list);
- void (*ns_list_log)(struct nvme_ns_list *log, const char *devname);
+ void (*ns_list_log)(struct nvme_ns_list *log, const char *devname, bool alloc);
void (*nvm_id_ns)(struct nvme_nvm_id_ns *nvm_ns, unsigned int nsid, struct nvme_id_ns *ns, unsigned int lba_index, bool cap_only);
void (*persistent_event_log)(void *pevent_log_info, __u8 action, __u32 size, const char *devname);
void (*predictable_latency_event_agg_log)(struct nvme_aggregate_predictable_lat_event *pea_log, __u64 log_entries, __u32 size, const char *devname);
nvme_print_flags_t flags);
void nvme_print_effects_log_pages(struct list_head *list,
nvme_print_flags_t flags);
-void nvme_show_changed_ns_list_log(struct nvme_ns_list *log,
- const char *devname, nvme_print_flags_t flags);
+void nvme_show_changed_ns_list_log(struct nvme_ns_list *log, const char *devname,
+ nvme_print_flags_t flags, bool alloc);
void nvme_show_endurance_log(struct nvme_endurance_group_log *endurance_log,
__u16 group_id, const char *devname, nvme_print_flags_t flags);
void nvme_show_sanitize_log(struct nvme_sanitize_log_page *sanitize,
return do_admin_op(get_log_changed_ns_list, dev, rae, ns_log);
}
+int nvme_cli_get_log_changed_alloc_ns_list(struct nvme_dev *dev, bool rae, __u32 len,
+ struct nvme_ns_list *ns_log)
+{
+ return do_admin_op(get_log_changed_alloc_ns_list, dev, rae, len, ns_log);
+}
+
int nvme_cli_get_log_cmd_effects(struct nvme_dev *dev, enum nvme_csi csi,
struct nvme_cmd_effects_log *effects_log)
{
struct nvme_firmware_slot *fw_log);
int nvme_cli_get_log_changed_ns_list(struct nvme_dev *dev, bool rae,
struct nvme_ns_list *ns_log);
+int nvme_cli_get_log_changed_alloc_ns_list(struct nvme_dev *dev, bool rae, __u32 len,
+ struct nvme_ns_list *ns_log);
int nvme_cli_get_log_cmd_effects(struct nvme_dev *dev, enum nvme_csi csi,
struct nvme_cmd_effects_log *effects_log);
int nvme_cli_get_log_device_self_test(struct nvme_dev *dev,
return err;
}
-static int get_changed_ns_list_log(int argc, char **argv, struct command *cmd, struct plugin *plugin)
+static int get_changed_ns_list_log(int argc, char **argv, bool alloc)
{
- const char *desc = "Retrieve Changed Namespaces log for the given device "
- "in either decoded format (default) or binary.";
+ _cleanup_free_ char *desc = NULL;
_cleanup_free_ struct nvme_ns_list *changed_ns_list_log = NULL;
_cleanup_nvme_dev_ struct nvme_dev *dev = NULL;
NVME_ARGS(opts,
OPT_FLAG("raw-binary", 'b', &cfg.raw_binary, raw_output));
+ if (asprintf(&desc, "Retrieve Changed %s Namespaces log for the given device %s",
+ alloc ? "Allocated" : "Attached",
+ "in either decoded format (default) or binary.") < 0)
+ desc = NULL;
+
err = parse_and_open(&dev, argc, argv, desc, opts);
if (err)
return err;
if (!changed_ns_list_log)
return -ENOMEM;
- err = nvme_cli_get_log_changed_ns_list(dev, true,
- changed_ns_list_log);
+ if (alloc)
+ err = nvme_cli_get_log_changed_alloc_ns_list(dev, true,
+ sizeof(*changed_ns_list_log),
+ changed_ns_list_log);
+ else
+ err = nvme_cli_get_log_changed_ns_list(dev, true,
+ changed_ns_list_log);
if (!err)
- nvme_show_changed_ns_list_log(changed_ns_list_log,
- dev->name, flags);
+ nvme_show_changed_ns_list_log(changed_ns_list_log, dev->name, flags, alloc);
else if (err > 0)
nvme_show_status(err);
else
- nvme_show_error("changed ns list log: %s", nvme_strerror(errno));
+ nvme_show_error("changed %s ns list log: %s", alloc ? "allocated" : "attached",
+ nvme_strerror(errno));
return err;
}
+static int get_changed_attach_ns_list_log(int argc, char **argv, struct command *cmd,
+ struct plugin *plugin)
+{
+ return get_changed_ns_list_log(argc, argv, false);
+}
+
+static int get_changed_alloc_ns_list_log(int argc, char **argv, struct command *cmd,
+ struct plugin *plugin)
+{
+ return get_changed_ns_list_log(argc, argv, true);
+}
+
static int get_pred_lat_per_nvmset_log(int argc, char **argv,
struct command *cmd, struct plugin *plugin)
{