From: jeffreyalien Date: Fri, 22 Sep 2017 21:51:45 +0000 (-0500) Subject: nvme-cli : Add Namespace Rescan Command X-Git-Tag: v1.4~2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d5cc3ca0b1b70fe89962e2e7ec8f9668829c9dbb;p=users%2Fsagi%2Fnvme-cli.git nvme-cli : Add Namespace Rescan Command Signed-off-by: jeffreyalien Signed-off-by: Keith Busch --- diff --git a/nvme-builtin.h b/nvme-builtin.h index b24c25b9..a96d42e5 100644 --- a/nvme-builtin.h +++ b/nvme-builtin.h @@ -46,6 +46,7 @@ COMMAND_LIST( ENTRY("sanitize-log", "Retrive sanitize log, show it", sanitize_log) ENTRY("reset", "Resets the controller", reset) ENTRY("subsystem-reset", "Resets the controller", subsystem_reset) + ENTRY("ns-rescan", "Rescans the NVME namespaces", ns_rescan) ENTRY("show-regs", "Shows the controller registers. Requires admin character device", show_registers) ENTRY("discover", "Discover NVMeoF subsystems", discover_cmd) ENTRY("connect-all", "Discover and Connect to NVMeoF subsystems", connect_all_cmd) diff --git a/nvme-ioctl.c b/nvme-ioctl.c index 52243fa2..1843faf7 100644 --- a/nvme-ioctl.c +++ b/nvme-ioctl.c @@ -58,6 +58,16 @@ int nvme_reset_controller(int fd) return ioctl(fd, NVME_IOCTL_RESET); } +int nvme_ns_rescan(int fd) +{ + int ret; + + ret = nvme_verify_chr(fd); + if (ret) + return ret; + return ioctl(fd, NVME_IOCTL_RESCAN); +} + int nvme_get_nsid(int fd) { static struct stat nvme_stat; diff --git a/nvme-ioctl.h b/nvme-ioctl.h index 4aee90af..6b3e0b44 100644 --- a/nvme-ioctl.h +++ b/nvme-ioctl.h @@ -115,6 +115,7 @@ int nvme_sec_recv(int fd, __u32 nsid, __u8 nssf, __u16 spsp, int nvme_subsystem_reset(int fd); int nvme_reset_controller(int fd); +int nvme_ns_rescan(int fd); int nvme_dir_send(int fd, __u32 nsid, __u16 dspec, __u8 dtype, __u8 doper, __u32 data_len, __u32 dw12, void *data, __u32 *result); diff --git a/nvme.c b/nvme.c index d747be45..74a4fd09 100644 --- a/nvme.c +++ b/nvme.c @@ -1501,6 +1501,27 @@ static int reset(int argc, char **argv, struct command *cmd, struct plugin *plug return err; } +static int ns_rescan(int argc, char **argv, struct command *cmd, struct plugin *plugin) +{ + const char *desc = "Rescans the NVMe namespaces\n"; + int err, fd; + + const struct argconfig_commandline_options command_line_options[] = { + {NULL} + }; + + fd = parse_and_open(argc, argv, desc, command_line_options, NULL, 0); + if (fd < 0) + return fd; + + err = nvme_ns_rescan(fd); + if (err < 0) { + perror("Namespace Rescan"); + return errno; + } + return err; +} + static int sanitize(int argc, char **argv, struct command *cmd, struct plugin *plugin) { char *desc = "Send a sanitize command.";