bool human_readable;
};
-static struct stat nvme_stat;
-const char *devicename;
+struct nvme_dev _nvme_dev;
+struct nvme_dev *nvme_dev = &_nvme_dev;
static const char nvme_version_string[] = NVME_VERSION;
static bool is_chardev(void)
{
- return S_ISCHR(nvme_stat.st_mode);
+ return S_ISCHR(nvme_dev->stat.st_mode);
}
static bool is_blkdev(void)
{
- return S_ISBLK(nvme_stat.st_mode);
+ return S_ISBLK(nvme_dev->stat.st_mode);
}
static int open_dev(char *dev, int flags)
{
int err, fd;
- devicename = basename(dev);
+ nvme_dev->name = basename(dev);
err = open(dev, flags);
if (err < 0)
goto perror;
fd = err;
- err = fstat(fd, &nvme_stat);
+ err = fstat(fd, &nvme_dev->stat);
if (err < 0) {
close(fd);
goto perror;
err = nvme_get_log_smart(fd, cfg.namespace_id, false, &smart_log);
if (!err)
- nvme_show_smart_log(&smart_log, cfg.namespace_id, devicename,
- flags);
+ nvme_show_smart_log(&smart_log, cfg.namespace_id,
+ nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_ana(fd, lsp, true, 0, ana_log_len, ana_log);
if (!err) {
- nvme_show_ana_log(ana_log, devicename, flags, ana_log_len);
+ nvme_show_ana_log(ana_log, nvme_dev->name, flags, ana_log_len);
} else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_endurance_group(fd, cfg.group_id, &endurance_log);
if (!err)
- nvme_show_endurance_log(&endurance_log, cfg.group_id, devicename, flags);
+ nvme_show_endurance_log(&endurance_log, cfg.group_id,
+ nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
int nvme_command_set_supported;
int other_command_sets_supported;
nvme_root = nvme_scan(NULL);
- bar = mmap_registers(nvme_root, devicename);
+ bar = mmap_registers(nvme_root, nvme_dev->name);
nvme_free_tree(nvme_root);
if (!bar) {
err = nvme_get_log_supported_log_pages(fd, false, &supports);
if (!err)
- nvme_show_supported_log(&supports, devicename, flags);
+ nvme_show_supported_log(&supports, nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_error(fd, cfg.log_entries, false, err_log);
if (!err)
- nvme_show_error_log(err_log, cfg.log_entries, devicename, flags);
+ nvme_show_error_log(err_log, cfg.log_entries,
+ nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_fw_slot(fd, false, &fw_log);
if (!err)
- nvme_show_fw_log(&fw_log, devicename, flags);
+ nvme_show_fw_log(&fw_log, nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_changed_ns_list(fd, true, &changed_ns_list_log);
if (!err)
- nvme_show_changed_ns_list_log(&changed_ns_list_log, devicename,
- flags);
+ nvme_show_changed_ns_list_log(&changed_ns_list_log,
+ nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_predictable_lat_nvmset(fd, cfg.nvmset_id, &plpns_log);
if (!err)
nvme_show_predictable_latency_per_nvmset(&plpns_log,
- cfg.nvmset_id, devicename, flags);
+ cfg.nvmset_id, nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_predictable_lat_event(fd, cfg.rae, 0, log_size, pea_log);
if (!err)
nvme_show_predictable_latency_event_agg_log(pea_log, cfg.log_entries,
- log_size, devicename, flags);
+ log_size, nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
}
nvme_show_persistent_event_log(pevent_log_info, cfg.action,
- cfg.log_len, devicename, flags);
+ cfg.log_len, nvme_dev->name, flags);
} else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_endurance_grp_evt(fd, cfg.rae, 0, log_size, endurance_log);
if (!err)
nvme_show_endurance_group_event_agg_log(endurance_log, cfg.log_entries,
- log_size, devicename, flags);
+ log_size, nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_lba_status(fd, cfg.rae, 0, lslplen, lab_status);
if (!err)
- nvme_show_lba_status_log(lab_status, lslplen, devicename, flags);
+ nvme_show_lba_status_log(lab_status, lslplen, nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_reservation(fd, false, &resv);
if (!err)
- nvme_show_resv_notif_log(&resv, devicename, flags);
+ nvme_show_resv_notif_log(&resv, nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
sizeof(boot) + bpsz,
(struct nvme_boot_partition *)bp_log);
if (!err)
- nvme_show_boot_part_log(&bp_log, devicename, flags, sizeof(boot) + bpsz);
+ nvme_show_boot_part_log(&bp_log, nvme_dev->name, flags,
+ sizeof(boot) + bpsz);
else if (err > 0)
nvme_show_status(err);
else
if (!err) {
if (!cfg.raw_binary) {
printf("Device:%s log-id:%d namespace-id:%#x\n",
- devicename, cfg.log_id,
+ nvme_dev->name, cfg.log_id,
cfg.namespace_id);
d(log, cfg.log_len, 16, 1);
} else
err = nvme_get_log_sanitize(fd, cfg.rae, &sanitize_log);
if (!err)
- nvme_show_sanitize_log(&sanitize_log, devicename, flags);
+ nvme_show_sanitize_log(&sanitize_log, nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_fid_supported_effects(fd, false, &fid_support_log);
if (!err)
- nvme_show_fid_support_effects_log(&fid_support_log, devicename, flags);
+ nvme_show_fid_support_effects_log(&fid_support_log,
+ nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_mi_cmd_supported_effects(fd, false, &mi_cmd_support_log);
if (!err)
- nvme_show_mi_cmd_support_effects_log(&mi_cmd_support_log, devicename, flags);
+ nvme_show_mi_cmd_support_effects_log(&mi_cmd_support_log,
+ nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
const char *desc = "Retrieve information for subsystems";
const char *verbose = "Increase output verbosity";
nvme_scan_filter_t filter = NULL;
+ char *devname;
int err;
int nsid = NVME_NSID_ALL;
if (err < 0)
goto ret;
- devicename = NULL;
+ devname = NULL;
if (optind < argc)
- devicename = basename(argv[optind++]);
+ devname = basename(argv[optind++]);
err = flags = validate_output_format(cfg.output_format);
if (flags < 0)
r = nvme_create_root(stderr, map_log_level(cfg.verbose, false));
if (!r) {
- if (devicename)
+ if (devname)
fprintf(stderr,
"Failed to scan nvme subsystem for %s\n",
- devicename);
+ devname);
else
fprintf(stderr, "Failed to scan nvme subsystem\n");
err = -errno;
goto ret;
}
- if (devicename) {
+ if (devname) {
int subsys_num;
- if (sscanf(devicename,"nvme%dn%d",
- &subsys_num, &nsid) != 2) {
- fprintf(stderr, "Invalid device name %s\n", devicename);
+ if (sscanf(devname, "nvme%dn%d", &subsys_num, &nsid) != 2) {
+ fprintf(stderr, "Invalid device name %s\n", devname);
err = -EINVAL;
goto ret;
}
filter = nvme_match_device_filter;
}
- err = nvme_scan_topology(r, filter, (void *)devicename);
+ err = nvme_scan_topology(r, filter, (void *)devname);
if (err) {
fprintf(stderr, "Failed to scan topology: %s\n",
nvme_strerror(errno));
goto close_fd;
}
err = 0;
- printf("%s: namespace-id:%d\n", devicename, nsid);
+ printf("%s: namespace-id:%d\n", nvme_dev->name, nsid);
close_fd:
close(fd);
err = nvme_get_log_device_self_test(fd, &log);
if (!err)
nvme_show_self_test_log(&log, cfg.dst_entries, 0,
- devicename, flags);
+ nvme_dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
void *membase;
int fd;
- c = nvme_scan_ctrl(r, devicename);
+ c = nvme_scan_ctrl(r, nvme_dev->name);
if (c) {
snprintf(path, sizeof(path), "%s/device/resource0",
nvme_ctrl_get_sysfs_dir(c));
nvme_free_ctrl(c);
} else {
- n = nvme_scan_namespace(devicename);
+ n = nvme_scan_namespace(nvme_dev->name);
if (!n) {
- fprintf(stderr, "Unable to find %s\n", devicename);
+ fprintf(stderr, "Unable to find %s\n", nvme_dev->name);
return NULL;
}
snprintf(path, sizeof(path), "%s/device/device/resource0",
fd = open(path, O_RDONLY);
if (fd < 0) {
fprintf(stderr, "%s did not find a pci resource, open failed %s\n",
- devicename, strerror(errno));
+ nvme_dev->name, strerror(errno));
return NULL;
}
membase = mmap(NULL, getpagesize(), PROT_READ, MAP_SHARED, fd, 0);
if (membase == MAP_FAILED) {
- fprintf(stderr, "%s failed to map. ", devicename);
+ fprintf(stderr, "%s failed to map. ", nvme_dev->name);
fprintf(stderr, "Did your kernel enable CONFIG_IO_STRICT_DEVMEM?\n");
membase = NULL;
}
err = nvme_get_properties(fd, &bar);
if (err) {
- bar = mmap_registers(r, devicename);
+ bar = mmap_registers(r, nvme_dev->name);
fabrics = false;
if (bar)
err = 0;
if (!cfg.force) {
fprintf(stderr, "You are about to format %s, namespace %#x%s.\n",
- devicename, cfg.namespace_id,
+ nvme_dev->name, cfg.namespace_id,
cfg.namespace_id == NVME_NSID_ALL ? "(ALL namespaces)" : "");
- nvme_show_relatives(devicename);
+ nvme_show_relatives(nvme_dev->name);
fprintf(stderr, "WARNING: Format may irrevocably delete this device's data.\n"
"You have 10 seconds to press Ctrl-C to cancel this operation.\n\n"
"Use the force [--force] option to suppress this warning.\n");
nvme_ns_t n = NULL;
int fd, ret;
- c = nvme_scan_ctrl(r, devicename);
+ c = nvme_scan_ctrl(r, nvme_dev->name);
if (c) {
snprintf(vid, sizeof(vid), "%s/device/vendor",
nvme_ctrl_get_sysfs_dir(c));
nvme_ctrl_get_sysfs_dir(c));
nvme_free_ctrl(c);
} else {
- n = nvme_scan_namespace(devicename);
+ n = nvme_scan_namespace(nvme_dev->name);
if (!n) {
- fprintf(stderr, "Unable to find %s\n", devicename);
+ fprintf(stderr, "Unable to find %s\n", nvme_dev->name);
return -1;
}
static int wdc_print_latency_monitor_log_normal(int fd, struct wdc_ssd_latency_monitor_log *log_data)
{
printf("Latency Monitor/C3 Log Page Data \n");
- printf(" Controller : %s\n", devicename);
+ printf(" Controller : %s\n", nvme_dev->name);
int err = -1, i, j;
struct nvme_id_ctrl ctrl;
char ts_buf[128];
if (bd_data->field_id == 0x00) {
raw = (__u64*)&bd_data->raw_value[0];
printf("Additional Smart Log for NVME device:%s namespace-id:%x\n",
- devicename, WDC_DE_GLOBAL_NSID);
+ nvme_dev->name, WDC_DE_GLOBAL_NSID);
printf("key normalized raw\n");
printf("program_fail_count : %3"PRIu8"%% %"PRIu64"\n",
bd_data->normalized_value, le64_to_cpu(*raw & 0x00FFFFFFFFFFFFFF));
if (fmt == NORMAL) {
/* print the temperature stats */
printf("Temperature Stats for NVME device:%s namespace-id:%x\n",
- devicename, WDC_DE_GLOBAL_NSID);
+ nvme_dev->name, WDC_DE_GLOBAL_NSID);
printf("Current Composite Temperature : %d °C\n", temperature);
printf("WCTEMP : %"PRIu16" °C\n", id_ctrl.wctemp - 273);
capabilities = wdc_get_drive_capabilities(r, fd);
/* print command and supported status */
- printf("WDC Plugin Capabilities for NVME device:%s\n", devicename);
+ printf("WDC Plugin Capabilities for NVME device:%s\n", nvme_dev->name);
printf("cap-diag : %s\n",
capabilities & WDC_DRIVE_CAP_CAP_DIAG ? "Supported" : "Not Supported");
printf("drive-log : %s\n",