bool human_readable;
};
-static struct nvme_dev _nvme_dev;
-static struct nvme_dev *nvme_dev = &_nvme_dev;
-
static const char nvme_version_string[] = NVME_VERSION;
static struct plugin builtin = {
#endif
}
-static bool is_chardev(void)
+static bool is_chardev(struct nvme_dev *dev)
{
- return S_ISCHR(nvme_dev->stat.st_mode);
+ return S_ISCHR(dev->stat.st_mode);
}
-static bool is_blkdev(void)
+static bool is_blkdev(struct nvme_dev *dev)
{
- return S_ISBLK(nvme_dev->stat.st_mode);
+ return S_ISBLK(dev->stat.st_mode);
}
static int open_dev(struct nvme_dev **devp, char *dev, int flags)
{
+ static struct nvme_dev _nvme_dev;
+ static struct nvme_dev *nvme_dev = &_nvme_dev;
+
int err, fd;
/* Temporary: we use the global nvme_dev pointer for the nvme device.
close(fd);
goto perror;
}
- if (!is_chardev() && !is_blkdev()) {
+ if (!is_chardev(nvme_dev) && !is_blkdev(nvme_dev)) {
fprintf(stderr, "%s is not a block or character device\n", dev);
close(fd);
return -ENODEV;
err = nvme_get_log_smart(dev->fd, cfg.namespace_id, false, &smart_log);
if (!err)
nvme_show_smart_log(&smart_log, cfg.namespace_id,
- nvme_dev->name, flags);
+ dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_ana(dev->fd, lsp, true, 0, ana_log_len, ana_log);
if (!err) {
- nvme_show_ana_log(ana_log, nvme_dev->name, flags, ana_log_len);
+ nvme_show_ana_log(ana_log, dev->name, flags, ana_log_len);
} else if (err > 0)
nvme_show_status(err);
else
&endurance_log);
if (!err)
nvme_show_endurance_log(&endurance_log, cfg.group_id,
- nvme_dev->name, flags);
+ dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_supported_log_pages(dev->fd, false, &supports);
if (!err)
- nvme_show_supported_log(&supports, nvme_dev->name, flags);
+ nvme_show_supported_log(&supports, dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_error(dev->fd, cfg.log_entries, false, err_log);
if (!err)
nvme_show_error_log(err_log, cfg.log_entries,
- nvme_dev->name, flags);
+ dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_fw_slot(dev->fd, false, &fw_log);
if (!err)
- nvme_show_fw_log(&fw_log, nvme_dev->name, flags);
+ nvme_show_fw_log(&fw_log, dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_changed_ns_list(dev->fd, true, &changed_ns_list_log);
if (!err)
nvme_show_changed_ns_list_log(&changed_ns_list_log,
- nvme_dev->name, flags);
+ dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
&plpns_log);
if (!err)
nvme_show_predictable_latency_per_nvmset(&plpns_log,
- cfg.nvmset_id, nvme_dev->name, flags);
+ cfg.nvmset_id, dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
pea_log);
if (!err)
nvme_show_predictable_latency_event_agg_log(pea_log, cfg.log_entries,
- log_size, nvme_dev->name, flags);
+ log_size, 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, nvme_dev->name, flags);
+ cfg.log_len, dev->name, flags);
} else if (err > 0)
nvme_show_status(err);
else
endurance_log);
if (!err)
nvme_show_endurance_group_event_agg_log(endurance_log, cfg.log_entries,
- log_size, nvme_dev->name, flags);
+ log_size, dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_lba_status(dev->fd, cfg.rae, 0, lslplen, lab_status);
if (!err)
- nvme_show_lba_status_log(lab_status, lslplen, nvme_dev->name, flags);
+ nvme_show_lba_status_log(lab_status, lslplen, dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_reservation(dev->fd, false, &resv);
if (!err)
- nvme_show_resv_notif_log(&resv, nvme_dev->name, flags);
+ nvme_show_resv_notif_log(&resv, 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, nvme_dev->name, flags,
+ nvme_show_boot_part_log(&bp_log, dev->name, flags,
sizeof(boot) + bpsz);
else if (err > 0)
nvme_show_status(err);
if (!err) {
if (!cfg.raw_binary) {
printf("Device:%s log-id:%d namespace-id:%#x\n",
- nvme_dev->name, cfg.log_id,
+ dev->name, cfg.log_id,
cfg.namespace_id);
d(log, cfg.log_len, 16, 1);
} else
err = nvme_get_log_sanitize(dev->fd, cfg.rae, &sanitize_log);
if (!err)
- nvme_show_sanitize_log(&sanitize_log, nvme_dev->name, flags);
+ nvme_show_sanitize_log(&sanitize_log, dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_fid_supported_effects(dev->fd, false, &fid_support_log);
if (!err)
nvme_show_fid_support_effects_log(&fid_support_log,
- nvme_dev->name, flags);
+ dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
err = nvme_get_log_mi_cmd_supported_effects(dev->fd, false, &mi_cmd_support_log);
if (!err)
nvme_show_mi_cmd_support_effects_log(&mi_cmd_support_log,
- nvme_dev->name, flags);
+ dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
goto close_fd;
}
err = 0;
- printf("%s: namespace-id:%d\n", nvme_dev->name, nsid);
+ printf("%s: namespace-id:%d\n", dev->name, nsid);
close_fd:
dev_close(dev);
err = nvme_get_log_device_self_test(dev->fd, &log);
if (!err)
nvme_show_self_test_log(&log, cfg.dst_entries, 0,
- nvme_dev->name, flags);
+ dev->name, flags);
else if (err > 0)
nvme_show_status(err);
else
if (!cfg.force) {
fprintf(stderr, "You are about to format %s, namespace %#x%s.\n",
- nvme_dev->name, cfg.namespace_id,
+ dev->name, cfg.namespace_id,
cfg.namespace_id == NVME_NSID_ALL ? "(ALL namespaces)" : "");
- nvme_show_relatives(nvme_dev->name);
+ nvme_show_relatives(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");
else {
printf("Success formatting namespace:%x\n", cfg.namespace_id);
if (cfg.lbaf != prev_lbaf){
- if (is_chardev()) {
+ if (is_chardev(dev)) {
if (ioctl(dev->fd, NVME_IOCTL_RESCAN) < 0) {
fprintf(stderr, "failed to rescan namespaces\n");
err = -errno;
}
}
}
- if (cfg.reset && is_chardev())
+ if (cfg.reset && is_chardev(dev))
nvme_ctrl_reset(dev->fd);
}