From 1c90432eee5f23966fac4645fbb301a7ffba58b0 Mon Sep 17 00:00:00 2001 From: Stephen Bates Date: Fri, 27 Feb 2015 00:34:45 +0000 Subject: [PATCH] Major improvements in list output Added improved output processing of the nvme list command. Improved formatting and added fields for the output. --- nvme.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 71 insertions(+), 7 deletions(-) diff --git a/nvme.c b/nvme.c index a915defb..68935dd9 100644 --- a/nvme.c +++ b/nvme.c @@ -30,6 +30,7 @@ #include #include #include +#include #ifdef LIBUDEV_EXISTS #include #endif @@ -44,6 +45,7 @@ #include "linux/nvme.h" #include "src/argconfig.h" +#include "src/suffix.h" static int fd; static struct stat nvme_stat; @@ -749,6 +751,54 @@ static int list_ns(int argc, char **argv) return err; } +struct list_item { + char node[1024]; + struct nvme_id_ctrl ctrl; + int nsid; + struct nvme_id_ns ns; + unsigned block; +}; + +static void print_list_item(struct list_item list_item) +{ + + double nsze = list_item.ns.nsze; + double nuse = list_item.ns.nuse; + long long int lba = list_item.ns.lbaf[list_item.ns.flbas].ds; + + lba = (1 << lba); + nsze *= lba; + nuse *= lba; + + const char *s_suffix = suffix_si_get(&nsze); + const char *u_suffix = suffix_si_get(&nuse); + const char *l_suffix = suffix_binary_get(&lba); + + char usage[128]; + sprintf(usage,"%3.2f %sB / %3.1f %sB", nuse, u_suffix, + nsze, s_suffix); + char format[128]; + sprintf(format,"%.0f %sB + %d B", (double)lba, l_suffix, + list_item.ns.lbaf[list_item.ns.flbas].ms); + char version[128]; + sprintf(version,"%d.%d", (list_item.ctrl.ver >> 16), + (list_item.ctrl.ver >> 8) & 0xff); + + fprintf(stdout, "%-8s\t%-.20s\t%-8s\t%-8d\t%-.20s\t%-.10s\n", list_item.node, + list_item.ctrl.mn, version, list_item.nsid, usage, format); +} + +static void print_list_items(struct list_item *list_items, unsigned len) +{ + fprintf(stdout,"%-8s\t%-20s\t%-8s\t%-8s\t%-26s\t%-10s\n", + "Node","Vendor","Version","Namepace", "Usage", "Format"); + fprintf(stdout,"%-8s\t%-20s\t%-8s\t%-8s\t%-26s\t%-10s\n", + "----","------","-------","--------","------","-------"); + for (unsigned i=0 ; i 0) + return err; + list_items[count].nsid = ioctl(fd, NVME_IOCTL_ID); + err = identify(list_items[count].nsid, + &list_items[count].ns, 0); if (err > 0) return err; - printf(" %s\t: NVM Express - %#x - %s - %x\n", node, - ctrl.vid, ctrl.mn, ctrl.ver); + strcpy(list_items[count].node, node); + list_items[count].block = S_ISBLK(nvme_stat.st_mode); + count++; } } udev_enumerate_unref(enumerate); udev_unref(udev); + if (count) + print_list_items(list_items, count); + else + fprintf(stdout,"No NVMe devices detected.\n"); + return 0; } #endif -- 2.50.1