@@ -6909,9 +6909,51 @@ void nvme_show_lba_status(struct nvme_lba_status *list, unsigned long len,
69096909 }
69106910}
69116911
6912+ static void nvme_dev_full_path (nvme_ns_t n , char * path , size_t len )
6913+ {
6914+ struct stat st ;
6915+
6916+ snprintf (path , len , "/dev/%s" , nvme_ns_get_name (n ));
6917+ if (stat (path , & st ) == 0 )
6918+ return ;
6919+
6920+ snprintf (path , len , "/dev/spdk/%s" , nvme_ns_get_name (n ));
6921+ if (stat (path , & st ) == 0 )
6922+ return ;
6923+
6924+ /*
6925+ * We could start trying to search for it but let's make
6926+ * it simple and just don't show the path at all.
6927+ */
6928+ snprintf (path , len , "%s" , nvme_ns_get_name (n ));
6929+ }
6930+
6931+ static void nvme_generic_full_path (nvme_ns_t n , char * path , size_t len )
6932+ {
6933+ int head_instance ;
6934+ int instance ;
6935+ struct stat st ;
6936+
6937+ sscanf (nvme_ns_get_name (n ), "nvme%dn%d" , & instance , & head_instance );
6938+ snprintf (path , len , "/dev/ng%dn%d" , instance , head_instance );
6939+
6940+ if (stat (path , & st ) == 0 )
6941+ return ;
6942+
6943+ snprintf (path , len , "/dev/spkd/ng%dn%d" , instance , head_instance );
6944+ if (stat (path , & st ) == 0 )
6945+ return ;
6946+ /*
6947+ * We could start trying to search for it but let's make
6948+ * it simple and just don't show the path at all.
6949+ */
6950+ snprintf (path , len , "ng%dn%d" , instance , head_instance );
6951+ }
6952+
69126953void nvme_show_list_item (nvme_ns_t n )
69136954{
69146955 char usage [128 ] = { 0 }, format [128 ] = { 0 };
6956+ char devname [128 ] = { 0 }; char genname [128 ] = { 0 };
69156957
69166958 long long lba = nvme_ns_get_lba_size (n );
69176959 double nsze = nvme_ns_get_lba_count (n ) * lba ;
@@ -6926,8 +6968,11 @@ void nvme_show_list_item(nvme_ns_t n)
69266968 snprintf (format , sizeof (format ), "%3.0f %2sB + %2d B" , (double )lba ,
69276969 l_suffix , nvme_ns_get_meta_size (n ));
69286970
6971+ nvme_dev_full_path (n , devname , sizeof (devname ));
6972+ nvme_generic_full_path (n , genname , sizeof (genname ));
6973+
69296974 printf ("%-21s %-21s %-20s %-40s %-9d %-26s %-16s %-8s\n" ,
6930- nvme_ns_get_name ( n ), nvme_ns_get_generic_name ( n ) , nvme_ns_get_serial (n ),
6975+ devname , genname , nvme_ns_get_serial (n ),
69316976 nvme_ns_get_model (n ), nvme_ns_get_nsid (n ), usage , format ,
69326977 nvme_ns_get_firmware (n ));
69336978}
@@ -6958,13 +7003,12 @@ static void nvme_show_simple_list(nvme_root_t r)
69587003
69597004static void nvme_show_ns_details (nvme_ns_t n )
69607005{
6961- char usage [128 ] = { 0 }, format [128 ] = { 0 }, generic [128 ] = { 0 };
7006+ char usage [128 ] = { 0 }, format [128 ] = { 0 };
7007+ char devname [128 ] = { 0 }, genname [128 ] = { 0 };
69627008
69637009 long long lba = nvme_ns_get_lba_size (n );
69647010 double nsze = nvme_ns_get_lba_count (n ) * lba ;
69657011 double nuse = nvme_ns_get_lba_util (n ) * lba ;
6966- int instance ;
6967- int head_instance ;
69687012
69697013 const char * s_suffix = suffix_si_get (& nsze );
69707014 const char * u_suffix = suffix_si_get (& nuse );
@@ -6974,11 +7018,11 @@ static void nvme_show_ns_details(nvme_ns_t n)
69747018 sprintf (format ,"%3.0f %2sB + %2d B" , (double )lba , l_suffix ,
69757019 nvme_ns_get_meta_size (n ));
69767020
6977- sscanf ( nvme_ns_get_name ( n ), "nvme%dn%d" , & instance , & head_instance );
6978- sprintf ( generic , "ng%dn%d" , instance , head_instance );
7021+ nvme_dev_full_path ( n , devname , sizeof ( devname ) );
7022+ nvme_generic_full_path ( n , genname , sizeof ( genname ) );
69797023
6980- printf ("%-12s %-12s %-8x %-26s %-16s " , nvme_ns_get_name ( n ) ,
6981- generic , nvme_ns_get_nsid (n ), usage , format );
7024+ printf ("%-12s %-12s %-8x %-26s %-16s " , devname ,
7025+ genname , nvme_ns_get_nsid (n ), usage , format );
69827026}
69837027
69847028static void nvme_show_detailed_list (nvme_root_t r )
@@ -7178,13 +7222,16 @@ static void json_detail_list(nvme_root_t r)
71787222static struct json_object * json_list_item (nvme_ns_t n )
71797223{
71807224 struct json_object * jdevice = json_create_object ();
7225+ char devname [128 ] = { 0 };
71817226
71827227 long long lba = nvme_ns_get_lba_size (n );
71837228 double nsze = nvme_ns_get_lba_count (n ) * lba ;
71847229 double nuse = nvme_ns_get_lba_util (n ) * lba ;
71857230
7231+ nvme_dev_full_path (n , devname , sizeof (devname ));
7232+
71867233 json_object_add_value_int (jdevice , "NameSpace" , nvme_ns_get_nsid (n ));
7187- json_object_add_value_string (jdevice , "DevicePath" , nvme_ns_get_name ( n ) );
7234+ json_object_add_value_string (jdevice , "DevicePath" , devname );
71887235 json_object_add_value_string (jdevice , "Firmware" , nvme_ns_get_firmware (n ));
71897236 json_object_add_value_string (jdevice , "ModelNumber" , nvme_ns_get_model (n ));
71907237 json_object_add_value_string (jdevice , "SerialNumber" , nvme_ns_get_serial (n ));
0 commit comments