From: Daniel Wagner Date: Tue, 8 Aug 2023 06:37:19 +0000 (+0200) Subject: fabrics: Read the supported options lazy X-Git-Tag: v1.6~56 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=3137c68b47b8e9c961454c72983db1f318754154;p=users%2Fsagi%2Flibnvme.git fabrics: Read the supported options lazy Read the options in when we need the for the first time. Reported-by: Sagi Grimberg Signed-off-by: Daniel Wagner Reviewed-by: Chaitanya Kulkarni --- diff --git a/src/nvme/fabrics.c b/src/nvme/fabrics.c index 800293e2..b04eb44a 100644 --- a/src/nvme/fabrics.c +++ b/src/nvme/fabrics.c @@ -357,10 +357,16 @@ static int __add_argument(char **argstr, const char *tok, const char *arg) return 0; } +static int __nvmf_supported_options(nvme_root_t r); +#define nvmf_check_option(r, tok) \ +({ \ + !__nvmf_supported_options(r) && (r)->options->tok; \ +}) + #define add_bool_argument(o, argstr, tok, arg) \ ({ \ int ret; \ - if (r->options->tok) { \ + if (nvmf_check_option(r, tok)) { \ ret = __add_bool_argument(argstr, \ stringify(tok), \ arg); \ @@ -376,7 +382,7 @@ static int __add_argument(char **argstr, const char *tok, const char *arg) #define add_int_argument(o, argstr, tok, arg, allow_zero) \ ({ \ int ret; \ - if (r->options->tok) { \ + if (nvmf_check_option(r, tok)) { \ ret = __add_int_argument(argstr, \ stringify(tok), \ arg, \ @@ -393,7 +399,7 @@ static int __add_argument(char **argstr, const char *tok, const char *arg) #define add_int_or_minus_one_argument(o, argstr, tok, arg) \ ({ \ int ret; \ - if (r->options->tok) { \ + if (nvmf_check_option(r, tok)) { \ ret = __add_int_or_minus_one_argument(argstr, \ stringify(tok), \ arg); \ @@ -409,7 +415,7 @@ static int __add_argument(char **argstr, const char *tok, const char *arg) #define add_argument(r, argstr, tok, arg) \ ({ \ int ret; \ - if (r->options->tok) { \ + if (nvmf_check_option(r, tok)) { \ ret = __add_argument(argstr, \ stringify(tok), \ arg); \ @@ -913,9 +919,6 @@ int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c, free(traddr); } - ret = __nvmf_supported_options(h->r); - if (ret) - return ret; ret = build_options(h, c, &argstr); if (ret) return ret;