@@ -82,6 +82,7 @@ struct connect_args {
8282 char * trsvcid ;
8383 char * host_traddr ;
8484 char * host_iface ;
85+ char * subsystype ;
8586 struct connect_args * next ;
8687 struct connect_args * tail ;
8788};
@@ -296,6 +297,13 @@ static bool ctrl_matches_connectargs(const char *name, struct connect_args *args
296297 addr = nvme_get_ctrl_attr (path , "address" );
297298 cargs .subsysnqn = nvme_get_ctrl_attr (path , "subsysnqn" );
298299 cargs .transport = nvme_get_ctrl_attr (path , "transport" );
300+ cargs .subsystype = nvme_get_ctrl_attr (path , "subsystype" );
301+ if (!cargs .subsystype ) {
302+ if (!strcmp (cargs .subsysnqn , NVME_DISC_SUBSYS_NAME ))
303+ cargs .subsystype = strdup ("discovery" );
304+ else
305+ cargs .subsystype = strdup ("nvm" );
306+ }
299307
300308 if (!addr || !cargs .subsysnqn || !cargs .transport ) {
301309 fprintf (stderr , "nvme_get_ctrl_attr failed\n" );
@@ -307,7 +315,7 @@ static bool ctrl_matches_connectargs(const char *name, struct connect_args *args
307315 cargs .host_traddr = parse_conn_arg (addr , ' ' , conarg_host_traddr );
308316 cargs .host_iface = parse_conn_arg (addr , ' ' , conarg_host_iface );
309317
310- if (!strcmp (cargs .subsysnqn , NVME_DISC_SUBSYS_NAME )) {
318+ if (!strcmp (cargs .subsystype , "discovery" )) {
311319 char * kato_str = nvme_get_ctrl_attr (path , "kato" ), * p ;
312320 unsigned int kato = 0 ;
313321
@@ -416,6 +424,7 @@ static void destruct_connect_args(struct connect_args *cargs)
416424 free (cargs -> trsvcid );
417425 free (cargs -> host_traddr );
418426 free (cargs -> host_iface );
427+ free (cargs -> subsystype );
419428}
420429
421430static void free_connect_args (struct connect_args * cargs )
0 commit comments