Additional patches for 8.10.0.z lvm2
Resolves: RHEL-8288
This commit is contained in:
parent
09f8953388
commit
89242f8fa0
31
0131-dmeventd-move-var-set-to-locked-section.patch
Normal file
31
0131-dmeventd-move-var-set-to-locked-section.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From 068897bbd15e16b666079952f465239d933d2228 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Thu, 31 Aug 2023 18:45:30 +0200
|
||||||
|
Subject: [PATCH 131/139] dmeventd: move var set to locked section
|
||||||
|
|
||||||
|
It should not change the actual code flow, however make the
|
||||||
|
set of the current_event variable inside locked section.
|
||||||
|
|
||||||
|
(cherry picked from commit 29630b2d7fcb28827f0c928edd6cd638f6ea2591)
|
||||||
|
---
|
||||||
|
daemons/dmeventd/dmeventd.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
|
||||||
|
index d89ab4af8..fa60b6f31 100644
|
||||||
|
--- a/daemons/dmeventd/dmeventd.c
|
||||||
|
+++ b/daemons/dmeventd/dmeventd.c
|
||||||
|
@@ -1043,9 +1043,9 @@ static void *_monitor_thread(void *arg)
|
||||||
|
_unlock_mutex();
|
||||||
|
|
||||||
|
_do_process_event(thread);
|
||||||
|
- thread->current_events = 0; /* Current events processed */
|
||||||
|
|
||||||
|
_lock_mutex();
|
||||||
|
+ thread->current_events = 0; /* Current events processed */
|
||||||
|
thread->processing = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
50
0132-dmeventd-use-return.patch
Normal file
50
0132-dmeventd-use-return.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From d7f61ce3933f75f3ebcd74c2a815cdcea28ea8d5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Mon, 25 Sep 2023 11:51:25 +0200
|
||||||
|
Subject: [PATCH 132/139] dmeventd: use return
|
||||||
|
|
||||||
|
Use 'return' instead of calling exit() when possible.
|
||||||
|
|
||||||
|
(cherry picked from commit c31dcf3632988ef4e8d1c62a685f4c436b5f115e)
|
||||||
|
---
|
||||||
|
daemons/dmeventd/dmeventd.c | 10 +++++-----
|
||||||
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
|
||||||
|
index fa60b6f31..9d7118ced 100644
|
||||||
|
--- a/daemons/dmeventd/dmeventd.c
|
||||||
|
+++ b/daemons/dmeventd/dmeventd.c
|
||||||
|
@@ -2169,17 +2169,17 @@ int main(int argc, char *argv[])
|
||||||
|
.server_path = DM_EVENT_FIFO_SERVER
|
||||||
|
};
|
||||||
|
time_t now, idle_exit_timeout = DMEVENTD_IDLE_EXIT_TIMEOUT;
|
||||||
|
- opterr = 0;
|
||||||
|
- optind = 0;
|
||||||
|
|
||||||
|
+ optopt = optind = opterr = 0;
|
||||||
|
+ optarg = (char*) "";
|
||||||
|
while ((opt = getopt(argc, argv, "?fhVdlR")) != EOF) {
|
||||||
|
switch (opt) {
|
||||||
|
case 'h':
|
||||||
|
_usage(argv[0], stdout);
|
||||||
|
- exit(EXIT_SUCCESS);
|
||||||
|
+ return EXIT_SUCCESS;
|
||||||
|
case '?':
|
||||||
|
_usage(argv[0], stderr);
|
||||||
|
- exit(EXIT_SUCCESS);
|
||||||
|
+ return EXIT_SUCCESS;
|
||||||
|
case 'R':
|
||||||
|
_restart++;
|
||||||
|
break;
|
||||||
|
@@ -2194,7 +2194,7 @@ int main(int argc, char *argv[])
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf("dmeventd version: %s\n", DM_LIB_VERSION);
|
||||||
|
- exit(EXIT_SUCCESS);
|
||||||
|
+ return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
117
0133-dmeventd-unregister-all-devices-on-restart.patch
Normal file
117
0133-dmeventd-unregister-all-devices-on-restart.patch
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
From bc94a75dc4705023d7e074363867129563b0d469 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Mon, 25 Sep 2023 11:42:53 +0200
|
||||||
|
Subject: [PATCH 133/139] dmeventd: unregister all devices on restart
|
||||||
|
|
||||||
|
Instead of just exiting in the middle of monitoring,
|
||||||
|
unregisted all monitored devices first and then exit.
|
||||||
|
|
||||||
|
To speedup this path, all send internal SIGINT when thread
|
||||||
|
unregiters itself, to wakup-up main sleeping loop.
|
||||||
|
|
||||||
|
(cherry picked from commit 637d812df56440d792ab403f63e50583d78cdfef)
|
||||||
|
---
|
||||||
|
daemons/dmeventd/dmeventd.c | 55 ++++++++++++++++++++++++++++---------
|
||||||
|
1 file changed, 42 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
|
||||||
|
index 9d7118ced..e05545403 100644
|
||||||
|
--- a/daemons/dmeventd/dmeventd.c
|
||||||
|
+++ b/daemons/dmeventd/dmeventd.c
|
||||||
|
@@ -997,6 +997,8 @@ static void _monitor_unregister(void *arg)
|
||||||
|
_lock_mutex();
|
||||||
|
thread->status = DM_THREAD_DONE; /* Last access to thread memory! */
|
||||||
|
_unlock_mutex();
|
||||||
|
+ if (_exit_now) /* Exit is already in-progress, wake-up sleeping select() */
|
||||||
|
+ kill(getpid(), SIGINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Device monitoring thread. */
|
||||||
|
@@ -1161,6 +1163,36 @@ static int _unregister_for_event(struct message_data *message_data)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void _unregister_all_threads(void)
|
||||||
|
+{
|
||||||
|
+ struct thread_status *thread, *tmp;
|
||||||
|
+
|
||||||
|
+ _lock_mutex();
|
||||||
|
+
|
||||||
|
+ dm_list_iterate_items_safe(thread, tmp, &_thread_registry)
|
||||||
|
+ _update_events(thread, 0);
|
||||||
|
+
|
||||||
|
+ _unlock_mutex();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void _wait_for_new_pid(void)
|
||||||
|
+{
|
||||||
|
+ unsigned long st_ino = 0;
|
||||||
|
+ struct stat st;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < 400000; ++i) {
|
||||||
|
+ if (lstat(DMEVENTD_PIDFILE, &st) == 0) {
|
||||||
|
+ if (!st_ino)
|
||||||
|
+ st_ino = st.st_ino;
|
||||||
|
+ else if (st_ino != st.st_ino)
|
||||||
|
+ break; /* different pidfile */
|
||||||
|
+ } else if (errno == ENOENT)
|
||||||
|
+ break; /* pidfile is removed */
|
||||||
|
+ usleep(100);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Register for an event.
|
||||||
|
*
|
||||||
|
@@ -1677,9 +1709,9 @@ static void _process_request(struct dm_event_fifos *fifos)
|
||||||
|
free(msg.data);
|
||||||
|
|
||||||
|
if (cmd == DM_EVENT_CMD_DIE) {
|
||||||
|
- if (unlink(DMEVENTD_PIDFILE))
|
||||||
|
- log_sys_error("unlink", DMEVENTD_PIDFILE);
|
||||||
|
- _exit(0);
|
||||||
|
+ _unregister_all_threads();
|
||||||
|
+ _exit_now = DM_SCHEDULED_EXIT;
|
||||||
|
+ log_info("dmeventd exiting for restart.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1769,7 +1801,8 @@ static void _init_thread_signals(void)
|
||||||
|
*/
|
||||||
|
static void _exit_handler(int sig __attribute__((unused)))
|
||||||
|
{
|
||||||
|
- _exit_now = DM_SIGNALED_EXIT;
|
||||||
|
+ if (!_exit_now)
|
||||||
|
+ _exit_now = DM_SIGNALED_EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
@@ -2116,19 +2149,15 @@ static void _restart_dmeventd(void)
|
||||||
|
((e = getenv(SD_ACTIVATION_ENV_VAR_NAME)) && strcmp(e, "1")))
|
||||||
|
_systemd_activation = 1;
|
||||||
|
|
||||||
|
- for (i = 0; i < 10; ++i) {
|
||||||
|
- if ((access(DMEVENTD_PIDFILE, F_OK) == -1) && (errno == ENOENT))
|
||||||
|
- break;
|
||||||
|
- usleep(10);
|
||||||
|
- }
|
||||||
|
+ fini_fifos(&fifos);
|
||||||
|
|
||||||
|
- if (!_systemd_activation) {
|
||||||
|
- fini_fifos(&fifos);
|
||||||
|
+ /* Give a few seconds dmeventd to finish */
|
||||||
|
+ _wait_for_new_pid();
|
||||||
|
+
|
||||||
|
+ if (!_systemd_activation)
|
||||||
|
return;
|
||||||
|
- }
|
||||||
|
|
||||||
|
/* Reopen fifos. */
|
||||||
|
- fini_fifos(&fifos);
|
||||||
|
if (!init_fifos(&fifos)) {
|
||||||
|
fprintf(stderr, "Could not initiate communication with new instance of dmeventd.\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
149
0134-dmeventd-info-status-report.patch
Normal file
149
0134-dmeventd-info-status-report.patch
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
From 7dfa1f3d0d03cc682bb3bb503d2ad44ff4e836a6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Mon, 25 Sep 2023 11:49:14 +0200
|
||||||
|
Subject: [PATCH 134/139] dmeventd: info status report
|
||||||
|
|
||||||
|
To quickly get info about some internal dmeventd status,
|
||||||
|
implment 'dmeventd -i' support.
|
||||||
|
|
||||||
|
Reported messages are some 'raw' internal informations mainly
|
||||||
|
useful to developers.
|
||||||
|
|
||||||
|
(cherry picked from commit 80d34abf4974e45471f947fb2b85146a30feb87d)
|
||||||
|
---
|
||||||
|
daemons/dmeventd/dmeventd.c | 69 +++++++++++++++++++++++++++++++++++--
|
||||||
|
man/dmeventd.8_main | 7 ++++
|
||||||
|
2 files changed, 74 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
|
||||||
|
index e05545403..46c34ada2 100644
|
||||||
|
--- a/daemons/dmeventd/dmeventd.c
|
||||||
|
+++ b/daemons/dmeventd/dmeventd.c
|
||||||
|
@@ -2063,6 +2063,68 @@ static int _reinstate_registrations(struct dm_event_fifos *fifos)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int _info_dmeventd(const char *name, struct dm_event_fifos *fifos)
|
||||||
|
+{
|
||||||
|
+ struct dm_event_daemon_message msg = { 0 };
|
||||||
|
+ int i, count = 0;
|
||||||
|
+ char *line;
|
||||||
|
+ int version;
|
||||||
|
+ int ret = 0;
|
||||||
|
+
|
||||||
|
+ /* Get the list of registrations from the running daemon. */
|
||||||
|
+ if (!init_fifos(fifos)) {
|
||||||
|
+ fprintf(stderr, "Could not initiate communication with existing dmeventd.\n");
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!dm_event_get_version(fifos, &version)) {
|
||||||
|
+ fprintf(stderr, "Could not communicate with existing dmeventd.\n");
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (version < 1) {
|
||||||
|
+ fprintf(stderr, "The running dmeventd instance is too old.\n"
|
||||||
|
+ "Protocol version %d (required: 1). Action cancelled.\n", version);
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (daemon_talk(fifos, &msg, DM_EVENT_CMD_GET_STATUS, "-", "-", 0, 0)) {
|
||||||
|
+ fprintf(stderr, "Failed to acquire status from existing dmeventd.\n");
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ line = strchr(msg.data, ' ') + 1;
|
||||||
|
+ for (i = 0; msg.data[i]; ++i)
|
||||||
|
+ if (msg.data[i] == ';') {
|
||||||
|
+ msg.data[i] = 0;
|
||||||
|
+ if (!count)
|
||||||
|
+ printf("%s is monitoring:\n", name);
|
||||||
|
+ printf("%s\n", line);
|
||||||
|
+ line = msg.data + i + 1;
|
||||||
|
+ ++count;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ free(msg.data);
|
||||||
|
+
|
||||||
|
+ if (!count)
|
||||||
|
+ printf("%s does not monitor any device.\n", name);
|
||||||
|
+
|
||||||
|
+ if (version >= 2) {
|
||||||
|
+ if (daemon_talk(fifos, &msg, DM_EVENT_CMD_GET_PARAMETERS, "-", "-", 0, 0)) {
|
||||||
|
+ fprintf(stderr, "Failed to acquire parameters from existing dmeventd.\n");
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+ printf("%s internal status: %s\n", name, msg.data);
|
||||||
|
+ free(msg.data);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ret = 1;
|
||||||
|
+out:
|
||||||
|
+ fini_fifos(fifos);
|
||||||
|
+
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void _restart_dmeventd(void)
|
||||||
|
{
|
||||||
|
struct dm_event_fifos fifos = {
|
||||||
|
@@ -2178,10 +2240,11 @@ bad:
|
||||||
|
static void _usage(char *prog, FILE *file)
|
||||||
|
{
|
||||||
|
fprintf(file, "Usage:\n"
|
||||||
|
- "%s [-d [-d [-d]]] [-f] [-h] [-l] [-R] [-V] [-?]\n\n"
|
||||||
|
+ "%s [-d [-d [-d]]] [-f] [-h] [i] [-l] [-R] [-V] [-?]\n\n"
|
||||||
|
" -d Log debug messages to syslog (-d, -dd, -ddd)\n"
|
||||||
|
" -f Don't fork, run in the foreground\n"
|
||||||
|
" -h Show this help information\n"
|
||||||
|
+ " -i Query running instance of dmeventd for info\n"
|
||||||
|
" -l Log to stdout,stderr instead of syslog\n"
|
||||||
|
" -? Show this help information on stderr\n"
|
||||||
|
" -R Restart dmeventd\n"
|
||||||
|
@@ -2201,7 +2264,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
|
optopt = optind = opterr = 0;
|
||||||
|
optarg = (char*) "";
|
||||||
|
- while ((opt = getopt(argc, argv, "?fhVdlR")) != EOF) {
|
||||||
|
+ while ((opt = getopt(argc, argv, "?fhiVdlR")) != EOF) {
|
||||||
|
switch (opt) {
|
||||||
|
case 'h':
|
||||||
|
_usage(argv[0], stdout);
|
||||||
|
@@ -2209,6 +2272,8 @@ int main(int argc, char *argv[])
|
||||||
|
case '?':
|
||||||
|
_usage(argv[0], stderr);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
+ case 'i':
|
||||||
|
+ return _info_dmeventd(argv[0], &fifos) ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
|
case 'R':
|
||||||
|
_restart++;
|
||||||
|
break;
|
||||||
|
diff --git a/man/dmeventd.8_main b/man/dmeventd.8_main
|
||||||
|
index 77b07e4d8..75926bae5 100644
|
||||||
|
--- a/man/dmeventd.8_main
|
||||||
|
+++ b/man/dmeventd.8_main
|
||||||
|
@@ -12,6 +12,7 @@ dmeventd \(em Device-mapper event daemon
|
||||||
|
.RB [ -d ]]]
|
||||||
|
.RB [ -f ]
|
||||||
|
.RB [ -h ]
|
||||||
|
+.RB [ -i ]
|
||||||
|
.RB [ -l ]
|
||||||
|
.RB [ -R ]
|
||||||
|
.RB [ -V ]
|
||||||
|
@@ -44,6 +45,12 @@ Don't fork, run in the foreground.
|
||||||
|
Show help information.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
+.B -i
|
||||||
|
+Query the running daemon instance for the status informations. The format is
|
||||||
|
+internal and unstable and it is targeted for developers.
|
||||||
|
+Format may change between versions.
|
||||||
|
+.
|
||||||
|
+.TP
|
||||||
|
.B -l
|
||||||
|
Log through stdout and stderr instead of syslog.
|
||||||
|
This option works only with option -f, otherwise it is ignored.
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
68
0135-configure.ac-add-with-dmeventd-exit-on-path.patch
Normal file
68
0135-configure.ac-add-with-dmeventd-exit-on-path.patch
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
From ebe966020d2378bcc1a7f61551d4278bde6b8f6c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Mon, 25 Sep 2023 15:48:06 +0200
|
||||||
|
Subject: [PATCH 135/139] configure.ac: add --with-dmeventd-exit-on-path
|
||||||
|
|
||||||
|
(cherry picked from commit 744cdc3ba885f9dc8e1444cb77a190d5ea0007ed)
|
||||||
|
---
|
||||||
|
configure.ac | 32 +++++++++++++++++++-------------
|
||||||
|
1 file changed, 19 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 6cdf1a7e6..01e0b4d51 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -1715,24 +1715,29 @@ AC_DEFINE_UNQUOTED(LVMIMPORTVDO_PATH, ["$LVMIMPORTVDO_PATH"], [Path to lvm_impor
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
dnl -- dmeventd pidfile and executable path
|
||||||
|
+AC_ARG_WITH(dmeventd-pidfile,
|
||||||
|
+ AS_HELP_STRING([--with-dmeventd-pidfile=PATH],
|
||||||
|
+ [dmeventd pidfile [PID_DIR/dmeventd.pid]]),
|
||||||
|
+ DMEVENTD_PIDFILE=$withval,
|
||||||
|
+ DMEVENTD_PIDFILE="$DEFAULT_PID_DIR/dmeventd.pid")
|
||||||
|
+AC_ARG_WITH(dmeventd-path,
|
||||||
|
+ AS_HELP_STRING([--with-dmeventd-path=PATH],
|
||||||
|
+ [dmeventd path [EPREFIX/sbin/dmeventd]]),
|
||||||
|
+ DMEVENTD_PATH=$withval,
|
||||||
|
+ DMEVENTD_PATH="$SBINDIR/dmeventd")
|
||||||
|
+AC_ARG_WITH(dmeventd-exit-on-path,
|
||||||
|
+ AS_HELP_STRING([--with-dmeventd-exit-on-path=PATH],
|
||||||
|
+ [Default path to exit-on file in dmeventd [/run/nologin]]),
|
||||||
|
+ DEFAULT_DMEVENTD_EXIT_ON_PATH=$withval,
|
||||||
|
+ DEFAULT_DMEVENTD_EXIT_ON_PATH="/run/nologin")
|
||||||
|
+
|
||||||
|
if test "$BUILD_DMEVENTD" = yes; then
|
||||||
|
- AC_ARG_WITH(dmeventd-pidfile,
|
||||||
|
- AS_HELP_STRING([--with-dmeventd-pidfile=PATH],
|
||||||
|
- [dmeventd pidfile [PID_DIR/dmeventd.pid]]),
|
||||||
|
- DMEVENTD_PIDFILE=$withval,
|
||||||
|
- DMEVENTD_PIDFILE="$DEFAULT_PID_DIR/dmeventd.pid")
|
||||||
|
AC_DEFINE_UNQUOTED(DMEVENTD_PIDFILE, ["$DMEVENTD_PIDFILE"],
|
||||||
|
[Path to dmeventd pidfile.])
|
||||||
|
-fi
|
||||||
|
-
|
||||||
|
-if test "$BUILD_DMEVENTD" = yes; then
|
||||||
|
- AC_ARG_WITH(dmeventd-path,
|
||||||
|
- AS_HELP_STRING([--with-dmeventd-path=PATH],
|
||||||
|
- [dmeventd path [EPREFIX/sbin/dmeventd]]),
|
||||||
|
- DMEVENTD_PATH=$withval,
|
||||||
|
- DMEVENTD_PATH="$SBINDIR/dmeventd")
|
||||||
|
AC_DEFINE_UNQUOTED(DMEVENTD_PATH, ["$DMEVENTD_PATH"],
|
||||||
|
[Path to dmeventd binary.])
|
||||||
|
+ AC_DEFINE_UNQUOTED(DEFAULT_DMEVENTD_EXIT_ON_PATH, ["$DEFAULT_DMEVENTD_EXIT_ON_PATH"],
|
||||||
|
+ [Path to exit-on dmeventd file.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
@@ -1861,6 +1866,7 @@ AC_SUBST(DEFAULT_ARCHIVE_SUBDIR)
|
||||||
|
AC_SUBST(DEFAULT_BACKUP_SUBDIR)
|
||||||
|
AC_SUBST(DEFAULT_CACHE_SUBDIR)
|
||||||
|
AC_SUBST(DEFAULT_DM_RUN_DIR)
|
||||||
|
+AC_SUBST(DEFAULT_DMEVENTD_EXIT_ON_PATH)
|
||||||
|
AC_SUBST(DEFAULT_LOCK_DIR)
|
||||||
|
AC_SUBST(DEFAULT_MIRROR_SEGTYPE)
|
||||||
|
AC_SUBST(DEFAULT_PID_DIR)
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
111
0136-configure-autoreconf.patch
Normal file
111
0136-configure-autoreconf.patch
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
From c499428897b8ea51eefd7a90f4141e532ec9fbb9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Mon, 25 Sep 2023 15:49:52 +0200
|
||||||
|
Subject: [PATCH 136/139] configure: autoreconf
|
||||||
|
|
||||||
|
(cherry picked from commit 3da18a06d8e0671374f9bf8b841017cfd5d1e5ea)
|
||||||
|
---
|
||||||
|
configure | 33 +++++++++++++++++++++++----------
|
||||||
|
include/configure.h.in | 3 +++
|
||||||
|
2 files changed, 26 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index cfad36e51..17083e7ff 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -730,6 +730,7 @@ DEFAULT_PROFILE_SUBDIR
|
||||||
|
DEFAULT_PID_DIR
|
||||||
|
DEFAULT_MIRROR_SEGTYPE
|
||||||
|
DEFAULT_LOCK_DIR
|
||||||
|
+DEFAULT_DMEVENTD_EXIT_ON_PATH
|
||||||
|
DEFAULT_DM_RUN_DIR
|
||||||
|
DEFAULT_CACHE_SUBDIR
|
||||||
|
DEFAULT_BACKUP_SUBDIR
|
||||||
|
@@ -989,6 +990,7 @@ with_systemdsystemunitdir
|
||||||
|
with_tmpfilesdir
|
||||||
|
with_dmeventd_pidfile
|
||||||
|
with_dmeventd_path
|
||||||
|
+with_dmeventd_exit_on_path
|
||||||
|
with_default_system_dir
|
||||||
|
with_default_profile_subdir
|
||||||
|
with_default_archive_subdir
|
||||||
|
@@ -1793,6 +1795,9 @@ Optional Packages:
|
||||||
|
dmeventd pidfile [PID_DIR/dmeventd.pid]
|
||||||
|
--with-dmeventd-path=PATH
|
||||||
|
dmeventd path [EPREFIX/sbin/dmeventd]
|
||||||
|
+ --with-dmeventd-exit-on-path=PATH
|
||||||
|
+ Default path to exit-on file in dmeventd
|
||||||
|
+ [/run/nologin]
|
||||||
|
--with-default-system-dir=DIR
|
||||||
|
default LVM system directory [/etc/lvm]
|
||||||
|
--with-default-profile-subdir=SUBDIR
|
||||||
|
@@ -14081,8 +14086,6 @@ _ACEOF
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
-if test "$BUILD_DMEVENTD" = yes; then
|
||||||
|
-
|
||||||
|
# Check whether --with-dmeventd-pidfile was given.
|
||||||
|
if test "${with_dmeventd_pidfile+set}" = set; then :
|
||||||
|
withval=$with_dmeventd_pidfile; DMEVENTD_PIDFILE=$withval
|
||||||
|
@@ -14091,14 +14094,6 @@ else
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
-cat >>confdefs.h <<_ACEOF
|
||||||
|
-#define DMEVENTD_PIDFILE "$DMEVENTD_PIDFILE"
|
||||||
|
-_ACEOF
|
||||||
|
-
|
||||||
|
-fi
|
||||||
|
-
|
||||||
|
-if test "$BUILD_DMEVENTD" = yes; then
|
||||||
|
-
|
||||||
|
# Check whether --with-dmeventd-path was given.
|
||||||
|
if test "${with_dmeventd_path+set}" = set; then :
|
||||||
|
withval=$with_dmeventd_path; DMEVENTD_PATH=$withval
|
||||||
|
@@ -14107,10 +14102,28 @@ else
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
+# Check whether --with-dmeventd-exit-on-path was given.
|
||||||
|
+if test "${with_dmeventd_exit_on_path+set}" = set; then :
|
||||||
|
+ withval=$with_dmeventd_exit_on_path; DEFAULT_DMEVENTD_EXIT_ON_PATH=$withval
|
||||||
|
+else
|
||||||
|
+ DEFAULT_DMEVENTD_EXIT_ON_PATH="/run/nologin"
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+if test "$BUILD_DMEVENTD" = yes; then
|
||||||
|
+
|
||||||
|
+cat >>confdefs.h <<_ACEOF
|
||||||
|
+#define DMEVENTD_PIDFILE "$DMEVENTD_PIDFILE"
|
||||||
|
+_ACEOF
|
||||||
|
+
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define DMEVENTD_PATH "$DMEVENTD_PATH"
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
+cat >>confdefs.h <<_ACEOF
|
||||||
|
+#define DEFAULT_DMEVENTD_EXIT_ON_PATH "$DEFAULT_DMEVENTD_EXIT_ON_PATH"
|
||||||
|
+_ACEOF
|
||||||
|
+
|
||||||
|
fi
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
diff --git a/include/configure.h.in b/include/configure.h.in
|
||||||
|
index e0d971bbf..b8b728b73 100644
|
||||||
|
--- a/include/configure.h.in
|
||||||
|
+++ b/include/configure.h.in
|
||||||
|
@@ -48,6 +48,9 @@
|
||||||
|
/* Name of default metadata cache subdirectory. */
|
||||||
|
#undef DEFAULT_CACHE_SUBDIR
|
||||||
|
|
||||||
|
+/* Path to exit-on dmeventd file. */
|
||||||
|
+#undef DEFAULT_DMEVENTD_EXIT_ON_PATH
|
||||||
|
+
|
||||||
|
/* Define default node creation behavior with dmsetup create */
|
||||||
|
#undef DEFAULT_DM_ADD_NODE
|
||||||
|
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
196
0137-dmeventd-implement-exit_on-file-check.patch
Normal file
196
0137-dmeventd-implement-exit_on-file-check.patch
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
From b7dd2a9e5973544f248aeeb7bc0b5e7afbd27d9b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Mon, 25 Sep 2023 13:07:00 +0200
|
||||||
|
Subject: [PATCH 137/139] dmeventd: implement exit_on file check
|
||||||
|
|
||||||
|
When exit on file is present in a system and term/break signal is
|
||||||
|
catched, them dmeventd is no longger refusing to exit.
|
||||||
|
|
||||||
|
For the correct shutdown, there should be ideally unmonitoring call,
|
||||||
|
however in some case it's very hard to implement this correct procedure.
|
||||||
|
|
||||||
|
With this 'exit on' file dmeventd at least avoid 'blocking' shutdown,
|
||||||
|
before systemd kills use with -9 anyway possibly even in some unwanted
|
||||||
|
stated of internal dmeventd processing (i.e. in the middle of some lvm
|
||||||
|
command processing).
|
||||||
|
|
||||||
|
(cherry picked from commit a9d7a9d1289d7cafa1db5fd1e41417bf4f7709d1)
|
||||||
|
---
|
||||||
|
daemons/dmeventd/dmeventd.c | 57 ++++++++++++++++++++++++++++---------
|
||||||
|
make.tmpl.in | 1 +
|
||||||
|
man/Makefile.in | 1 +
|
||||||
|
man/dmeventd.8_main | 12 ++++++++
|
||||||
|
4 files changed, 58 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
|
||||||
|
index 46c34ada2..828bc0c7a 100644
|
||||||
|
--- a/daemons/dmeventd/dmeventd.c
|
||||||
|
+++ b/daemons/dmeventd/dmeventd.c
|
||||||
|
@@ -98,6 +98,7 @@ static int _systemd_activation = 0;
|
||||||
|
static int _foreground = 0;
|
||||||
|
static int _restart = 0;
|
||||||
|
static time_t _idle_since = 0;
|
||||||
|
+static const char *_exit_on = DEFAULT_DMEVENTD_EXIT_ON_PATH;
|
||||||
|
static char **_initial_registrations = 0;
|
||||||
|
|
||||||
|
/* FIXME Make configurable at runtime */
|
||||||
|
@@ -723,12 +724,18 @@ static int _get_status(struct message_data *message_data)
|
||||||
|
static int _get_parameters(struct message_data *message_data) {
|
||||||
|
struct dm_event_daemon_message *msg = message_data->msg;
|
||||||
|
int size;
|
||||||
|
+ char idle_buf[32] = "";
|
||||||
|
+
|
||||||
|
+ if (_idle_since)
|
||||||
|
+ (void)dm_snprintf(idle_buf, sizeof(idle_buf), " idle=%lu", (long unsigned) (time(NULL) - _idle_since));
|
||||||
|
|
||||||
|
free(msg->data);
|
||||||
|
- if ((size = dm_asprintf(&msg->data, "%s pid=%d daemon=%s exec_method=%s",
|
||||||
|
+ if ((size = dm_asprintf(&msg->data, "%s pid=%d daemon=%s exec_method=%s exit_on=\"%s\"%s",
|
||||||
|
message_data->id, getpid(),
|
||||||
|
_foreground ? "no" : "yes",
|
||||||
|
- _systemd_activation ? "systemd" : "direct")) < 0) {
|
||||||
|
+ _systemd_activation ? "systemd" : "direct",
|
||||||
|
+ _exit_on,
|
||||||
|
+ idle_buf)) < 0) {
|
||||||
|
stack;
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
@@ -2240,8 +2247,9 @@ bad:
|
||||||
|
static void _usage(char *prog, FILE *file)
|
||||||
|
{
|
||||||
|
fprintf(file, "Usage:\n"
|
||||||
|
- "%s [-d [-d [-d]]] [-f] [-h] [i] [-l] [-R] [-V] [-?]\n\n"
|
||||||
|
+ "%s [-d [-d [-d]]] [-e path] [-f] [-h] [i] [-l] [-R] [-V] [-?]\n\n"
|
||||||
|
" -d Log debug messages to syslog (-d, -dd, -ddd)\n"
|
||||||
|
+ " -e Select a file path checked on exit\n"
|
||||||
|
" -f Don't fork, run in the foreground\n"
|
||||||
|
" -h Show this help information\n"
|
||||||
|
" -i Query running instance of dmeventd for info\n"
|
||||||
|
@@ -2264,7 +2272,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
|
optopt = optind = opterr = 0;
|
||||||
|
optarg = (char*) "";
|
||||||
|
- while ((opt = getopt(argc, argv, "?fhiVdlR")) != EOF) {
|
||||||
|
+ while ((opt = getopt(argc, argv, ":?e:fhiVdlR")) != EOF) {
|
||||||
|
switch (opt) {
|
||||||
|
case 'h':
|
||||||
|
_usage(argv[0], stdout);
|
||||||
|
@@ -2277,6 +2285,13 @@ int main(int argc, char *argv[])
|
||||||
|
case 'R':
|
||||||
|
_restart++;
|
||||||
|
break;
|
||||||
|
+ case 'e':
|
||||||
|
+ if (strchr(optarg, '"')) {
|
||||||
|
+ fprintf(stderr, "dmeventd: option -e does not accept path \"%s\" with '\"' character.\n", optarg);
|
||||||
|
+ return EXIT_FAILURE;
|
||||||
|
+ }
|
||||||
|
+ _exit_on=optarg;
|
||||||
|
+ break;
|
||||||
|
case 'f':
|
||||||
|
_foreground++;
|
||||||
|
break;
|
||||||
|
@@ -2289,6 +2304,9 @@ int main(int argc, char *argv[])
|
||||||
|
case 'V':
|
||||||
|
printf("dmeventd version: %s\n", DM_LIB_VERSION);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
+ case ':':
|
||||||
|
+ fprintf(stderr, "dmeventd: option -%c requires an argument.\n", optopt);
|
||||||
|
+ return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2379,15 +2397,28 @@ int main(int argc, char *argv[])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- } else if (_exit_now == DM_SIGNALED_EXIT) {
|
||||||
|
- _exit_now = DM_SCHEDULED_EXIT;
|
||||||
|
- /*
|
||||||
|
- * When '_exit_now' is set, signal has been received,
|
||||||
|
- * but can not simply exit unless all
|
||||||
|
- * threads are done processing.
|
||||||
|
- */
|
||||||
|
- log_info("dmeventd received break, scheduling exit.");
|
||||||
|
- }
|
||||||
|
+ } else
|
||||||
|
+ switch (_exit_now) {
|
||||||
|
+ case DM_SIGNALED_EXIT:
|
||||||
|
+ _exit_now = DM_SCHEDULED_EXIT;
|
||||||
|
+ /*
|
||||||
|
+ * When '_exit_now' is set, signal has been received,
|
||||||
|
+ * but can not simply exit unless all
|
||||||
|
+ * threads are done processing.
|
||||||
|
+ */
|
||||||
|
+ log_info("dmeventd received break, scheduling exit.");
|
||||||
|
+ /* fall through */
|
||||||
|
+ case DM_SCHEDULED_EXIT:
|
||||||
|
+ /* While exit is scheduled, check for exit_on file */
|
||||||
|
+ DEBUGLOG("Checking exit on file \"%s\".", _exit_on);
|
||||||
|
+ if (_exit_on[0] && (access(_exit_on, F_OK) == 0)) {
|
||||||
|
+ log_info("dmeventd detected exit on file %s, unregistering all monitored devices.",
|
||||||
|
+ _exit_on);
|
||||||
|
+ _unregister_all_threads();
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
_process_request(&fifos);
|
||||||
|
_cleanup_unused_threads();
|
||||||
|
}
|
||||||
|
diff --git a/make.tmpl.in b/make.tmpl.in
|
||||||
|
index 7799a8adb..99170ca7f 100644
|
||||||
|
--- a/make.tmpl.in
|
||||||
|
+++ b/make.tmpl.in
|
||||||
|
@@ -147,6 +147,7 @@ DEFAULT_LOCK_DIR = @DEFAULT_LOCK_DIR@
|
||||||
|
DEFAULT_RUN_DIR = @DEFAULT_RUN_DIR@
|
||||||
|
DEFAULT_PID_DIR = @DEFAULT_PID_DIR@
|
||||||
|
DEFAULT_MANGLING = @MANGLING@
|
||||||
|
+DEFAULT_DMEVENTD_EXIT_ON_PATH = @DEFAULT_DMEVENTD_EXIT_ON_PATH@
|
||||||
|
|
||||||
|
# Setup vpath search paths for some suffixes
|
||||||
|
vpath %.c $(srcdir)
|
||||||
|
diff --git a/man/Makefile.in b/man/Makefile.in
|
||||||
|
index ba6f2046f..f324150de 100644
|
||||||
|
--- a/man/Makefile.in
|
||||||
|
+++ b/man/Makefile.in
|
||||||
|
@@ -181,6 +181,7 @@ $(SED) -e "s+#VERSION#+$(LVM_VERSION)+" \
|
||||||
|
-e "s+#DEFAULT_PID_DIR#+$(DEFAULT_PID_DIR)+" \
|
||||||
|
-e "s+#SYSTEMD_GENERATOR_DIR#+$(SYSTEMD_GENERATOR_DIR)+" \
|
||||||
|
-e "s+#DEFAULT_LIBLINE#+$(DEFAULT_LIBLINE)+" \
|
||||||
|
+ -e "s+#DEFAULT_DMEVENTD_EXIT_ON_PATH#+$(DEFAULT_DMEVENTD_EXIT_ON_PATH)+" \
|
||||||
|
-e "s+#DEFAULT_MANGLING#+$(DEFAULT_MANGLING)+" $< > $@
|
||||||
|
endef
|
||||||
|
|
||||||
|
diff --git a/man/dmeventd.8_main b/man/dmeventd.8_main
|
||||||
|
index 75926bae5..7a780da7c 100644
|
||||||
|
--- a/man/dmeventd.8_main
|
||||||
|
+++ b/man/dmeventd.8_main
|
||||||
|
@@ -10,6 +10,8 @@ dmeventd \(em Device-mapper event daemon
|
||||||
|
.RB [ -d
|
||||||
|
.RB [ -d
|
||||||
|
.RB [ -d ]]]
|
||||||
|
+.RB [ -e
|
||||||
|
+.BR exit_on_path ]
|
||||||
|
.RB [ -f ]
|
||||||
|
.RB [ -h ]
|
||||||
|
.RB [ -i ]
|
||||||
|
@@ -37,6 +39,16 @@ debug messages sent to syslog.
|
||||||
|
Each extra d adds more debugging information.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
+.B -e exit_on_path
|
||||||
|
+Specifies the file path whose presence is checked by the daemon when it
|
||||||
|
+receives a signal (SIGINT, SIGTERM) and allows to exit even if there are still
|
||||||
|
+monitored devices.
|
||||||
|
+This can help with system shutdown where devices
|
||||||
|
+have not been unmonitored properly.
|
||||||
|
+To disable this behavior set this to the empty string "".
|
||||||
|
+Default value is "\fI#DEFAULT_DMEVENTD_EXIT_ON_PATH#\fP".
|
||||||
|
+.
|
||||||
|
+.TP
|
||||||
|
.B -f
|
||||||
|
Don't fork, run in the foreground.
|
||||||
|
.
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
118
0138-debug-correct-level.patch
Normal file
118
0138-debug-correct-level.patch
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
From 490631e2cd0947116f21192837703b2e563b863c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Wed, 20 Sep 2023 15:36:54 +0200
|
||||||
|
Subject: [PATCH 138/139] debug: correct level
|
||||||
|
|
||||||
|
No error for just tracing message.
|
||||||
|
|
||||||
|
(cherry picked from commit e930ee93f7361a7b0b7a357acc4187bf630b7f14)
|
||||||
|
---
|
||||||
|
daemons/dmeventd/dmeventd.c | 20 ++++++++++----------
|
||||||
|
device_mapper/ioctl/libdm-iface.c | 2 +-
|
||||||
|
libdm/ioctl/libdm-iface.c | 2 +-
|
||||||
|
3 files changed, 12 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
|
||||||
|
index 828bc0c7a..f529f8ac5 100644
|
||||||
|
--- a/daemons/dmeventd/dmeventd.c
|
||||||
|
+++ b/daemons/dmeventd/dmeventd.c
|
||||||
|
@@ -1765,7 +1765,7 @@ static void _cleanup_unused_threads(void)
|
||||||
|
DEBUGLOG("Destroying Thr %x.", (int)thread->thread);
|
||||||
|
|
||||||
|
if (pthread_join(thread->thread, NULL))
|
||||||
|
- log_sys_error("pthread_join", "");
|
||||||
|
+ log_sys_debug("pthread_join", "");
|
||||||
|
|
||||||
|
_free_thread_status(thread);
|
||||||
|
_lock_mutex();
|
||||||
|
@@ -1796,7 +1796,7 @@ static void _init_thread_signals(void)
|
||||||
|
sigdelset(&my_sigset, SIGQUIT);
|
||||||
|
|
||||||
|
if (pthread_sigmask(SIG_BLOCK, &my_sigset, NULL))
|
||||||
|
- log_sys_error("pthread_sigmask", "SIG_BLOCK");
|
||||||
|
+ log_sys_debug("pthread_sigmask", "SIG_BLOCK");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -1825,7 +1825,7 @@ static int _set_oom_adj(const char *oom_adj_path, int val)
|
||||||
|
fprintf(fp, "%i", val);
|
||||||
|
|
||||||
|
if (dm_fclose(fp))
|
||||||
|
- log_sys_error("fclose", oom_adj_path);
|
||||||
|
+ log_sys_debug("fclose", oom_adj_path);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
@@ -1839,11 +1839,11 @@ static int _protect_against_oom_killer(void)
|
||||||
|
|
||||||
|
if (stat(OOM_ADJ_FILE, &st) == -1) {
|
||||||
|
if (errno != ENOENT)
|
||||||
|
- log_sys_error("stat", OOM_ADJ_FILE);
|
||||||
|
+ log_sys_debug("stat", OOM_ADJ_FILE);
|
||||||
|
|
||||||
|
/* Try old oom_adj interface as a fallback */
|
||||||
|
if (stat(OOM_ADJ_FILE_OLD, &st) == -1) {
|
||||||
|
- log_sys_error("stat", OOM_ADJ_FILE_OLD);
|
||||||
|
+ log_sys_debug("stat", OOM_ADJ_FILE_OLD);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1932,14 +1932,14 @@ out:
|
||||||
|
static void _remove_files_on_exit(void)
|
||||||
|
{
|
||||||
|
if (unlink(DMEVENTD_PIDFILE))
|
||||||
|
- log_sys_error("unlink", DMEVENTD_PIDFILE);
|
||||||
|
+ log_sys_debug("unlink", DMEVENTD_PIDFILE);
|
||||||
|
|
||||||
|
if (!_systemd_activation) {
|
||||||
|
if (unlink(DM_EVENT_FIFO_CLIENT))
|
||||||
|
- log_sys_error("unlink", DM_EVENT_FIFO_CLIENT);
|
||||||
|
+ log_sys_debug("unlink", DM_EVENT_FIFO_CLIENT);
|
||||||
|
|
||||||
|
if (unlink(DM_EVENT_FIFO_SERVER))
|
||||||
|
- log_sys_error("unlink", DM_EVENT_FIFO_SERVER);
|
||||||
|
+ log_sys_debug("unlink", DM_EVENT_FIFO_SERVER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2428,9 +2428,9 @@ int main(int argc, char *argv[])
|
||||||
|
log_notice("dmeventd shutting down.");
|
||||||
|
|
||||||
|
if (fifos.client >= 0 && close(fifos.client))
|
||||||
|
- log_sys_error("client close", fifos.client_path);
|
||||||
|
+ log_sys_debug("client close", fifos.client_path);
|
||||||
|
if (fifos.server >= 0 && close(fifos.server))
|
||||||
|
- log_sys_error("server close", fifos.server_path);
|
||||||
|
+ log_sys_debug("server close", fifos.server_path);
|
||||||
|
|
||||||
|
if (_use_syslog)
|
||||||
|
closelog();
|
||||||
|
diff --git a/device_mapper/ioctl/libdm-iface.c b/device_mapper/ioctl/libdm-iface.c
|
||||||
|
index 533bb9eea..b09284118 100644
|
||||||
|
--- a/device_mapper/ioctl/libdm-iface.c
|
||||||
|
+++ b/device_mapper/ioctl/libdm-iface.c
|
||||||
|
@@ -397,7 +397,7 @@ static void _close_control_fd(void)
|
||||||
|
{
|
||||||
|
if (_control_fd != -1) {
|
||||||
|
if (close(_control_fd) < 0)
|
||||||
|
- log_sys_error("close", "_control_fd");
|
||||||
|
+ log_sys_debug("close", "_control_fd");
|
||||||
|
_control_fd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/libdm/ioctl/libdm-iface.c b/libdm/ioctl/libdm-iface.c
|
||||||
|
index 28589a15c..7c7259874 100644
|
||||||
|
--- a/libdm/ioctl/libdm-iface.c
|
||||||
|
+++ b/libdm/ioctl/libdm-iface.c
|
||||||
|
@@ -396,7 +396,7 @@ static void _close_control_fd(void)
|
||||||
|
{
|
||||||
|
if (_control_fd != -1) {
|
||||||
|
if (close(_control_fd) < 0)
|
||||||
|
- log_sys_error("close", "_control_fd");
|
||||||
|
+ log_sys_debug("close", "_control_fd");
|
||||||
|
_control_fd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
54
0139-tests-check-exit_on-works.patch
Normal file
54
0139-tests-check-exit_on-works.patch
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
From 4f4a5c39ae768714925809970598b15268cd4ddb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||||||
|
Date: Tue, 26 Sep 2023 01:21:41 +0200
|
||||||
|
Subject: [PATCH 139/139] tests: check exit_on works
|
||||||
|
|
||||||
|
(cherry picked from commit cb8486a9b2d6f3c73749f98287cad6adbc4f857f)
|
||||||
|
---
|
||||||
|
test/shell/dmeventd-restart.sh | 26 +++++++++++++++++++++++---
|
||||||
|
1 file changed, 23 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/test/shell/dmeventd-restart.sh b/test/shell/dmeventd-restart.sh
|
||||||
|
index 0def8c1fa..96e4c7cff 100644
|
||||||
|
--- a/test/shell/dmeventd-restart.sh
|
||||||
|
+++ b/test/shell/dmeventd-restart.sh
|
||||||
|
@@ -46,8 +46,8 @@ rm LOCAL_DMEVENTD debug.log*
|
||||||
|
dmeventd -R -f &
|
||||||
|
echo $! >LOCAL_DMEVENTD
|
||||||
|
|
||||||
|
-# wait longer as tries to communicate with killed daemon
|
||||||
|
-sleep 9
|
||||||
|
+# wait longer as tries 5s to communicate with killed daemon
|
||||||
|
+sleep 7
|
||||||
|
# now dmeventd should not be running
|
||||||
|
not pgrep dmeventd
|
||||||
|
rm LOCAL_DMEVENTD
|
||||||
|
@@ -63,4 +63,24 @@ test -e LOCAL_CLVMD || not grep 'already monitored' lvchange.out
|
||||||
|
lvchange --monitor y --verbose $vg/$lv2 2>&1 | tee lvchange.out
|
||||||
|
test -e LOCAL_CLVMD || not grep 'already monitored' lvchange.out
|
||||||
|
|
||||||
|
-vgremove -ff $vg
|
||||||
|
+rm -f debug.log*
|
||||||
|
+dmeventd -R -f -e "$PWD/test_nologin" -ldddd > debug.log_DMEVENTD_$RANDOM 2>&1 &
|
||||||
|
+echo $! >LOCAL_DMEVENTD
|
||||||
|
+
|
||||||
|
+pgrep -o dmeventd
|
||||||
|
+kill -INT "$(< LOCAL_DMEVENTD)"
|
||||||
|
+sleep 1
|
||||||
|
+
|
||||||
|
+# dmeventd should be still present (although in 'exit-mode')
|
||||||
|
+pgrep -o dmeventd
|
||||||
|
+
|
||||||
|
+# Create a file simulating 'shutdown in progress'
|
||||||
|
+touch test_nologin
|
||||||
|
+sleep 1.1
|
||||||
|
+
|
||||||
|
+# Should be now dead (within 1 second)
|
||||||
|
+not pgrep -o dmeventd
|
||||||
|
+rm -f LOCAL_DMEVENTD
|
||||||
|
+
|
||||||
|
+# Do not run dmeventd here again
|
||||||
|
+vgremove -ff --config 'activation/monitoring = 0' $vg
|
||||||
|
--
|
||||||
|
2.48.1
|
||||||
|
|
16
lvm2.spec
16
lvm2.spec
@ -68,7 +68,7 @@ Version: 2.03.14
|
|||||||
%if 0%{?from_snapshot}
|
%if 0%{?from_snapshot}
|
||||||
Release: 0.1.20210426git%{shortcommit}%{?dist}%{?rel_suffix}
|
Release: 0.1.20210426git%{shortcommit}%{?dist}%{?rel_suffix}
|
||||||
%else
|
%else
|
||||||
Release: 14%{?dist}%{?rel_suffix}
|
Release: 15%{?dist}%{?rel_suffix}
|
||||||
%endif
|
%endif
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
URL: http://sourceware.org/lvm2
|
URL: http://sourceware.org/lvm2
|
||||||
@ -227,6 +227,16 @@ Patch126: 0125-raid-add-messages-to-lvs-command-output-in-case-Raid.patch
|
|||||||
#Patch130: 0129-remove-unused-variable.patch
|
#Patch130: 0129-remove-unused-variable.patch
|
||||||
#
|
#
|
||||||
Patch131: 0130-spec-Install-and-package-etc-lvm-devices.patch
|
Patch131: 0130-spec-Install-and-package-etc-lvm-devices.patch
|
||||||
|
# RHEL-8288:
|
||||||
|
Patch132: 0131-dmeventd-move-var-set-to-locked-section.patch
|
||||||
|
Patch133: 0132-dmeventd-use-return.patch
|
||||||
|
Patch134: 0133-dmeventd-unregister-all-devices-on-restart.patch
|
||||||
|
Patch135: 0134-dmeventd-info-status-report.patch
|
||||||
|
Patch136: 0135-configure.ac-add-with-dmeventd-exit-on-path.patch
|
||||||
|
Patch137: 0136-configure-autoreconf.patch
|
||||||
|
Patch138: 0137-dmeventd-implement-exit_on-file-check.patch
|
||||||
|
Patch139: 0138-debug-correct-level.patch
|
||||||
|
Patch140: 0139-tests-check-exit_on-works.patch
|
||||||
|
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
%if %{enable_testsuite}
|
%if %{enable_testsuite}
|
||||||
@ -905,6 +915,10 @@ An extensive functional testsuite for LVM2.
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jan 22 2025 Marian Csontos <mcsontos@redhat.com> - 2.03.14-15
|
||||||
|
- Fix dmeventd blocking on shutdown.
|
||||||
|
- Force exit dmeventd when /run/nologin is present.
|
||||||
|
|
||||||
* Fri Feb 02 2024 Marian Csontos <mcsontos@redhat.com> - 2.03.14-14
|
* Fri Feb 02 2024 Marian Csontos <mcsontos@redhat.com> - 2.03.14-14
|
||||||
- Fix multisegment RAID1 allocator using one disk for both legs.
|
- Fix multisegment RAID1 allocator using one disk for both legs.
|
||||||
- Fix lvconvert -m 0 taking rimage_0 even if it is out of sync.
|
- Fix lvconvert -m 0 taking rimage_0 even if it is out of sync.
|
||||||
|
Loading…
Reference in New Issue
Block a user