git: 9c1bec9c21a2 - main - nvmecontrol: improve namespace size unit of devlist command output
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 08 Oct 2022 00:00:04 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=9c1bec9c21a2b14ac13b5f0ad6e447c082042e6a commit 9c1bec9c21a2b14ac13b5f0ad6e447c082042e6a Author: Wanpeng Qian <wanpengqian@gmail.com> AuthorDate: 2022-10-07 23:59:02 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2022-10-07 23:59:20 +0000 nvmecontrol: improve namespace size unit of devlist command output Add an option of -h --human to output human readable size unit instead of the fixed unit (MB). Signed-off-by: Wanpeng Qian <wanpengqian@gmail.com> Reviewed by: imp, bcr Differential Revision: https://reviews.freebsd.org/D32957 --- sbin/nvmecontrol/devlist.c | 37 +++++++++++++++++++++++++++++++------ sbin/nvmecontrol/nvmecontrol.8 | 8 ++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/sbin/nvmecontrol/devlist.c b/sbin/nvmecontrol/devlist.c index 35dd1b47a811..e9df5faadb12 100644 --- a/sbin/nvmecontrol/devlist.c +++ b/sbin/nvmecontrol/devlist.c @@ -34,6 +34,8 @@ __FBSDID("$FreeBSD$"); #include <err.h> #include <errno.h> #include <fcntl.h> +#include <stdbool.h> +#include <libutil.h> #include <paths.h> #include <stddef.h> #include <stdio.h> @@ -51,10 +53,27 @@ __FBSDID("$FreeBSD$"); static cmd_fn_t devlist; +static struct options { + bool human; +} opt = { + .human = false, +}; + +static const struct opts devlist_opts[] = { +#define OPT(l, s, t, opt, addr, desc) { l, s, t, &opt.addr, desc } + OPT("human", 'h', arg_none, opt, human, + "Show human readable disk size"), + { NULL, 0, arg_none, NULL, NULL } +}; +#undef OPT + static struct cmd devlist_cmd = { .name = "devlist", .fn = devlist, - .descr = "List NVMe controllers and namespaces" + .descr = "List NVMe controllers and namespaces", + .ctx_size = sizeof(opt), + .opts = devlist_opts, + .args = NULL, }; CMD_COMMAND(devlist_cmd); @@ -81,7 +100,9 @@ devlist(const struct cmd *f, int argc, char *argv[]) struct nvme_namespace_data nsdata; char name[64]; uint8_t mn[64]; + uint8_t buf[7]; uint32_t i; + uint64_t size; int ctrlr, fd, found, ret; if (arg_parse(argc, argv, f)) @@ -115,11 +136,15 @@ devlist(const struct cmd *f, int argc, char *argv[]) continue; sprintf(name, "%s%d%s%d", NVME_CTRLR_PREFIX, ctrlr, NVME_NS_PREFIX, i + 1); - printf(" %10s (%lldMB)\n", - name, - nsdata.nsze * - (long long)ns_get_sector_size(&nsdata) / - 1024 / 1024); + size = nsdata.nsze * (uint64_t)ns_get_sector_size(&nsdata); + if (opt.human) { + humanize_number(buf, sizeof(buf), size, "B", + HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL); + printf(" %10s (%s)\n", name, buf); + + } else { + printf(" %10s (%luMB)\n", name, size / 1024 / 1024); + } } close(fd); diff --git a/sbin/nvmecontrol/nvmecontrol.8 b/sbin/nvmecontrol/nvmecontrol.8 index d6b41889a727..3d130497f1bb 100644 --- a/sbin/nvmecontrol/nvmecontrol.8 +++ b/sbin/nvmecontrol/nvmecontrol.8 @@ -44,6 +44,7 @@ .Sh SYNOPSIS .Nm .Ic devlist +.Op Fl h .Nm .Ic identify .Op Fl v @@ -209,6 +210,13 @@ .Sh DESCRIPTION NVM Express (NVMe) is a storage protocol standard, for SSDs and other high-speed storage devices over PCI Express. +.Ss devlist +List all NVMe controllers and namespaces along with their device nodes. +With the +.Fl h +argument, use unit suffixes: Byte, Kibibyte, Mebibyte, Gibibyte, Tebibyte +and Pebibyte (based on powers of 1024) when showing the disk space. +By default, uses Mebibyte. .Ss identify The identify commands reports information from the drive's .Dv IDENTIFY_CONTROLLER