3636
3737#include "cleanup.h"
3838#include "private.h"
39+ #include "private-fabrics.h"
3940#include "compiler_attributes.h"
4041
4142const char * nvmf_dev = "/dev/nvme-fabrics" ;
@@ -1297,16 +1298,19 @@ static int nvmf_connect_disc_entry(libnvme_host_t h,
12971298 */
12981299#define DISCOVERY_HEADER_LEN 20
12991300
1300- static int nvme_discovery_log (const struct libnvme_get_discovery_args * args ,
1301+ static int nvme_discovery_log (libnvme_ctrl_t ctrl ,
1302+ const struct nvmf_discovery_args * args ,
13011303 struct nvmf_discovery_log * * logp )
13021304{
1303- struct libnvme_global_ctx * ctx = args -> c -> ctx ;
1305+ struct libnvme_global_ctx * ctx = ctrl -> ctx ;
13041306 struct nvmf_discovery_log * log ;
13051307 int retries = 0 ;
13061308 int err ;
1307- const char * name = libnvme_ctrl_get_name (args -> c );
1309+ const char * name = libnvme_ctrl_get_name (ctrl );
13081310 uint64_t genctr , numrec ;
1309- struct libnvme_transport_handle * hdl = libnvme_ctrl_get_transport_handle (args -> c );
1311+ struct libnvme_transport_handle * hdl ;
1312+
1313+ hdl = libnvme_ctrl_get_transport_handle (ctrl );
13101314 struct libnvme_passthru_cmd cmd ;
13111315
13121316 log = __libnvme_alloc (sizeof (* log ));
@@ -1319,7 +1323,6 @@ static int nvme_discovery_log(const struct libnvme_get_discovery_args *args,
13191323 libnvme_msg (ctx , LOG_DEBUG , "%s: get header (try %d/%d)\n" ,
13201324 name , retries , args -> max_retries );
13211325 nvme_init_get_log_discovery (& cmd , 0 , log , DISCOVERY_HEADER_LEN );
1322- cmd .timeout_ms = args -> timeout ;
13231326 err = libnvme_get_log (hdl , & cmd , false, DISCOVERY_HEADER_LEN );
13241327 if (err ) {
13251328 libnvme_msg (ctx , LOG_INFO ,
@@ -1351,7 +1354,6 @@ static int nvme_discovery_log(const struct libnvme_get_discovery_args *args,
13511354 name , numrec , genctr );
13521355
13531356 nvme_init_get_log_discovery (& cmd , sizeof (* log ), log -> entries , entries_size );
1354- cmd .timeout_ms = args -> timeout ;
13551357 cmd .cdw10 |= NVME_FIELD_ENCODE (args -> lsp ,
13561358 NVME_LOG_CDW10_LSP_SHIFT ,
13571359 NVME_LOG_CDW10_LSP_MASK );
@@ -1370,7 +1372,6 @@ static int nvme_discovery_log(const struct libnvme_get_discovery_args *args,
13701372 libnvme_msg (ctx , LOG_DEBUG , "%s: get header again\n" , name );
13711373
13721374 nvme_init_get_log_discovery (& cmd , 0 , log , DISCOVERY_HEADER_LEN );
1373- cmd .timeout_ms = args -> timeout ;
13741375 err = libnvme_get_log (hdl , & cmd , false, DISCOVERY_HEADER_LEN );
13751376 if (err ) {
13761377 libnvme_msg (ctx , LOG_INFO ,
@@ -1421,37 +1422,55 @@ static void sanitize_discovery_log_entry(struct libnvme_global_ctx *ctx,
14211422 }
14221423}
14231424
1424- __public int nvmf_get_discovery_log (libnvme_ctrl_t c , struct nvmf_discovery_log * * logp ,
1425- int max_retries )
1425+ __public int nvmf_discovery_args_create (struct nvmf_discovery_args * * argsp )
14261426{
1427- struct libnvme_get_discovery_args args = {
1428- .c = c ,
1429- .max_retries = max_retries ,
1430- .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
1431- .lsp = NVMF_LOG_DISC_LSP_NONE ,
1432- };
1427+ struct nvmf_discovery_args * args ;
1428+
1429+ if (!argsp )
1430+ return - EINVAL ;
1431+
1432+ args = calloc (1 , sizeof (* args ));
1433+ if (!args )
1434+ return - ENOMEM ;
14331435
1436+ args -> max_retries = 6 ;
1437+ args -> lsp = NVMF_LOG_DISC_LSP_NONE ;
14341438
1435- return nvmf_get_discovery_wargs (& args , logp );
1439+ * argsp = args ;
1440+ return 0 ;
1441+ }
1442+
1443+ __public void nvmf_discovery_args_free (struct nvmf_discovery_args * args )
1444+ {
1445+ free (args );
14361446}
14371447
1438- __public int nvmf_get_discovery_wargs (struct libnvme_get_discovery_args * args ,
1439- struct nvmf_discovery_log * * logp )
1448+ __public int nvmf_get_discovery_log (libnvme_ctrl_t ctrl ,
1449+ const struct nvmf_discovery_args * args ,
1450+ struct nvmf_discovery_log * * logp )
14401451{
1452+ static const struct nvmf_discovery_args defaults = {
1453+ .max_retries = 6 ,
1454+ .lsp = NVMF_LOG_DISC_LSP_NONE ,
1455+ };
14411456 struct nvmf_discovery_log * log ;
14421457 int err ;
14431458
1444- err = nvme_discovery_log (args , & log );
1459+ if (!args )
1460+ args = & defaults ;
1461+
1462+ err = nvme_discovery_log (ctrl , args , & log );
14451463 if (err )
14461464 return err ;
14471465
14481466 for (int i = 0 ; i < le64_to_cpu (log -> numrec ); i ++ )
1449- sanitize_discovery_log_entry (args -> c -> ctx , & log -> entries [i ]);
1467+ sanitize_discovery_log_entry (ctrl -> ctx , & log -> entries [i ]);
14501468
14511469 * logp = log ;
14521470 return 0 ;
14531471}
14541472
1473+
14551474/**
14561475 * nvmf_get_tel() - Calculate the amount of memory needed for a DIE.
14571476 * @hostsymname: Symbolic name (may be NULL)
@@ -1985,15 +2004,12 @@ static int _nvmf_discovery(struct libnvme_global_ctx *ctx,
19852004 uint64_t numrec ;
19862005 int err ;
19872006
1988- struct libnvme_get_discovery_args args = {
1989- .c = c ,
1990- .args_size = sizeof (args ),
2007+ struct nvmf_discovery_args args = {
19912008 .max_retries = fctx -> default_max_discovery_retries ,
1992- .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
19932009 .lsp = NVMF_LOG_DISC_LSP_NONE ,
19942010 };
19952011
1996- err = nvmf_get_discovery_wargs ( & args , & log );
2012+ err = nvme_discovery_log ( c , & args , & log );
19972013 if (err ) {
19982014 libnvme_msg (ctx , LOG_ERR , "failed to get discovery log: %s\n" ,
19992015 libnvme_strerror (err ));
@@ -2668,15 +2684,12 @@ static int nbft_discovery(struct libnvme_global_ctx *ctx,
26682684 int ret ;
26692685 int i ;
26702686
2671- struct libnvme_get_discovery_args args = {
2672- .c = c ,
2673- .args_size = sizeof (args ),
2687+ struct nvmf_discovery_args args = {
26742688 .max_retries = 10 /* MAX_DISC_RETRIES */ ,
2675- .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
26762689 .lsp = NVMF_LOG_DISC_LSP_NONE ,
26772690 };
26782691
2679- ret = nvmf_get_discovery_wargs ( & args , & log );
2692+ ret = nvme_discovery_log ( c , & args , & log );
26802693 if (ret ) {
26812694 libnvme_msg (ctx , LOG_ERR ,
26822695 "Discovery Descriptor %d: failed to get discovery log: %s\n" ,
0 commit comments