Compare commits

...

No commits in common. "c8" and "c9-beta" have entirely different histories.
c8 ... c9-beta

7 changed files with 51 additions and 616 deletions

View File

@ -1 +1 @@
821112426f474123d090c570153d67468c4e0c11 SOURCES/dlm-4.1.0.tar.gz
cfcf0a3ad4ed838703e5b4d9117fa1bf6450646b SOURCES/dlm-4.3.0.tar.gz

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/dlm-4.1.0.tar.gz
SOURCES/dlm-4.3.0.tar.gz

View File

@ -1,232 +0,0 @@
From 7b6c22b254181a2b1921a4c31228fc8920b5547e Mon Sep 17 00:00:00 2001
From: Alexander Aring <aahringo@redhat.com>
Date: Fri, 13 Jan 2023 17:33:31 -0500
Subject: [PATCH 1/3] dlm_controld: better uevent filtering
When I did test with dlm_locktorture module I got several log messages
about:
uevent message has 3 args: add@/module/dlm_locktorture
uevent message has 3 args: remove@/module/dlm_locktorture
which are not expected and not able to parse by dlm_controld
process_uevent() function, because mismatch of argument counts.
Debugging it more, I figured out that those uevents are for
loading/unloading the dlm_locktorture module and there are uevents for
loading and unloading modules which have nothing todo with dlm lockspace
uevent handling.
The current filter works as:
if (!strstr(buf, "dlm"))
for matching the dlm joining/leaving uevent string which looks like:
offline@/kernel/dlm/locktorture
to avoid matching with other uevent which has somehow the string "dlm"
in it, we switch to the match the uevent env variables for action,
devpath (just to check if it's set) and subsystem. Additional the dlm
subsystem sets the LOCKSPACE variable which can be used to get the
lockspace name instead of extracting it previously from the devpath.
The code to decode the uevent envs were taken from the gfs2_controld
utility [0].
[0] https://github.com/andyprice/gfs2-utils/blob/91c3e9a69ed70d3d522f5b47015da5e5868722ec/group/gfs_controld/main.c
---
dlm_controld/main.c | 126 +++++++++++++++++++++++++-------------------
1 file changed, 71 insertions(+), 55 deletions(-)
diff --git a/dlm_controld/main.c b/dlm_controld/main.c
index c35756d4..74a5e61b 100644
--- a/dlm_controld/main.c
+++ b/dlm_controld/main.c
@@ -46,6 +46,50 @@ struct client {
struct lockspace *ls;
};
+enum {
+ Env_ACTION = 0,
+ Env_DEVPATH,
+ Env_SUBSYSTEM,
+ Env_LOCKSPACE,
+ Env_Last, /* Flag for end of vars */
+};
+
+static const char *uevent_vars[] = {
+ [Env_ACTION] = "ACTION=",
+ [Env_DEVPATH] = "DEVPATH=",
+ [Env_SUBSYSTEM] = "SUBSYSTEM=",
+ [Env_LOCKSPACE] = "LOCKSPACE=",
+};
+
+static void decode_uevent(const char *buf, unsigned len, const char *vars[],
+ unsigned nvars, const char *vals[])
+{
+ const char *ptr;
+ unsigned int i;
+ int slen, vlen;
+
+ memset(vals, 0, sizeof(const char *) * nvars);
+
+ while (len > 0) {
+ ptr = buf;
+ slen = strlen(ptr);
+ buf += slen;
+ len -= slen;
+ buf++;
+ len--;
+
+ for (i = 0; i < nvars; i++) {
+ vlen = strlen(vars[i]);
+ if (vlen > slen)
+ continue;
+ if (memcmp(vars[i], ptr, vlen) != 0)
+ continue;
+ vals[i] = ptr + vlen;
+ break;
+ }
+ }
+}
+
int do_read(int fd, void *buf, size_t count)
{
int rv, off = 0;
@@ -627,38 +671,6 @@ static void fs_register_del(char *name)
}
}
-#define MAXARGS 8
-
-static char *get_args(char *buf, int *argc, char **argv, char sep, int want)
-{
- char *p = buf, *rp = NULL;
- int i;
-
- argv[0] = p;
-
- for (i = 1; i < MAXARGS; i++) {
- p = strchr(buf, sep);
- if (!p)
- break;
- *p = '\0';
-
- if (want == i) {
- rp = p + 1;
- break;
- }
-
- argv[i] = p + 1;
- buf = p + 1;
- }
- *argc = i;
-
- /* we ended by hitting \0, return the point following that */
- if (!rp)
- rp = strchr(buf, '\0') + 1;
-
- return rp;
-}
-
const char *dlm_mode_str(int mode)
{
switch (mode) {
@@ -686,13 +698,12 @@ const char *dlm_mode_str(int mode)
static void process_uevent(int ci)
{
+ const char *uevent_vals[Env_Last];
struct lockspace *ls;
char buf[MAX_LINE_UEVENT];
- char *argv[MAXARGS], *act, *sys;
- int rv, argc = 0;
+ int rv;
memset(buf, 0, sizeof(buf));
- memset(argv, 0, sizeof(char *) * MAXARGS);
retry_recv:
rv = recv(client[ci].fd, &buf, sizeof(buf), 0);
@@ -704,35 +715,38 @@ static void process_uevent(int ci)
return;
}
- if (!strstr(buf, "dlm"))
- return;
+ decode_uevent(buf, rv, uevent_vars, Env_Last, uevent_vals);
- log_debug("uevent: %s", buf);
-
- get_args(buf, &argc, argv, '/', 4);
- if (argc != 4)
- log_error("uevent message has %d args", argc);
- act = argv[0];
- sys = argv[2];
-
- if (!act || !sys || !argv[3])
+ if (!uevent_vals[Env_ACTION] ||
+ !uevent_vals[Env_DEVPATH] ||
+ !uevent_vals[Env_SUBSYSTEM] ||
+ !uevent_vals[Env_LOCKSPACE]) {
+ log_debug("failed to validate uevent, action: %p, devpath: %p, subsystem: %p, lockspace: %p",
+ uevent_vals[Env_ACTION], uevent_vals[Env_DEVPATH],
+ uevent_vals[Env_SUBSYSTEM],
+ uevent_vals[Env_LOCKSPACE]);
return;
+ }
- if (strncmp(sys, "dlm", 3))
+ if (strcmp(uevent_vals[Env_SUBSYSTEM], "dlm")) {
+ log_debug("uevent looks like dlm but came not from dlm subsystem");
return;
+ }
- log_debug("kernel: %s %s", act, argv[3]);
+ log_debug("uevent action: %s, devpath: %s, devpath: %s, lockspace: %s",
+ uevent_vals[Env_ACTION], uevent_vals[Env_SUBSYSTEM],
+ uevent_vals[Env_DEVPATH], uevent_vals[Env_LOCKSPACE]);
rv = 0;
- if (!strcmp(act, "online@")) {
- ls = find_ls(argv[3]);
+ if (!strcmp(uevent_vals[Env_ACTION], "online")) {
+ ls = find_ls(uevent_vals[Env_LOCKSPACE]);
if (ls) {
rv = -EEXIST;
goto out;
}
- ls = create_ls(argv[3]);
+ ls = create_ls(uevent_vals[Env_LOCKSPACE]);
if (!ls) {
rv = -ENOMEM;
goto out;
@@ -747,8 +761,8 @@ static void process_uevent(int ci)
goto out;
}
- } else if (!strcmp(act, "offline@")) {
- ls = find_ls(argv[3]);
+ } else if (!strcmp(uevent_vals[Env_ACTION], "offline")) {
+ ls = find_ls(uevent_vals[Env_LOCKSPACE]);
if (!ls) {
rv = -ENOENT;
goto out;
@@ -758,8 +772,10 @@ static void process_uevent(int ci)
}
out:
if (rv < 0)
- log_error("process_uevent %s error %d errno %d",
- act, rv, errno);
+ log_error("%s action: %s, devpath: %s, devpath: %s, lockspace: %s - error %d errno %d",
+ __func__, uevent_vals[Env_ACTION],
+ uevent_vals[Env_SUBSYSTEM], uevent_vals[Env_DEVPATH],
+ uevent_vals[Env_LOCKSPACE], rv, errno);
}
static int setup_uevent(void)
--
2.43.0

View File

@ -1,75 +0,0 @@
From b6f52406411d2421d0614244080cf7bc668c336b Mon Sep 17 00:00:00 2001
From: David Teigland <teigland@redhat.com>
Date: Tue, 13 Jan 2026 16:59:25 -0600
Subject: [PATCH dlm/tool] dlm_controld: send plock operations without resource
lookup
When plock_ownership mode is disabled, a plock operation read from
the kernel can be sent to all nodes immediately, without looking up
the local resource struct. This is faster, and it avoids a bug in
cases where multiple threads in a process submit concurrent fcntl
lock ops on a file.
This bug occurs because create/free of the resource struct should
only be done in the context of ordered receive_plock cpg messages.
plock unlock results were being incorrectly returned based on the
non-existence of a struct resource checked in process_plocks (outside
of the ordered message context.) In this case, the existence of the
resource struct was used to imply a lock state ("no locks"), which is
invalid to conclude outside of the message context. The bug would
only appear in the unusual scenario where multiple threads in a
process are running concurrent fcntl lock operations on a file.
This fix does not address the problem when plock_ownership is enabled,
so warnings are added for the plock_ownership setting.
---
dlm_controld/dlm_controld.8 | 2 ++
dlm_controld/main.c | 2 +-
dlm_controld/plock.c | 5 +++++
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/dlm_controld/dlm_controld.8 b/dlm_controld/dlm_controld.8
index 3aab3885..3858be87 100644
--- a/dlm_controld/dlm_controld.8
+++ b/dlm_controld/dlm_controld.8
@@ -50,6 +50,8 @@ For default settings, see dlm_controld -h.
.B --plock_ownership | -o
0|1
enable/disable plock ownership
+.br
+ (WARNING: do not enable if threads perform fcntl locking.)
.B --drop_resources_time | -t
.I int
diff --git a/dlm_controld/main.c b/dlm_controld/main.c
index 2dc6b91b..728b7464 100644
--- a/dlm_controld/main.c
+++ b/dlm_controld/main.c
@@ -1841,7 +1841,7 @@ static void set_opt_defaults(void)
set_opt_default(plock_ownership_ind,
"plock_ownership", 'o', req_arg_bool,
0, NULL, 0,
- "enable/disable plock ownership");
+ "enable/disable plock ownership (do not enable if threads do fcntl locking)");
set_opt_default(drop_resources_time_ind,
"drop_resources_time", 't', req_arg_int,
diff --git a/dlm_controld/plock.c b/dlm_controld/plock.c
index 992fb16f..56ea9765 100644
--- a/dlm_controld/plock.c
+++ b/dlm_controld/plock.c
@@ -1569,6 +1569,11 @@ void process_plocks(int ci)
plock_rate_delays = 0;
}
+ if (!opt(plock_ownership_ind)) {
+ send_plock(ls, NULL, &info);
+ return;
+ }
+
create = (info.optype == DLM_PLOCK_OP_UNLOCK) ? 0 : 1;
rv = find_resource(ls, info.number, create, &r);
--
2.43.0

View File

@ -1,26 +0,0 @@
From 615e7936d39248de09dc9c5e7570463387f7d139 Mon Sep 17 00:00:00 2001
From: David Teigland <teigland@redhat.com>
Date: Thu, 15 Aug 2024 11:05:54 -0500
Subject: [PATCH 2/3] dlm_controld: terminate uevent buffer
for checker
---
dlm_controld/main.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlm_controld/main.c b/dlm_controld/main.c
index 74a5e61b..1828428c 100644
--- a/dlm_controld/main.c
+++ b/dlm_controld/main.c
@@ -715,6 +715,8 @@ static void process_uevent(int ci)
return;
}
+ buf[MAX_LINE_UEVENT-1] = '\0';
+
decode_uevent(buf, rv, uevent_vars, Env_Last, uevent_vals);
if (!uevent_vals[Env_ACTION] ||
--
2.43.0

View File

@ -1,232 +0,0 @@
From d317347643ec2610bbbd390493cf5e920f4ddd79 Mon Sep 17 00:00:00 2001
From: Alexander Aring <aahringo@redhat.com>
Date: Fri, 22 Nov 2024 12:45:36 -0500
Subject: [PATCH 3/3] dlm_controld: handle RELEASE_RECOVER event env
Newer kernels might sending an additional attribute for the leaving lockspace
event "RELEASE_RECOVER" to tell other nodes from the release lockspace
initator to call the recover_slot() callback in their recovery handling
as a membership update triggers in-kernel recovery.
---
dlm_controld/action.c | 33 ++++++++++++++++++
dlm_controld/cpg.c | 72 ++++++++++++++++++++++++++++++++++++++-
dlm_controld/dlm_daemon.h | 6 +++-
dlm_controld/main.c | 4 ++-
4 files changed, 112 insertions(+), 3 deletions(-)
diff --git a/dlm_controld/action.c b/dlm_controld/action.c
index 0eff2799..6d23a330 100644
--- a/dlm_controld/action.c
+++ b/dlm_controld/action.c
@@ -240,6 +240,39 @@ int path_exists(const char *path)
return 1;
}
+int set_configfs_member_release_recover(struct lockspace *ls, int id,
+ uint32_t release_recover)
+{
+ char path[PATH_MAX];
+ char buf[32];
+ int fd, rv;
+
+ memset(path, 0, PATH_MAX);
+ snprintf(path, PATH_MAX, "%s/%s/nodes/%d/release_recover",
+ SPACES_DIR, ls->name, id);
+
+ rv = fd = open(path, O_WRONLY);
+ if (rv < 0) {
+ log_error("%s: open failed: %d", path, errno);
+ goto out;
+ }
+
+ memset(buf, 0, 32);
+ snprintf(buf, 32, "%u", release_recover);
+
+ rv = do_write(fd, buf, strlen(buf));
+ if (rv < 0) {
+ log_error("%s: write failed: %d, %s", path, errno, buf);
+ close(fd);
+ goto out;
+ }
+ close(fd);
+ rv = 0;
+
+out:
+ return rv;
+}
+
/* The "renew" nodes are those that have left and rejoined since the last
call to set_members(). We rmdir/mkdir for these nodes so dlm-kernel
can notice they've left and rejoined. */
diff --git a/dlm_controld/cpg.c b/dlm_controld/cpg.c
index f3365ee4..10139664 100644
--- a/dlm_controld/cpg.c
+++ b/dlm_controld/cpg.c
@@ -1057,6 +1057,23 @@ static void receive_start(struct lockspace *ls, struct dlm_header *hd, int len)
memb->start = 1;
}
+static void receive_release_recover(struct lockspace *ls,
+ struct dlm_header *hd, int len)
+{
+ uint32_t release_recover = hd->msgdata;
+
+ log_dlock(ls, "%s %d: len %d release_recover %u", __func__,
+ hd->nodeid, len, release_recover);
+
+ if (hd->nodeid == our_nodeid)
+ return;
+
+ /* try to set members release recover setting before removing to
+ * tell other nodes the release recover option from the initiator.
+ */
+ set_configfs_member_release_recover(ls, hd->nodeid, release_recover);
+}
+
static void receive_plocks_done(struct lockspace *ls, struct dlm_header *hd,
int len)
{
@@ -1170,6 +1187,43 @@ static void send_info(struct lockspace *ls, struct change *cg, int type,
free(buf);
}
+static void send_release_recover_msg(struct lockspace *ls, int type,
+ unsigned long release_recover)
+{
+ struct dlm_header *hd;
+ char *buf;
+ int len;
+
+ len = sizeof(struct dlm_header);
+
+ buf = malloc(len);
+ if (!buf) {
+ log_error("send_info len %d no mem", len);
+ return;
+ }
+ memset(buf, 0, len);
+
+ hd = (struct dlm_header *)buf;
+
+ /* fill in header (dlm_send_message handles part of header) */
+
+ hd->type = type;
+ hd->msgdata = release_recover;
+
+ dlm_send_message(ls, buf, len);
+
+ free(buf);
+}
+
+static void send_release_recover(struct lockspace *ls,
+ unsigned long release_recover)
+{
+ log_group(ls, "%s %d: counts %u release_recover: %ld", __func__,
+ our_nodeid, ls->started_count, release_recover);
+
+ send_release_recover_msg(ls, DLM_MSG_RELEASE_RECOVER, release_recover);
+}
+
/* fenced used the DUPLICATE_CG flag instead of sending nacks like we
do here. I think the nacks didn't work for fenced for some reason,
but I don't remember why (possibly because the node blocked doing
@@ -1642,6 +1696,10 @@ static void deliver_cb(cpg_handle_t handle,
hd->type, nodeid, enable_plock);
break;
+ case DLM_MSG_RELEASE_RECOVER:
+ receive_release_recover(ls, hd, len);
+ break;
+
#if 0
case DLM_MSG_DEADLK_CYCLE_START:
if (opt(enable_deadlk))
@@ -1809,12 +1867,24 @@ int dlm_join_lockspace(struct lockspace *ls)
/* received an "offline" uevent from dlm-kernel */
-int dlm_leave_lockspace(struct lockspace *ls)
+int dlm_leave_lockspace(struct lockspace *ls, const char *release_recover_str)
{
cs_error_t error;
struct cpg_name name;
+ unsigned long release_recover;
int i = 0;
+ if (release_recover_str) {
+ release_recover = strtoul(release_recover_str, NULL, 0);
+ if (release_recover == ULONG_MAX) {
+ log_error("failed to parse release recover: %s",
+ release_recover_str);
+ return errno;
+ }
+
+ send_release_recover(ls, release_recover);
+ }
+
ls->leaving = 1;
memset(&name, 0, sizeof(name));
diff --git a/dlm_controld/dlm_daemon.h b/dlm_controld/dlm_daemon.h
index 45b295ea..119eb543 100644
--- a/dlm_controld/dlm_daemon.h
+++ b/dlm_controld/dlm_daemon.h
@@ -236,6 +236,7 @@ enum {
DLM_MSG_RUN_REQUEST,
DLM_MSG_RUN_REPLY,
DLM_MSG_RUN_CANCEL,
+ DLM_MSG_RELEASE_RECOVER,
};
/* dlm_header flags */
@@ -367,6 +368,8 @@ int set_sysfs_control(char *name, int val);
int set_sysfs_event_done(char *name, int val);
int set_sysfs_id(char *name, uint32_t id);
int set_sysfs_nodir(char *name, int val);
+int set_configfs_member_release_recover(struct lockspace *ls, int id,
+ uint32_t release_recover);
int set_configfs_members(struct lockspace *ls, char *name,
int new_count, int *new_members,
int renew_count, int *renew_members);
@@ -389,7 +392,8 @@ void setup_lockspace_config(struct lockspace *ls);
void process_lockspace_changes(void);
void process_fencing_changes(void);
int dlm_join_lockspace(struct lockspace *ls);
-int dlm_leave_lockspace(struct lockspace *ls);
+int dlm_leave_lockspace(struct lockspace *ls,
+ const char *release_recover_str);
void update_flow_control_status(void);
int set_node_info(struct lockspace *ls, int nodeid, struct dlmc_node *node);
int set_lockspace_info(struct lockspace *ls, struct dlmc_lockspace *lockspace);
diff --git a/dlm_controld/main.c b/dlm_controld/main.c
index 1828428c..2dc6b91b 100644
--- a/dlm_controld/main.c
+++ b/dlm_controld/main.c
@@ -51,6 +51,7 @@ enum {
Env_DEVPATH,
Env_SUBSYSTEM,
Env_LOCKSPACE,
+ Env_RELEASE_RECOVER,
Env_Last, /* Flag for end of vars */
};
@@ -59,6 +60,7 @@ static const char *uevent_vars[] = {
[Env_DEVPATH] = "DEVPATH=",
[Env_SUBSYSTEM] = "SUBSYSTEM=",
[Env_LOCKSPACE] = "LOCKSPACE=",
+ [Env_RELEASE_RECOVER] = "RELEASE_RECOVER=",
};
static void decode_uevent(const char *buf, unsigned len, const char *vars[],
@@ -770,7 +772,7 @@ static void process_uevent(int ci)
goto out;
}
- dlm_leave_lockspace(ls);
+ dlm_leave_lockspace(ls, uevent_vals[Env_RELEASE_RECOVER]);
}
out:
if (rv < 0)
--
2.43.0

View File

@ -1,31 +1,26 @@
Name: dlm
Version: 4.1.0
Release: 3%{?dist}
Version: 4.3.0
Release: 1%{?dist}
License: GPLv2 and GPLv2+ and LGPLv2+
# For a breakdown of the licensing, see README.license
Group: System Environment/Kernel
Summary: dlm control daemon and tool
URL: https://pagure.io/dlm
BuildRequires: gcc
BuildRequires: glibc-kernheaders
BuildRequires: corosynclib-devel >= 1.99.9
BuildRequires: corosynclib-devel >= 3.1.0
BuildRequires: pacemaker-libs-devel >= 1.1.7
BuildRequires: libxml2-devel
BuildRequires: systemd-units
BuildRequires: systemd-devel
BuildRequires: make
Source0: https://releases.pagure.org/dlm/%{name}-%{version}.tar.gz
# Patch0: 0001-foo.patch
Patch0: 0001-dlm_controld-better-uevent-filtering.patch
Patch1: 0002-dlm_controld-terminate-uevent-buffer.patch
Patch2: 0003-dlm_controld-handle-RELEASE_RECOVER-event-env.patch
Patch3: 0001-dlm_controld-send-plock-operations-without-resource-.patch
%if 0%{?rhel} && 0%{?rhel} <= 7
ExclusiveArch: i686 x86_64
%endif
Requires: %{name}-lib = %{version}-%{release}
Requires: corosync >= 1.99.9
Requires: corosync >= 3.1.0
%{?fedora:Requires: kernel-modules-extra}
Requires(post): systemd-units
Requires(preun): systemd-units
@ -37,17 +32,12 @@ The kernel dlm requires a user daemon to control membership.
%prep
%setup -q
# %patch0 -p1 -b .0001-foo.patch
%patch0 -p1 -b .backup0
%patch1 -p1 -b .backup1
%patch2 -p1 -b .backup2
%patch3 -p1 -b .backup3
%build
# upstream does not require configure
# upstream does not support _smp_mflags
CFLAGS+=$RPM_OPT_FLAGS make
CFLAGS+=$RPM_OPT_FLAGS make -C fence
CFLAGS=$RPM_OPT_FLAGS make
CFLAGS=$RPM_OPT_FLAGS make -C fence
%install
rm -rf $RPM_BUILD_ROOT
@ -67,7 +57,6 @@ install -Dm 0644 init/dlm.sysconfig %{buildroot}/etc/sysconfig/dlm
%systemd_postun_with_restart dlm.service
%files
%defattr(-,root,root,-)
%doc README.license
%{_unitdir}/dlm.service
%{_sbindir}/dlm_controld
@ -80,25 +69,20 @@ install -Dm 0644 init/dlm.sysconfig %{buildroot}/etc/sysconfig/dlm
%package lib
Summary: Library for %{name}
Group: System Environment/Libraries
Conflicts: clusterlib
%description lib
The %{name}-lib package contains the libraries needed to use the dlm
from userland applications.
%post lib -p /sbin/ldconfig
%postun lib -p /sbin/ldconfig
%ldconfig_scriptlets lib
%files lib
%defattr(-,root,root,-)
%{_prefix}/lib/udev/rules.d/*-dlm.rules
/usr/lib/udev/rules.d/*-dlm.rules
%{_libdir}/libdlm*.so.*
%package devel
Summary: Development files for %{name}
Group: Development/Libraries
Requires: %{name}-lib = %{version}-%{release}
Conflicts: clusterlib-devel
@ -107,43 +91,59 @@ The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.
%files devel
%defattr(-,root,root,-)
%{_libdir}/libdlm*.so
%{_includedir}/libdlm*.h
%{_libdir}/pkgconfig/*.pc
%changelog
* Tue Jan 20 2026 Alexander Aring <aahringo@redhat.com> - 4.1.0-3
- Rebuild for posix lock issue fix
Related: RHEL-140243
* Wed May 15 2024 David Teigland <teigland@redhat.com> - 4.3.0-1
- new upstream version
* Tue Dec 16 2025 Alexander Aring <aahringo@redhat.com> - 4.1.0-2
- Rebuild for recover flag functionality
Related: RHEL-136235
* Fri Oct 14 2022 David Teigland <teigland@redhat.com> - 4.2.0-2
- rebuild with tests
* Wed Jan 13 2021 David Teigland <teigland@redhat.com> - 4.1.0-1
- update to 4.1.0
* Wed Oct 12 2022 David Teigland <teigland@redhat.com> - 4.2.0-1
- new upstream version
* Wed Jan 06 2021 David Teigland <teigland@redhat.com> - 4.0.9-4
- dlm_controld: use new quorum api to detect missed failures
* Tue Feb 15 2022 David Teigland <teigland@redhat.com> - 4.1.1-2
- compiler warnings and makefile flags
* Wed Jun 12 2019 David Teigland <teigland@redhat.com> - 4.0.9-3
- kick gating system
* Mon Nov 15 2021 David Teigland <teigland@redhat.com> - 4.1.1-1
- new upstream version
* Wed Jun 12 2019 David Teigland <teigland@redhat.com> - 4.0.9-2
- try to kick gating system
* Wed Aug 25 2021 David Teigland <teigland@redhat.com> - 4.0.9-7
- fix pacemaker header
* Tue Jun 11 2019 David Teigland <teigland@redhat.com> - 4.0.9-1
- update to 4.0.9
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 4.0.9-6
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Wed Jan 23 2019 David Teigland <teigland@redhat.com> - 4.0.6-10
- dlm_controld: ignore unwanted uevent strings
* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 4.0.9-5
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Tue Oct 02 2018 David Teigland <teigland@redhat.com> - 4.0.6-9
- update makefile gcc flags
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.9-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Thu Aug 09 2018 David Teigland <teigland@redhat.com> - 4.0.6-8
- Work around glibc regression for major/minor header
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.9-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.9-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Wed Jul 31 2019 David Teigland <teigland@redhat.com> - 4.0.9-1
- New upstream realease
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.6-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.6-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.6-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Sat Mar 24 2018 Richard W.M. Jones <rjones@redhat.com> - 4.0.6-8
- Fixes for glibc 2.27, required for riscv64.
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.6-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild