Skip to content

Commit 8642daa

Browse files
martin-gpyigaw
authored andcommitted
netapp: print output for single device too
In addition to printing info of all ontap devices on the host, provide an option to print the output for the specified device alone. Signed-off-by: Martin George <marting@netapp.com>
1 parent cc87270 commit 8642daa

File tree

1 file changed

+49
-4
lines changed

1 file changed

+49
-4
lines changed

plugins/netapp/netapp-nvme.c

+49-4
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ static void netapp_smdevices_print(struct smdevice_info *devices, int count, int
317317
}
318318

319319
static void netapp_ontapdevices_print_regular(struct ontapdevice_info *devices,
320-
int count, int format)
320+
int count, int format, const char *devname)
321321
{
322322
char vsname[ONTAP_LABEL_LEN] = " ";
323323
char nspath[ONTAP_NS_PATHLEN] = " ";
@@ -346,6 +346,21 @@ static void netapp_ontapdevices_print_regular(struct ontapdevice_info *devices,
346346
}
347347

348348
for (i = 0; i < count; i++) {
349+
if (devname && !strcmp(devname, basename(devices[i].dev))) {
350+
/* found the device, fetch and print for that alone */
351+
netapp_get_ns_size(size, &lba, &devices[i].ns);
352+
nvme_uuid_to_string(devices[i].uuid, uuid_str);
353+
netapp_get_ontap_labels(vsname, nspath,
354+
devices[i].log_data);
355+
356+
printf(formatstr, devices[i].dev, vsname, nspath,
357+
devices[i].nsid, uuid_str, size);
358+
return;
359+
}
360+
}
361+
362+
for (i = 0; i < count; i++) {
363+
/* fetch info and print for all devices */
349364
netapp_get_ns_size(size, &lba, &devices[i].ns);
350365
nvme_uuid_to_string(devices[i].uuid, uuid_str);
351366
netapp_get_ontap_labels(vsname, nspath, devices[i].log_data);
@@ -356,7 +371,7 @@ static void netapp_ontapdevices_print_regular(struct ontapdevice_info *devices,
356371
}
357372

358373
static void netapp_ontapdevices_print_json(struct ontapdevice_info *devices,
359-
int count)
374+
int count, const char *devname)
360375
{
361376
struct json_object *root = NULL;
362377
struct json_object *json_devices = NULL;
@@ -372,6 +387,22 @@ static void netapp_ontapdevices_print_json(struct ontapdevice_info *devices,
372387
json_devices = json_create_array();
373388

374389
for (i = 0; i < count; i++) {
390+
if (devname && !strcmp(devname, basename(devices[i].dev))) {
391+
/* found the device, fetch info for that alone */
392+
netapp_get_ns_size(size, &lba, &devices[i].ns);
393+
nvme_uuid_to_string(devices[i].uuid, uuid_str);
394+
netapp_get_ontap_labels(vsname, nspath, devices[i].log_data);
395+
396+
netapp_ontapdevice_json(json_devices, devices[i].dev,
397+
vsname, nspath, devices[i].nsid,
398+
uuid_str, size, lba,
399+
le64_to_cpu(devices[i].ns.nsze));
400+
goto out;
401+
}
402+
}
403+
404+
for (i = 0; i < count; i++) {
405+
/* fetch info for all devices */
375406
netapp_get_ns_size(size, &lba, &devices[i].ns);
376407
nvme_uuid_to_string(devices[i].uuid, uuid_str);
377408
netapp_get_ontap_labels(vsname, nspath, devices[i].log_data);
@@ -382,6 +413,7 @@ static void netapp_ontapdevices_print_json(struct ontapdevice_info *devices,
382413
le64_to_cpu(devices[i].ns.nsze));
383414
}
384415

416+
out:
385417
/* complete the json output */
386418
json_object_add_value_array(root, "ONTAPdevices", json_devices);
387419
json_print_object(root, NULL);
@@ -626,6 +658,7 @@ static int netapp_ontapdevices(int argc, char **argv, struct command *command,
626658
int num, i, fd, ret, fmt;
627659
struct ontapdevice_info *ontapdevices;
628660
char path[264];
661+
char *devname = NULL;
629662
int num_ontapdevices = 0;
630663

631664
struct config {
@@ -651,6 +684,18 @@ static int netapp_ontapdevices(int argc, char **argv, struct command *command,
651684
return -EINVAL;
652685
}
653686

687+
if (optind < argc)
688+
devname = basename(argv[optind++]);
689+
690+
if (devname) {
691+
int subsys_num, nsid;
692+
693+
if (sscanf(devname, "nvme%dn%d", &subsys_num, &nsid) != 2) {
694+
fprintf(stderr, "Invalid device name %s\n", devname);
695+
return -EINVAL;
696+
}
697+
}
698+
654699
num = scandir(dev_path, &devices, netapp_nvme_filter, alphasort);
655700
if (num <= 0) {
656701
fprintf(stderr, "No NVMe devices detected.\n");
@@ -682,10 +727,10 @@ static int netapp_ontapdevices(int argc, char **argv, struct command *command,
682727
if (num_ontapdevices) {
683728
if (fmt == NNORMAL || fmt == NCOLUMN)
684729
netapp_ontapdevices_print_regular(ontapdevices,
685-
num_ontapdevices, fmt);
730+
num_ontapdevices, fmt, devname);
686731
else if (fmt == NJSON)
687732
netapp_ontapdevices_print_json(ontapdevices,
688-
num_ontapdevices);
733+
num_ontapdevices, devname);
689734
}
690735

691736
for (i = 0; i < num; i++)

0 commit comments

Comments
 (0)