sd_notify_status() is very similar with daemon_status(), except DAEMON_IDLE and DAEMON_RUNNING state. As suggested by Martin, we can create the sd notification string in a dynamic buffer, and treat DAEMON_IDLE and DAEMON_RUNNING cases first. Then, we can use daemon_status_msg[state] for other cases. Signed-off-by: Zhiqiang Liu <liuzhiqiang26@xxxxxxxxxx> Signed-off-by: lixiaokeng <lixiaokeng@xxxxxxxxxx> --- multipathd/main.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/multipathd/main.c b/multipathd/main.c index 62cf4ff4..4ba015bb 100644 --- a/multipathd/main.c +++ b/multipathd/main.c @@ -85,6 +85,7 @@ #define FILE_NAME_SIZE 256 #define CMDSIZE 160 +#define MSG_SIZE 64 #define LOG_MSG(lvl, verb, pp) \ do { \ @@ -177,28 +178,12 @@ daemon_status(void) * I love you too, systemd ... */ #ifdef USE_SYSTEMD -static const char * -sd_notify_status(enum daemon_status state) -{ - switch (state) { - case DAEMON_INIT: - return "STATUS=init"; - case DAEMON_START: - return "STATUS=startup"; - case DAEMON_CONFIGURE: - return "STATUS=configure"; - case DAEMON_IDLE: - case DAEMON_RUNNING: - return "STATUS=up"; - case DAEMON_SHUTDOWN: - return "STATUS=shutdown"; - } - return NULL; -} - static void do_sd_notify(enum daemon_status old_state, enum daemon_status new_state) { + char notify_msg[MSG_SIZE]; + const char prefix[] = "STATUS="; + const char *msg = NULL; /* * Checkerloop switches back and forth between idle and running state. * No need to tell systemd each time. @@ -207,7 +192,18 @@ static void do_sd_notify(enum daemon_status old_state, if ((new_state == DAEMON_IDLE || new_state == DAEMON_RUNNING) && (old_state == DAEMON_IDLE || old_state == DAEMON_RUNNING)) return; - sd_notify(0, sd_notify_status(new_state)); + + if (new_state == DAEMON_IDLE || new_state == DAEMON_RUNNING) + msg = "up"; + else + msg = daemon_status_msg[new_state]; + + if (snprintf(notify_msg, MSG_SIZE, "%s%s", prefix, msg) >= MSG_SIZE) { + condlog(2, "len of msg is should be shorter than %d", MSG_SIZE); + return; + } + + sd_notify(0, notify_msg); } #endif -- 2.24.0.windows.2 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel