]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
fabrics: Read the supported options lazy
authorDaniel Wagner <dwagner@suse.de>
Tue, 8 Aug 2023 06:37:19 +0000 (08:37 +0200)
committerDaniel Wagner <wagi@monom.org>
Wed, 16 Aug 2023 08:48:55 +0000 (10:48 +0200)
Read the options in when we need the for the first time.

Reported-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Daniel Wagner <dwagner@suse.de>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
src/nvme/fabrics.c

index 800293e2a8e7750856119d2b2e12fe4fe3de3bad..b04eb44a87e242f468f45bd174e0d4537e0204c3 100644 (file)
@@ -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;