[dm-devel] [PATCH 12/35] multipathd: add and set cli_handlers in a single step
mwilck at suse.com
mwilck at suse.com
Fri Sep 10 11:40:57 UTC 2021
From: Martin Wilck <mwilck at suse.com>
Modify set_handler_callback() such that a missing slot is created
if no matching slot is found. This way, we can skip the initialization
with NULL handlers on startup.
Signed-off-by: Martin Wilck <mwilck at suse.com>
---
multipathd/cli.c | 85 +++++++-----------------------------------------
multipathd/cli.h | 6 ++--
2 files changed, 15 insertions(+), 76 deletions(-)
diff --git a/multipathd/cli.c b/multipathd/cli.c
index 5213813..7020d2b 100644
--- a/multipathd/cli.c
+++ b/multipathd/cli.c
@@ -100,26 +100,20 @@ find_handler (uint64_t fp)
}
int
-set_handler_callback (uint64_t fp, cli_handler *fn)
+__set_handler_callback (uint64_t fp, cli_handler *fn, bool locked)
{
- struct handler * h = find_handler(fp);
+ struct handler *h = find_handler(fp);
- if (!h)
+ if (!h) {
+ add_handler(fp, fn);
+ h = find_handler(fp);
+ }
+ if (!h) {
+ condlog(0, "%s: failed to set handler for code %"PRIu64,
+ __func__, fp);
return 1;
- h->fn = fn;
- h->locked = 1;
- return 0;
-}
-
-int
-set_unlocked_handler_callback (uint64_t fp, cli_handler *fn)
-{
- struct handler * h = find_handler(fp);
-
- if (!h)
- return 1;
- h->fn = fn;
- h->locked = 0;
+ }
+ h->locked = locked;
return 0;
}
@@ -513,63 +507,6 @@ cli_init (void) {
if (alloc_handlers())
return 1;
- add_handler(LIST+PATHS, NULL);
- add_handler(LIST+PATHS+FMT, NULL);
- add_handler(LIST+PATHS+RAW+FMT, NULL);
- add_handler(LIST+PATH, NULL);
- add_handler(LIST+STATUS, NULL);
- add_handler(LIST+DAEMON, NULL);
- add_handler(LIST+MAPS, NULL);
- add_handler(LIST+MAPS+STATUS, NULL);
- add_handler(LIST+MAPS+STATS, NULL);
- add_handler(LIST+MAPS+FMT, NULL);
- add_handler(LIST+MAPS+RAW+FMT, NULL);
- add_handler(LIST+MAPS+TOPOLOGY, NULL);
- add_handler(LIST+MAPS+JSON, NULL);
- add_handler(LIST+TOPOLOGY, NULL);
- add_handler(LIST+MAP+TOPOLOGY, NULL);
- add_handler(LIST+MAP+JSON, NULL);
- add_handler(LIST+MAP+FMT, NULL);
- add_handler(LIST+MAP+RAW+FMT, NULL);
- add_handler(LIST+CONFIG, NULL);
- add_handler(LIST+CONFIG+LOCAL, NULL);
- add_handler(LIST+BLACKLIST, NULL);
- add_handler(LIST+DEVICES, NULL);
- add_handler(LIST+WILDCARDS, NULL);
- add_handler(RESET+MAPS+STATS, NULL);
- add_handler(RESET+MAP+STATS, NULL);
- add_handler(ADD+PATH, NULL);
- add_handler(DEL+PATH, NULL);
- add_handler(ADD+MAP, NULL);
- add_handler(DEL+MAP, NULL);
- add_handler(DEL+MAPS, NULL);
- add_handler(SWITCH+MAP+GROUP, NULL);
- add_handler(RECONFIGURE, NULL);
- add_handler(SUSPEND+MAP, NULL);
- add_handler(RESUME+MAP, NULL);
- add_handler(RESIZE+MAP, NULL);
- add_handler(RESET+MAP, NULL);
- add_handler(RELOAD+MAP, NULL);
- add_handler(DISABLEQ+MAP, NULL);
- add_handler(RESTOREQ+MAP, NULL);
- add_handler(DISABLEQ+MAPS, NULL);
- add_handler(RESTOREQ+MAPS, NULL);
- add_handler(REINSTATE+PATH, NULL);
- add_handler(FAIL+PATH, NULL);
- add_handler(QUIT, NULL);
- add_handler(SHUTDOWN, NULL);
- add_handler(GETPRSTATUS+MAP, NULL);
- add_handler(SETPRSTATUS+MAP, NULL);
- add_handler(UNSETPRSTATUS+MAP, NULL);
- add_handler(GETPRKEY+MAP, NULL);
- add_handler(SETPRKEY+MAP+KEY, NULL);
- add_handler(UNSETPRKEY+MAP, NULL);
- add_handler(FORCEQ+DAEMON, NULL);
- add_handler(RESTOREQ+DAEMON, NULL);
- add_handler(SETMARGINAL+PATH, NULL);
- add_handler(UNSETMARGINAL+PATH, NULL);
- add_handler(UNSETMARGINAL+MAP, NULL);
-
return 0;
}
diff --git a/multipathd/cli.h b/multipathd/cli.h
index 3dac1b4..dbb75be 100644
--- a/multipathd/cli.h
+++ b/multipathd/cli.h
@@ -134,8 +134,10 @@ struct handler {
int alloc_handlers (void);
int add_handler (uint64_t fp, cli_handler *fn);
-int set_handler_callback (uint64_t fp, cli_handler *fn);
-int set_unlocked_handler_callback (uint64_t fp, cli_handler *fn);
+int __set_handler_callback (uint64_t fp, cli_handler *fn, bool locked);
+#define set_handler_callback(fp, fn) __set_handler_callback(fp, fn, true)
+#define set_unlocked_handler_callback(fp, fn) __set_handler_callback(fp, fn, false)
+
int parse_cmd (char * cmd, char ** reply, int * len, void *, int);
int load_keys (void);
char * get_keyparam (vector v, uint64_t code);
--
2.33.0
More information about the dm-devel
mailing list