@@ -322,8 +322,9 @@ static int __discover(nvme_ctrl_t c, const struct nvme_fabrics_config *defcfg,
322322 return 0 ;
323323}
324324
325- static int discover_from_conf_file (nvme_host_t h , const char * desc ,
326- bool connect , const struct nvme_fabrics_config * defcfg )
325+ static int discover_from_conf_file (nvme_root_t r , nvme_host_t h ,
326+ const char * desc , bool connect ,
327+ const struct nvme_fabrics_config * defcfg )
327328{
328329 char * transport = NULL , * traddr = NULL , * trsvcid = NULL ;
329330 char * hostnqn = NULL , * hostid = NULL , * hostkey = NULL , * ctrlkey = NULL ;
@@ -388,7 +389,7 @@ static int discover_from_conf_file(nvme_host_t h, const char *desc,
388389 if (!transport && !traddr )
389390 goto next ;
390391
391- c = nvme_create_ctrl (subsysnqn , transport , traddr ,
392+ c = nvme_create_ctrl (r , subsysnqn , transport , traddr ,
392393 cfg .host_traddr , cfg .host_iface , trsvcid );
393394 if (!c )
394395 goto next ;
@@ -451,27 +452,22 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
451452 if (ret < 0 )
452453 return ret ;
453454
454- switch (verbose ) {
455- case 0 :
456- nvme_log_level = LOG_WARNING ;
457- break ;
458- case 1 :
459- nvme_log_level = LOG_NOTICE ;
460- break ;
461- case 2 :
462- nvme_log_level = LOG_INFO ;
463- break ;
464- default :
465- nvme_log_level = LOG_DEBUG ;
466- break ;
467- }
468- if (quiet )
469- nvme_log_level = LOG_ERR ;
470-
471455 if (!strcmp (config_file , "none" ))
472456 config_file = NULL ;
473457
474- r = nvme_scan (config_file );
458+ r = nvme_create_root (stderr , map_log_level (verbose , quiet ));
459+ if (!r ) {
460+ fprintf (stderr , "Failed to create topology root: %s\n" ,
461+ nvme_strerror (errno ));
462+ return - errno ;
463+ }
464+ ret = nvme_scan_topology (r , NULL );
465+ if (ret < 0 ) {
466+ fprintf (stderr , "Failed to scan topoplogy: %s\n" ,
467+ nvme_strerror (errno ));
468+ return ret ;
469+ }
470+
475471 if (persistent && !cfg .keep_alive_tmo )
476472 cfg .keep_alive_tmo = 30 ;
477473 if (!hostnqn )
@@ -493,7 +489,7 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
493489 nvme_host_set_dhchap_key (h , hostkey );
494490
495491 if (!device && !transport && !traddr ) {
496- ret = discover_from_conf_file (h , desc , connect , & cfg );
492+ ret = discover_from_conf_file (r , h , desc , connect , & cfg );
497493 goto out_free ;
498494 }
499495
@@ -539,7 +535,7 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
539535 }
540536 if (!c ) {
541537 /* No device or non-matching device, create a new controller */
542- c = nvme_create_ctrl (subsysnqn , transport , traddr ,
538+ c = nvme_create_ctrl (r , subsysnqn , transport , traddr ,
543539 cfg .host_traddr , cfg .host_iface , trsvcid );
544540 if (!c ) {
545541 ret = errno ;
@@ -616,21 +612,6 @@ int nvmf_connect(const char *desc, int argc, char **argv)
616612 else
617613 return EINVAL ;
618614
619- switch (verbose ) {
620- case 0 :
621- nvme_log_level = LOG_WARNING ;
622- break ;
623- case 1 :
624- nvme_log_level = LOG_NOTICE ;
625- break ;
626- case 2 :
627- nvme_log_level = LOG_INFO ;
628- break ;
629- default :
630- nvme_log_level = LOG_DEBUG ;
631- break ;
632- }
633-
634615 if (!subsysnqn ) {
635616 fprintf (stderr ,
636617 "required argument [--nqn | -n] not specified\n" );
@@ -655,7 +636,20 @@ int nvmf_connect(const char *desc, int argc, char **argv)
655636 if (!strcmp (config_file , "none" ))
656637 config_file = NULL ;
657638
658- r = nvme_scan (config_file );
639+ r = nvme_create_root (stderr , map_log_level (verbose , quiet ));
640+ if (!r ) {
641+ fprintf (stderr , "Failed to create topology root: %s\n" ,
642+ nvme_strerror (errno ));
643+ return - errno ;
644+ }
645+ ret = nvme_scan_topology (r , NULL );
646+ if (ret < 0 ) {
647+ fprintf (stderr , "Failed to scan topoplogy: %s\n" ,
648+ nvme_strerror (errno ));
649+ return ret ;
650+ }
651+ nvme_read_config (r , config_file );
652+
659653 if (!hostnqn )
660654 hostnqn = hnqn = nvmf_hostnqn_from_file ();
661655 if (!hostid )
@@ -667,7 +661,7 @@ int nvmf_connect(const char *desc, int argc, char **argv)
667661 }
668662 if (hostkey )
669663 nvme_host_set_dhchap_key (h , hostkey );
670- c = nvme_create_ctrl (subsysnqn , transport , traddr ,
664+ c = nvme_create_ctrl (r , subsysnqn , transport , traddr ,
671665 cfg .host_traddr , cfg .host_iface , trsvcid );
672666 if (!c ) {
673667 errno = ENOMEM ;
@@ -728,27 +722,25 @@ int nvmf_disconnect(const char *desc, int argc, char **argv)
728722 if (ret )
729723 return ret ;
730724
731- switch (cfg .verbose ) {
732- case 0 :
733- nvme_log_level = LOG_WARNING ;
734- break ;
735- case 1 :
736- nvme_log_level = LOG_NOTICE ;
737- break ;
738- case 2 :
739- nvme_log_level = LOG_INFO ;
740- break ;
741- default :
742- nvme_log_level = LOG_DEBUG ;
743- break ;
744- }
745-
746725 if (!cfg .nqn && !cfg .device ) {
747726 fprintf (stderr ,
748727 "Neither device name [--device | -d] nor NQN [--nqn | -n] provided\n" );
749728 return EINVAL ;
750729 }
751- r = nvme_scan (NULL );
730+
731+ r = nvme_create_root (stderr , map_log_level (cfg .verbose , false));
732+ if (!r ) {
733+ fprintf (stderr , "Failed to create topology root: %s\n" ,
734+ nvme_strerror (errno ));
735+ return - errno ;
736+ }
737+ ret = nvme_scan_topology (r , NULL );
738+ if (ret < 0 ) {
739+ fprintf (stderr , "Failed to scan topoplogy: %s\n" ,
740+ nvme_strerror (errno ));
741+ return ret ;
742+ }
743+
752744 if (cfg .nqn ) {
753745 int i = 0 ;
754746 char * n = cfg .nqn ;
@@ -824,26 +816,17 @@ int nvmf_disconnect_all(const char *desc, int argc, char **argv)
824816 if (ret )
825817 return ret ;
826818
827- switch (cfg .verbose ) {
828- case 0 :
829- nvme_log_level = LOG_WARNING ;
830- break ;
831- case 1 :
832- nvme_log_level = LOG_NOTICE ;
833- break ;
834- case 2 :
835- nvme_log_level = LOG_INFO ;
836- break ;
837- default :
838- nvme_log_level = LOG_DEBUG ;
839- break ;
840- }
841-
842- r = nvme_scan (NULL );
819+ r = nvme_create_root (stderr , map_log_level (cfg .verbose , false));
843820 if (!r ) {
844- fprintf (stderr , "Failed to scan nvme subsystem: %s\n" ,
821+ fprintf (stderr , "Failed to create topology root: %s\n" ,
822+ nvme_strerror (errno ));
823+ return - errno ;
824+ }
825+ ret = nvme_scan_topology (r , NULL );
826+ if (ret < 0 ) {
827+ fprintf (stderr , "Failed to scan topoplogy: %s\n" ,
845828 nvme_strerror (errno ));
846- return errno ;
829+ return ret ;
847830 }
848831
849832 nvme_for_each_host (r , h ) {
0 commit comments