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 ));
@@ -1421,27 +1425,38 @@ static void sanitize_discovery_log_entry(struct libnvme_global_ctx *ctx,
14211425 }
14221426}
14231427
1424- __public int nvmf_get_discovery_log (libnvme_ctrl_t c , struct nvmf_discovery_log * * logp ,
1425- int max_retries )
1428+ __public int nvmf_discovery_args_create (struct nvmf_discovery_args * * argsp )
14261429{
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- };
1430+ struct nvmf_discovery_args * args ;
14331431
1432+ if (!argsp )
1433+ return - EINVAL ;
1434+
1435+ args = calloc (1 , sizeof (* args ));
1436+ if (!args )
1437+ return - ENOMEM ;
14341438
1435- return nvmf_get_discovery_wargs (& args , logp );
1439+ args -> max_retries = 6 ;
1440+ args -> timeout = NVME_DEFAULT_IOCTL_TIMEOUT ;
1441+ args -> lsp = NVMF_LOG_DISC_LSP_NONE ;
1442+
1443+ * argsp = args ;
1444+ return 0 ;
1445+ }
1446+
1447+ __public void nvmf_discovery_args_free (struct nvmf_discovery_args * args )
1448+ {
1449+ free (args );
14361450}
14371451
1438- __public int nvmf_get_discovery_wargs (struct libnvme_get_discovery_args * args ,
1439- struct nvmf_discovery_log * * logp )
1452+ __public int nvmf_get_discovery_log (libnvme_ctrl_t ctrl ,
1453+ struct nvmf_discovery_args * args ,
1454+ struct nvmf_discovery_log * * logp )
14401455{
14411456 struct nvmf_discovery_log * log ;
14421457 int err ;
14431458
1444- err = nvme_discovery_log (args , & log );
1459+ err = nvme_discovery_log (ctrl , args , & log );
14451460 if (err )
14461461 return err ;
14471462
@@ -1452,6 +1467,7 @@ __public int nvmf_get_discovery_wargs(struct libnvme_get_discovery_args *args,
14521467 return 0 ;
14531468}
14541469
1470+
14551471/**
14561472 * nvmf_get_tel() - Calculate the amount of memory needed for a DIE.
14571473 * @hostsymname: Symbolic name (may be NULL)
@@ -1985,15 +2001,13 @@ static int _nvmf_discovery(struct libnvme_global_ctx *ctx,
19852001 uint64_t numrec ;
19862002 int err ;
19872003
1988- struct libnvme_get_discovery_args args = {
1989- .c = c ,
1990- .args_size = sizeof (args ),
2004+ struct nvmf_discovery_args args = {
19912005 .max_retries = fctx -> default_max_discovery_retries ,
19922006 .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
19932007 .lsp = NVMF_LOG_DISC_LSP_NONE ,
19942008 };
19952009
1996- err = nvmf_get_discovery_wargs ( & args , & log );
2010+ err = nvme_discovery_log ( c , & args , & log );
19972011 if (err ) {
19982012 libnvme_msg (ctx , LOG_ERR , "failed to get discovery log: %s\n" ,
19992013 libnvme_strerror (err ));
@@ -2668,15 +2682,13 @@ static int nbft_discovery(struct libnvme_global_ctx *ctx,
26682682 int ret ;
26692683 int i ;
26702684
2671- struct libnvme_get_discovery_args args = {
2672- .c = c ,
2673- .args_size = sizeof (args ),
2685+ struct nvmf_discovery_args args = {
26742686 .max_retries = 10 /* MAX_DISC_RETRIES */ ,
26752687 .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
26762688 .lsp = NVMF_LOG_DISC_LSP_NONE ,
26772689 };
26782690
2679- ret = nvmf_get_discovery_wargs ( & args , & log );
2691+ ret = nvme_discovery_log ( c , & args , & log );
26802692 if (ret ) {
26812693 libnvme_msg (ctx , LOG_ERR ,
26822694 "Discovery Descriptor %d: failed to get discovery log: %s\n" ,
0 commit comments