re-import sources as agreed with the maintainer
This commit is contained in:
parent
ab2e22588f
commit
0f3b005d29
13
.gitignore
vendored
13
.gitignore
vendored
@ -1,2 +1,13 @@
|
||||
SOURCES/dlm-4.1.0.tar.gz
|
||||
/dlm-3.99.0.tar.gz
|
||||
/dlm-3.99.1.tar.gz
|
||||
/dlm-3.99.2.tar.gz
|
||||
/dlm-3.99.3.tar.gz
|
||||
/dlm-3.99.4.tar.gz
|
||||
/dlm-3.99.5.tar.gz
|
||||
/dlm-4.0.0.tar.gz
|
||||
/dlm-4.0.1.tar.gz
|
||||
/dlm-4.0.4.tar.gz
|
||||
/dlm-4.0.5.tar.gz
|
||||
/dlm-4.0.6.tar.gz
|
||||
/dlm-4.0.9.tar.gz
|
||||
/dlm-4.1.0.tar.gz
|
||||
|
28
0001-dlm_controld-libsystemd-broke-itself.patch
Normal file
28
0001-dlm_controld-libsystemd-broke-itself.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From 2eefc91150a3292c2be82f4139207e06b4c4bba4 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Fri, 10 Jun 2016 13:13:48 -0500
|
||||
Subject: [PATCH] dlm_controld: libsystemd broke itself
|
||||
|
||||
---
|
||||
dlm_controld/Makefile | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlm_controld/Makefile b/dlm_controld/Makefile
|
||||
index 13d6339ab263..cf556c9d72b8 100644
|
||||
--- a/dlm_controld/Makefile
|
||||
+++ b/dlm_controld/Makefile
|
||||
@@ -62,9 +62,9 @@ LIB_CFLAGS += $(BIN_CFLAGS)
|
||||
LIB_LDFLAGS += -Wl,-z,relro -pie
|
||||
|
||||
ifeq ($(USE_SD_NOTIFY),yes)
|
||||
- BIN_CFLAGS += $(shell pkg-config --cflags libsystemd-daemon) \
|
||||
+ BIN_CFLAGS += $(shell pkg-config --cflags libsystemd) \
|
||||
-DUSE_SD_NOTIFY
|
||||
- BIN_LDFLAGS += $(shell pkg-config --libs libsystemd-daemon)
|
||||
+ BIN_LDFLAGS += $(shell pkg-config --libs libsystemd)
|
||||
endif
|
||||
|
||||
all: $(LIB_TARGET) $(BIN_TARGET)
|
||||
--
|
||||
1.8.3.1
|
||||
|
199
0001-dlm_controld-use-new-quorum-api-to-detect-missed-fai.patch
Normal file
199
0001-dlm_controld-use-new-quorum-api-to-detect-missed-fai.patch
Normal file
@ -0,0 +1,199 @@
|
||||
From 2e893b981b19430aeca983dd63fb3ac0979d0b35 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Wed, 9 Sep 2020 17:16:59 -0500
|
||||
Subject: [PATCH] dlm_controld: use new quorum api to detect missed failures
|
||||
|
||||
If a node failed and then quickly rejoined before corosync
|
||||
detected the original failure, the quorum callback from
|
||||
corosync would not include an indication that the node had
|
||||
ever failed. This meant there would be no removal and
|
||||
readdition of the node's configfs settings in the kernel,
|
||||
and the failed network connections may never be cleared.
|
||||
|
||||
The new quorum nodelist callback does include an indication
|
||||
of a node that has left and rejoined. This patch keeps track
|
||||
of nodeids that have left and rejoined through that callback
|
||||
between sequential occurances of the standard quorum callback.
|
||||
|
||||
When the standard quorum callback is removing and adding
|
||||
configfs settings for nodes that have been removed or added,
|
||||
it will also now look at the list of nodes that have left
|
||||
and rejoined, and do configfs removal and addition for those.
|
||||
---
|
||||
dlm_controld/member.c | 106 +++++++++++++++++++++++++++++++++++++++++++-------
|
||||
1 file changed, 91 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/dlm_controld/member.c b/dlm_controld/member.c
|
||||
index 1d5bfa3d9166..d567c114b259 100644
|
||||
--- a/dlm_controld/member.c
|
||||
+++ b/dlm_controld/member.c
|
||||
@@ -20,6 +20,8 @@ static int old_node_count;
|
||||
static uint32_t quorum_nodes[MAX_NODES];
|
||||
static int quorum_node_count;
|
||||
static struct list_head cluster_nodes;
|
||||
+static uint32_t leavejoin_nodes[MAX_NODES];
|
||||
+static int leavejoin_count;
|
||||
|
||||
struct node_cluster {
|
||||
struct list_head list;
|
||||
@@ -103,15 +105,51 @@ int is_cluster_member(uint32_t nodeid)
|
||||
return is_member(quorum_nodes, quorum_node_count, nodeid);
|
||||
}
|
||||
|
||||
-static void quorum_callback(quorum_handle_t h, uint32_t quorate,
|
||||
- uint64_t ring_seq, uint32_t node_list_entries,
|
||||
- uint32_t *node_list)
|
||||
+static int is_leavejoin_node(uint32_t nodeid)
|
||||
+{
|
||||
+ return is_member(leavejoin_nodes, leavejoin_count, nodeid);
|
||||
+}
|
||||
+
|
||||
+static void quorum_nodelist_callback(quorum_handle_t cbhandle, struct quorum_ring_id ring_id,
|
||||
+ uint32_t member_list_entries, const uint32_t *member_list,
|
||||
+ uint32_t joined_list_entries, const uint32_t *joined_list,
|
||||
+ uint32_t left_list_entries, const uint32_t *left_list)
|
||||
+{
|
||||
+ uint64_t ring_seq = ring_id.seq;
|
||||
+ int i, j;
|
||||
+
|
||||
+ for (i = 0; i < left_list_entries; i++) {
|
||||
+ log_debug("cluster left_list %u seq %llu",
|
||||
+ left_list[i], (unsigned long long)ring_seq);
|
||||
+ }
|
||||
+
|
||||
+ for (j = 0; j < joined_list_entries; j++) {
|
||||
+ log_debug("cluster joined_list %u seq %llu",
|
||||
+ joined_list[j], (unsigned long long)ring_seq);
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < left_list_entries; i++) {
|
||||
+ for (j = 0; j < joined_list_entries; j++) {
|
||||
+ if (joined_list[j] == left_list[i]) {
|
||||
+ log_debug("cluster node %d left and joined", joined_list[j]);
|
||||
+ if (!is_leavejoin_node(joined_list[j]))
|
||||
+ leavejoin_nodes[leavejoin_count++] = joined_list[j];
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void quorum_callback(quorum_handle_t cbhandle, uint32_t quorate,
|
||||
+ struct quorum_ring_id ring_id, uint32_t node_list_entries,
|
||||
+ const uint32_t *node_list)
|
||||
{
|
||||
corosync_cfg_node_address_t addrs[MAX_NODE_ADDRESSES];
|
||||
corosync_cfg_node_address_t *addrptr = addrs;
|
||||
const struct node_config *nc;
|
||||
cs_error_t err;
|
||||
int i, j, num_addrs;
|
||||
+ uint32_t nodeid;
|
||||
+ uint64_t ring_seq = ring_id.seq;
|
||||
uint64_t now = monotime();
|
||||
|
||||
if (!cluster_joined_monotime) {
|
||||
@@ -142,15 +180,55 @@ static void quorum_callback(quorum_handle_t h, uint32_t quorate,
|
||||
if (!is_cluster_member(old_nodes[i])) {
|
||||
log_debug("cluster node %u removed seq %llu",
|
||||
old_nodes[i], (unsigned long long)cluster_ringid_seq);
|
||||
+
|
||||
rem_cluster_node(old_nodes[i], now);
|
||||
del_configfs_node(old_nodes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
+ for (i = 0; i < leavejoin_count; i++) {
|
||||
+ nodeid = leavejoin_nodes[i];
|
||||
+
|
||||
+ log_debug("cluster node %u leavejoin seq %llu",
|
||||
+ nodeid, (unsigned long long)cluster_ringid_seq);
|
||||
+
|
||||
+ /* remove */
|
||||
+
|
||||
+ rem_cluster_node(nodeid, now);
|
||||
+ del_configfs_node(nodeid);
|
||||
+
|
||||
+ /* add */
|
||||
+
|
||||
+ add_cluster_node(nodeid, now);
|
||||
+
|
||||
+ fence_delay_begin = now;
|
||||
+
|
||||
+ err = corosync_cfg_get_node_addrs(ch, nodeid,
|
||||
+ MAX_NODE_ADDRESSES,
|
||||
+ &num_addrs, addrs);
|
||||
+ if (err != CS_OK) {
|
||||
+ log_error("corosync_cfg_get_node_addrs failed nodeid %u", nodeid);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ nc = node_config_get(nodeid);
|
||||
+
|
||||
+ for (j = 0; j < num_addrs; j++) {
|
||||
+ add_configfs_node(nodeid,
|
||||
+ addrptr[j].address,
|
||||
+ addrptr[j].address_length,
|
||||
+ (nodeid == our_nodeid),
|
||||
+ nc->mark);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
for (i = 0; i < quorum_node_count; i++) {
|
||||
+ if (is_leavejoin_node(quorum_nodes[i]))
|
||||
+ continue;
|
||||
if (!is_old_member(quorum_nodes[i])) {
|
||||
log_debug("cluster node %u added seq %llu",
|
||||
quorum_nodes[i], (unsigned long long)cluster_ringid_seq);
|
||||
+
|
||||
add_cluster_node(quorum_nodes[i], now);
|
||||
|
||||
fence_delay_begin = now;
|
||||
@@ -176,12 +254,10 @@ static void quorum_callback(quorum_handle_t h, uint32_t quorate,
|
||||
}
|
||||
}
|
||||
}
|
||||
-}
|
||||
|
||||
-static quorum_callbacks_t quorum_callbacks =
|
||||
-{
|
||||
- .quorum_notify_fn = quorum_callback,
|
||||
-};
|
||||
+ memset(leavejoin_nodes, 0, sizeof(leavejoin_nodes));
|
||||
+ leavejoin_count = 0;
|
||||
+}
|
||||
|
||||
void process_cluster(int ci)
|
||||
{
|
||||
@@ -208,23 +284,23 @@ void update_cluster(void)
|
||||
|
||||
int setup_cluster(void)
|
||||
{
|
||||
+ quorum_model_v1_data_t model_data;
|
||||
cs_error_t err;
|
||||
int fd;
|
||||
- uint32_t quorum_type;
|
||||
+ uint32_t quorum_type = 0;
|
||||
|
||||
INIT_LIST_HEAD(&cluster_nodes);
|
||||
|
||||
- err = quorum_initialize(&qh, &quorum_callbacks, &quorum_type);
|
||||
+ memset(&model_data, 0, sizeof(model_data));
|
||||
+ model_data.quorum_notify_fn = quorum_callback;
|
||||
+ model_data.nodelist_notify_fn = quorum_nodelist_callback;
|
||||
+
|
||||
+ err = quorum_model_initialize(&qh, QUORUM_MODEL_V1, (quorum_model_data_t *)&model_data, &quorum_type, NULL);
|
||||
if (err != CS_OK) {
|
||||
log_error("quorum init error %d", err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
- if (quorum_type == QUORUM_FREE) {
|
||||
- log_error("no quorum provider configured in corosync, unable to operate");
|
||||
- goto fail;
|
||||
- }
|
||||
-
|
||||
err = quorum_fd_get(qh, &fd);
|
||||
if (err != CS_OK) {
|
||||
log_error("quorum fd_get error %d", err);
|
||||
--
|
||||
2.7.5
|
||||
|
@ -0,0 +1,41 @@
|
||||
From 3a5d91435a557932b2ff674ec8e7c22e880da42f Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Sat, 24 Mar 2018 08:55:06 +0000
|
||||
Subject: [PATCH] New location of major() and minor() macros for glibc 2.27.
|
||||
|
||||
glibc 2.27 moves the major() and minor() macros to the
|
||||
<sys/sysmacros.h> header file.
|
||||
|
||||
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
|
||||
---
|
||||
dlm_controld/dlm_daemon.h | 1 +
|
||||
libdlm/libdlm.c | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/dlm_controld/dlm_daemon.h b/dlm_controld/dlm_daemon.h
|
||||
index 6cb0f11c1335..731818c53c9b 100644
|
||||
--- a/dlm_controld/dlm_daemon.h
|
||||
+++ b/dlm_controld/dlm_daemon.h
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <sched.h>
|
||||
#include <signal.h>
|
||||
#include <dirent.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
|
||||
#include <corosync/cpg.h>
|
||||
|
||||
diff --git a/libdlm/libdlm.c b/libdlm/libdlm.c
|
||||
index a9e6195579aa..ebfba4576fa8 100644
|
||||
--- a/libdlm/libdlm.c
|
||||
+++ b/libdlm/libdlm.c
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <stdio.h>
|
||||
#include <dirent.h>
|
||||
#include <linux/major.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#ifdef HAVE_SELINUX
|
||||
#include <selinux/selinux.h>
|
||||
#endif
|
||||
--
|
||||
2.7.5
|
||||
|
217
0003-update-makefile-gcc-flags.patch
Normal file
217
0003-update-makefile-gcc-flags.patch
Normal file
@ -0,0 +1,217 @@
|
||||
From db875a3d07f9f6a633951ed886cec80b91efea43 Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Tue, 2 Oct 2018 11:22:39 -0500
|
||||
Subject: [PATCH] update makefile gcc flags
|
||||
|
||||
---
|
||||
dlm_controld/Makefile | 41 ++++++++++++++---------------------------
|
||||
dlm_tool/Makefile | 44 ++++++++++++++++----------------------------
|
||||
fence/Makefile | 46 +++++++++++++++++-----------------------------
|
||||
libdlm/Makefile | 6 +++++-
|
||||
4 files changed, 52 insertions(+), 85 deletions(-)
|
||||
|
||||
diff --git a/dlm_controld/Makefile b/dlm_controld/Makefile
|
||||
index cf556c9d72b8..85c2db12883a 100644
|
||||
--- a/dlm_controld/Makefile
|
||||
+++ b/dlm_controld/Makefile
|
||||
@@ -31,35 +31,22 @@ BIN_SOURCE = action.c \
|
||||
rbtree.c
|
||||
LIB_SOURCE = lib.c
|
||||
|
||||
-BIN_CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||
- -Wall \
|
||||
- -Wformat \
|
||||
- -Wformat-security \
|
||||
- -Wmissing-prototypes \
|
||||
- -Wnested-externs \
|
||||
- -Wpointer-arith \
|
||||
- -Wextra -Wshadow \
|
||||
- -Wcast-align \
|
||||
- -Wwrite-strings \
|
||||
- -Waggregate-return \
|
||||
- -Wstrict-prototypes \
|
||||
- -Winline \
|
||||
- -Wredundant-decls \
|
||||
- -Wno-sign-compare \
|
||||
- -Wno-unused-parameter \
|
||||
- -Wp,-D_FORTIFY_SOURCE=2 \
|
||||
- -fexceptions \
|
||||
- -fasynchronous-unwind-tables \
|
||||
- -fdiagnostics-show-option \
|
||||
-
|
||||
-BIN_CFLAGS += -fPIE -DPIE
|
||||
+CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||
+ -Wall -Wformat -Wformat-security -Wmissing-prototypes -Wnested-externs \
|
||||
+ -Wpointer-arith -Wextra -Wshadow -Wcast-align -Wwrite-strings \
|
||||
+ -Waggregate-return -Wstrict-prototypes -Winline -Wredundant-decls \
|
||||
+ -Wno-sign-compare -Wno-unused-parameter -Wp,-D_FORTIFY_SOURCE=2 \
|
||||
+ -fexceptions -fasynchronous-unwind-tables -fdiagnostics-show-option \
|
||||
+ -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong \
|
||||
+ -fstack-clash-protection -Wl,-z,now
|
||||
+
|
||||
+BIN_CFLAGS += $(CFLAGS) -fPIE -DPIE
|
||||
BIN_CFLAGS += -I../include -I../libdlm
|
||||
+LIB_CFLAGS += $(CFLAGS) -fPIC
|
||||
|
||||
-BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
|
||||
+BIN_LDFLAGS += $(LDFLAGS) -Wl,-z,relro -pie
|
||||
BIN_LDFLAGS += -lpthread -lrt -lcpg -lcmap -lcfg -lquorum
|
||||
-
|
||||
-LIB_CFLAGS += $(BIN_CFLAGS)
|
||||
-LIB_LDFLAGS += -Wl,-z,relro -pie
|
||||
+LIB_LDFLAGS += $(LDFLAGS) -Wl,-z,relro -pie
|
||||
|
||||
ifeq ($(USE_SD_NOTIFY),yes)
|
||||
BIN_CFLAGS += $(shell pkg-config --cflags libsystemd) \
|
||||
@@ -73,7 +60,7 @@ $(BIN_TARGET): $(BIN_SOURCE)
|
||||
$(CC) $(BIN_SOURCE) $(BIN_CFLAGS) $(BIN_LDFLAGS) -o $@ -L.
|
||||
|
||||
$(LIB_TARGET): $(LIB_SOURCE)
|
||||
- $(CC) $^ $(LIB_CFLAGS) $(LIB_LDFLAGS) -shared -fPIC -o $@ -Wl,-soname=$(LIB_SMAJOR)
|
||||
+ $(CC) $^ $(LIB_CFLAGS) $(LIB_LDFLAGS) -shared -o $@ -Wl,-soname=$(LIB_SMAJOR)
|
||||
ln -sf $(LIB_TARGET) $(LIB_SO)
|
||||
ln -sf $(LIB_TARGET) $(LIB_SMAJOR)
|
||||
|
||||
diff --git a/dlm_tool/Makefile b/dlm_tool/Makefile
|
||||
index c16d8f537225..80d7725791f3 100644
|
||||
--- a/dlm_tool/Makefile
|
||||
+++ b/dlm_tool/Makefile
|
||||
@@ -8,38 +8,26 @@ MAN_TARGET = dlm_tool.8
|
||||
|
||||
BIN_SOURCE = main.c
|
||||
|
||||
-BIN_CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||
- -Wall \
|
||||
- -Wformat \
|
||||
- -Wformat-security \
|
||||
- -Wmissing-prototypes \
|
||||
- -Wnested-externs \
|
||||
- -Wpointer-arith \
|
||||
- -Wextra -Wshadow \
|
||||
- -Wcast-align \
|
||||
- -Wwrite-strings \
|
||||
- -Waggregate-return \
|
||||
- -Wstrict-prototypes \
|
||||
- -Winline \
|
||||
- -Wredundant-decls \
|
||||
- -Wno-sign-compare \
|
||||
- -Wno-unused-parameter \
|
||||
- -Wp,-D_FORTIFY_SOURCE=2 \
|
||||
- -fexceptions \
|
||||
- -fasynchronous-unwind-tables \
|
||||
- -fdiagnostics-show-option \
|
||||
-
|
||||
-BIN_CFLAGS += -fPIE -DPIE
|
||||
-BIN_CFLAGS += -I../include -I../libdlm -I../dlm_controld
|
||||
-
|
||||
-BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
|
||||
-BIN_LDFLAGS += -L../libdlm -L../dlm_controld
|
||||
-BIN_LDFLAGS += -lpthread -ldlm -ldlmcontrol
|
||||
+CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||
+ -Wall -Wformat -Wformat-security -Wmissing-prototypes -Wnested-externs \
|
||||
+ -Wpointer-arith -Wextra -Wshadow -Wcast-align -Wwrite-strings \
|
||||
+ -Waggregate-return -Wstrict-prototypes -Winline -Wredundant-decls \
|
||||
+ -Wno-sign-compare -Wno-unused-parameter -Wp,-D_FORTIFY_SOURCE=2 \
|
||||
+ -fexceptions -fasynchronous-unwind-tables -fdiagnostics-show-option \
|
||||
+ -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong \
|
||||
+ -fstack-clash-protection -Wl,-z,now
|
||||
+
|
||||
+CFLAGS += -fPIE -DPIE
|
||||
+CFLAGS += -I../include -I../libdlm -I../dlm_controld
|
||||
+
|
||||
+LDFLAGS += -Wl,-z,relro -pie
|
||||
+LDFLAGS += -L../libdlm -L../dlm_controld
|
||||
+LDFLAGS += -lpthread -ldlm -ldlmcontrol
|
||||
|
||||
all: $(BIN_TARGET)
|
||||
|
||||
$(BIN_TARGET): $(BIN_SOURCE)
|
||||
- $(CC) $(BIN_SOURCE) $(BIN_CFLAGS) $(BIN_LDFLAGS) -o $@
|
||||
+ $(CC) $(BIN_SOURCE) $(CFLAGS) $(LDFLAGS) -o $@
|
||||
|
||||
clean:
|
||||
rm -f *.o *.so *.so.* $(BIN_TARGET)
|
||||
diff --git a/fence/Makefile b/fence/Makefile
|
||||
index 77bf0fd15be8..b927879eb141 100644
|
||||
--- a/fence/Makefile
|
||||
+++ b/fence/Makefile
|
||||
@@ -8,39 +8,27 @@ MAN_TARGET = dlm_stonith.8
|
||||
|
||||
BIN_SOURCE = stonith_helper.c
|
||||
|
||||
-BIN_CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||
- -Wall \
|
||||
- -Wformat \
|
||||
- -Wformat-security \
|
||||
- -Wmissing-prototypes \
|
||||
- -Wnested-externs \
|
||||
- -Wpointer-arith \
|
||||
- -Wextra -Wshadow \
|
||||
- -Wcast-align \
|
||||
- -Wwrite-strings \
|
||||
- -Waggregate-return \
|
||||
- -Wstrict-prototypes \
|
||||
- -Winline \
|
||||
- -Wredundant-decls \
|
||||
- -Wno-sign-compare \
|
||||
- -Wno-unused-parameter \
|
||||
- -Wp,-D_FORTIFY_SOURCE=2 \
|
||||
- -fexceptions \
|
||||
- -fasynchronous-unwind-tables \
|
||||
- -fdiagnostics-show-option \
|
||||
-
|
||||
-BIN_CFLAGS += -fPIE -DPIE
|
||||
-BIN_CFLAGS += `xml2-config --cflags`
|
||||
-BIN_CFLAGS += -I../include
|
||||
-
|
||||
-BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
|
||||
-BIN_LDFLAGS += `xml2-config --libs`
|
||||
-BIN_LDFLAGS += -ldl
|
||||
+CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||
+ -Wall -Wformat -Wformat-security -Wmissing-prototypes -Wnested-externs \
|
||||
+ -Wpointer-arith -Wextra -Wshadow -Wcast-align -Wwrite-strings \
|
||||
+ -Waggregate-return -Wstrict-prototypes -Winline -Wredundant-decls \
|
||||
+ -Wno-sign-compare -Wno-unused-parameter -Wp,-D_FORTIFY_SOURCE=2 \
|
||||
+ -fexceptions -fasynchronous-unwind-tables -fdiagnostics-show-option \
|
||||
+ -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong \
|
||||
+ -fstack-clash-protection -Wl,-z,now
|
||||
+
|
||||
+CFLAGS += -fPIE -DPIE
|
||||
+CFLAGS += `xml2-config --cflags`
|
||||
+CFLAGS += -I../include
|
||||
+
|
||||
+LDFLAGS += -Wl,-z,relro -pie
|
||||
+LDFLAGS += `xml2-config --libs`
|
||||
+LDFLAGS += -ldl
|
||||
|
||||
all: $(BIN_TARGET)
|
||||
|
||||
$(BIN_TARGET): $(BIN_SOURCE)
|
||||
- $(CC) $(BIN_SOURCE) $(BIN_CFLAGS) $(BIN_LDFLAGS) -o $@ -L.
|
||||
+ $(CC) $(BIN_SOURCE) $(CFLAGS) $(LDFLAGS) -o $@ -L.
|
||||
|
||||
clean:
|
||||
rm -f *.o *.so *.so.* $(BIN_TARGET)
|
||||
diff --git a/libdlm/Makefile b/libdlm/Makefile
|
||||
index 336c22e7edb4..ab32761912b3 100644
|
||||
--- a/libdlm/Makefile
|
||||
+++ b/libdlm/Makefile
|
||||
@@ -72,10 +72,14 @@ CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
|
||||
-Wno-sign-compare \
|
||||
-Wno-unused-parameter \
|
||||
-Wp,-D_FORTIFY_SOURCE=2 \
|
||||
+ -Wp,-D_GLIBCXX_ASSERTIONS \
|
||||
+ -fstack-protector-strong \
|
||||
+ -fstack-clash-protection \
|
||||
-fexceptions \
|
||||
-fasynchronous-unwind-tables \
|
||||
-fdiagnostics-show-option \
|
||||
- -fPIC
|
||||
+ -fPIC \
|
||||
+ -Wl,-z,now
|
||||
|
||||
LIB_CFLAGS += $(CFLAGS) -D_REENTRANT
|
||||
LLT_CFLAGS += $(CFLAGS)
|
||||
--
|
||||
2.7.5
|
||||
|
28
0004-dlm_controld-ignore-unwanted-uevent-strings.patch
Normal file
28
0004-dlm_controld-ignore-unwanted-uevent-strings.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From 58f1d500b6da18d62eef35b5f55a030ce8b9b0ce Mon Sep 17 00:00:00 2001
|
||||
From: David Teigland <teigland@redhat.com>
|
||||
Date: Mon, 14 Jan 2019 15:47:07 -0600
|
||||
Subject: [PATCH] dlm_controld: ignore unwanted uevent strings
|
||||
|
||||
---
|
||||
dlm_controld/main.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlm_controld/main.c b/dlm_controld/main.c
|
||||
index 40816aae3b24..ca1349bae241 100644
|
||||
--- a/dlm_controld/main.c
|
||||
+++ b/dlm_controld/main.c
|
||||
@@ -350,7 +350,10 @@ static void process_uevent(int ci)
|
||||
act = argv[0];
|
||||
sys = argv[2];
|
||||
|
||||
- if ((strlen(sys) != strlen("dlm")) || strcmp(sys, "dlm"))
|
||||
+ if (!act || !sys || !argv[3])
|
||||
+ return;
|
||||
+
|
||||
+ if (strncmp(sys, "dlm", 3))
|
||||
return;
|
||||
|
||||
log_debug("kernel: %s %s", act, argv[3]);
|
||||
--
|
||||
2.7.5
|
||||
|
362
tests/scripts/dlm_seq_async.c
Normal file
362
tests/scripts/dlm_seq_async.c
Normal file
@ -0,0 +1,362 @@
|
||||
/*
|
||||
* Copyright (c) 2011 David Teigland
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License V2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it would be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
/* gcc dlm_seq_async.c -ldlm -o dlm_seq_async */
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
#include <syslog.h>
|
||||
#include <sys/time.h>
|
||||
#include <asm/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/poll.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/errno.h>
|
||||
|
||||
#include "libdlm.h"
|
||||
|
||||
#define DEFAULT_NUM_R 1000
|
||||
#define DEFAULT_NUM_LPR 1
|
||||
|
||||
static dlm_lshandle_t *dh;
|
||||
static int openclose = 0;
|
||||
static int quiet = 0;
|
||||
static int verbose = 0;
|
||||
static int opt_convert = 0;
|
||||
static int opt_unlock = 0;
|
||||
static int opt_async = 0;
|
||||
static int opt_delay = 0;
|
||||
static unsigned int num_r = DEFAULT_NUM_R;
|
||||
static unsigned int num_lpr = DEFAULT_NUM_LPR;
|
||||
static unsigned int num_iter = 1;
|
||||
static unsigned int iter = 0;
|
||||
static uint32_t *lkids;
|
||||
static struct dlm_lksb lksb;
|
||||
static unsigned int cb_count;
|
||||
static int libdlm_fd;
|
||||
|
||||
#define log_debug(fmt, args...) \
|
||||
do { \
|
||||
if (!quiet) \
|
||||
printf(fmt "\n", ##args); \
|
||||
} while (0)
|
||||
|
||||
#define log_error(fmt, args...) \
|
||||
do { \
|
||||
printf("ERROR " fmt "\n", ##args); \
|
||||
exit(-1); \
|
||||
} while (0)
|
||||
|
||||
static void astfn(void *arg)
|
||||
{
|
||||
int status = lksb.sb_status;
|
||||
|
||||
cb_count++;
|
||||
|
||||
printf("astfn %x status %d count %u\n", lksb.sb_lkid, status, cb_count);
|
||||
|
||||
if (!status)
|
||||
return;
|
||||
if (status == EUNLOCK)
|
||||
return;
|
||||
}
|
||||
|
||||
static void seq(int acquire, int convert, int unlock, int mode)
|
||||
{
|
||||
char name[DLM_RESNAME_MAXLEN];
|
||||
uint32_t lkid;
|
||||
int i, j, rv;
|
||||
|
||||
for (i = 0; i < num_r; i++) {
|
||||
snprintf(name, sizeof(name), "seq.%08d", i);
|
||||
|
||||
for (j = 0; j < num_lpr; j++) {
|
||||
memset(&lksb, 0, sizeof(lksb));
|
||||
|
||||
if (acquire) {
|
||||
printf("acquire %s %d\n", name, mode);
|
||||
|
||||
rv = dlm_ls_lockx(dh, mode, &lksb, 0,
|
||||
name, strlen(name), 0,
|
||||
astfn, &lksb, NULL,
|
||||
NULL, NULL);
|
||||
}
|
||||
if (convert) {
|
||||
lksb.sb_lkid = lkids[(i * num_lpr) + j];
|
||||
|
||||
printf("convert %s %x %d\n", name, lksb.sb_lkid, mode);
|
||||
|
||||
rv = dlm_ls_lockx(dh, mode, &lksb, LKF_CONVERT,
|
||||
name, strlen(name), 0,
|
||||
astfn, &lksb, NULL,
|
||||
NULL, NULL);
|
||||
}
|
||||
if (unlock) {
|
||||
lkid = lkids[(i * num_lpr) + j];
|
||||
|
||||
printf("unlock %s %x\n", name, lkid);
|
||||
|
||||
rv = dlm_ls_unlock(dh, lkid, 0, &lksb, &lksb);
|
||||
}
|
||||
|
||||
if (rv) {
|
||||
log_error("dlm op %d %d %d %d,%d error %d",
|
||||
acquire, convert, unlock, i, j, rv);
|
||||
return;
|
||||
}
|
||||
|
||||
if (acquire && lkids)
|
||||
lkids[(i * num_lpr) + j] = lksb.sb_lkid;
|
||||
}
|
||||
}
|
||||
|
||||
cb_count = 0;
|
||||
|
||||
while (1) {
|
||||
rv = dlm_dispatch(libdlm_fd);
|
||||
if (rv < 0) {
|
||||
printf("dlm_dispatch error %d %d\n", rv, errno);
|
||||
}
|
||||
|
||||
if (cb_count == (num_r * num_lpr))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void print_usage(void)
|
||||
{
|
||||
printf("dlm_seq [options]\n");
|
||||
printf("Options:\n");
|
||||
printf("\n");
|
||||
printf(" -i <n> Iterations (0 no limit), default 1)\n");
|
||||
printf(" -r <n> The number of resources, default %d\n", DEFAULT_NUM_R);
|
||||
printf(" -l <n> The number of locks per resource, default %d\n", DEFAULT_NUM_LPR);
|
||||
printf(" -c Convert locks after acquiring them all\n");
|
||||
printf(" -u Unlock locks after acquire/convert\n");
|
||||
printf(" -s Same resource names in each iteration\n");
|
||||
printf(" -d <us> Delay us between consecutive seq\n");
|
||||
printf(" -o Open/close existing lockspace\n");
|
||||
printf(" -v Verbose output\n");
|
||||
printf(" -q Quiet output\n");
|
||||
}
|
||||
|
||||
static void decode_arguments(int argc, char **argv)
|
||||
{
|
||||
int cont = 1;
|
||||
int optchar;
|
||||
|
||||
while (cont) {
|
||||
optchar = getopt(argc, argv, "i:r:l:cuvqohad:s");
|
||||
|
||||
switch (optchar) {
|
||||
|
||||
case 'i':
|
||||
num_iter = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
num_r = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
num_lpr = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
opt_convert = 1;
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
opt_unlock = 1;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
opt_delay = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
openclose = 1;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
quiet = 1;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
print_usage();
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
printf("%s (built %s %s)\n", argv[0], __DATE__, __TIME__);
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case ':':
|
||||
case '?':
|
||||
fprintf(stderr, "Please use '-h' for usage.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case EOF:
|
||||
cont = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "unknown option: %c\n", optchar);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void _acquire(int mode)
|
||||
{
|
||||
seq(1, 0, 0, mode);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
void _convert(int mode)
|
||||
{
|
||||
seq(0, 1, 0, mode);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
void _unlock(void)
|
||||
{
|
||||
seq(0, 0, 1, 0);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rv, quit = 0;
|
||||
|
||||
decode_arguments(argc, argv);
|
||||
|
||||
printf("%d resources, %d locks per resource\n", num_r, num_lpr);
|
||||
|
||||
if (openclose) {
|
||||
log_debug("dlm_open_lockspace...");
|
||||
|
||||
dh = dlm_open_lockspace("dlm_seq");
|
||||
if (!dh) {
|
||||
log_error("dlm_open_lockspace error %lu %d",
|
||||
(unsigned long)dh, errno);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
} else {
|
||||
log_debug("dlm_new_lockspace...");
|
||||
|
||||
dh = dlm_new_lockspace("dlm_seq", 0600, 0);
|
||||
if (!dh) {
|
||||
log_error("dlm_new_lockspace error %lu %d",
|
||||
(unsigned long)dh, errno);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
}
|
||||
|
||||
libdlm_fd = dlm_ls_get_fd(dh);
|
||||
if (libdlm_fd < 0) {
|
||||
log_error("dlm_ls_get fd error %d %d", libdlm_fd, errno);
|
||||
goto done;
|
||||
}
|
||||
|
||||
lkids = malloc(sizeof(uint32_t) * (num_r * num_lpr));
|
||||
if (!lkids) {
|
||||
log_error("no mem");
|
||||
goto done;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
_acquire(LKM_EXMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_EXMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_EXMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_unlock();
|
||||
|
||||
_acquire(LKM_PRMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_PRMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
|
||||
_acquire(LKM_NLMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_NLMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_NLMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_unlock();
|
||||
|
||||
iter++;
|
||||
|
||||
if (!num_iter)
|
||||
continue;
|
||||
if (iter == num_iter)
|
||||
break;
|
||||
}
|
||||
|
||||
free(lkids);
|
||||
|
||||
done:
|
||||
if (openclose) {
|
||||
log_debug("dlm_close_lockspace");
|
||||
|
||||
rv = dlm_close_lockspace(dh);
|
||||
if (rv < 0)
|
||||
log_error("dlm_close_lockspace error %d %d",
|
||||
rv, errno);
|
||||
} else {
|
||||
log_debug("dlm_release_lockspace");
|
||||
|
||||
rv = dlm_release_lockspace("dlm_seq", dh, 1);
|
||||
if (rv < 0)
|
||||
log_error("dlm_release_lockspace error %d %d",
|
||||
rv, errno);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
327
tests/scripts/dlm_seq_sync.c
Normal file
327
tests/scripts/dlm_seq_sync.c
Normal file
@ -0,0 +1,327 @@
|
||||
/*
|
||||
* Copyright (c) 2011 David Teigland
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License V2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it would be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
/* gcc dlm_seq_sync.c -ldlm_lt -o dlm_seq_sync */
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
#include <syslog.h>
|
||||
#include <sys/time.h>
|
||||
#include <asm/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/poll.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/errno.h>
|
||||
|
||||
#include "libdlm.h"
|
||||
|
||||
#define DEFAULT_NUM_R 1000
|
||||
#define DEFAULT_NUM_LPR 1
|
||||
|
||||
static dlm_lshandle_t *dh;
|
||||
static int openclose = 0;
|
||||
static int quiet = 0;
|
||||
static int verbose = 0;
|
||||
static int opt_convert = 0;
|
||||
static int opt_unlock = 0;
|
||||
static int opt_delay = 0;
|
||||
static unsigned int num_r = DEFAULT_NUM_R;
|
||||
static unsigned int num_lpr = DEFAULT_NUM_LPR;
|
||||
static unsigned int num_iter = 1;
|
||||
static unsigned int iter = 0;
|
||||
static uint32_t *lkids;
|
||||
static struct dlm_lksb lksb;
|
||||
static unsigned int cb_count;
|
||||
|
||||
#define log_debug(fmt, args...) \
|
||||
do { \
|
||||
if (!quiet) \
|
||||
printf(fmt "\n", ##args); \
|
||||
} while (0)
|
||||
|
||||
#define log_error(fmt, args...) \
|
||||
do { \
|
||||
printf("ERROR " fmt "\n", ##args); \
|
||||
exit(-1); \
|
||||
} while (0)
|
||||
|
||||
|
||||
static void seq(int acquire, int convert, int unlock, int mode)
|
||||
{
|
||||
char name[DLM_RESNAME_MAXLEN];
|
||||
uint32_t lkid;
|
||||
int i, j, rv;
|
||||
|
||||
for (i = 0; i < num_r; i++) {
|
||||
snprintf(name, sizeof(name), "seq.%08d", i);
|
||||
|
||||
for (j = 0; j < num_lpr; j++) {
|
||||
memset(&lksb, 0, sizeof(lksb));
|
||||
|
||||
if (acquire) {
|
||||
printf("acquire %s %d\n", name, mode);
|
||||
rv = dlm_ls_lock_wait(dh, mode, &lksb, 0,
|
||||
name, strlen(name),
|
||||
0, NULL, NULL, NULL);
|
||||
}
|
||||
if (convert) {
|
||||
lksb.sb_lkid = lkids[(i * num_lpr) + j];
|
||||
|
||||
printf("convert %s %x %d\n", name, lksb.sb_lkid, mode);
|
||||
|
||||
rv = dlm_ls_lock_wait(dh, mode, &lksb,
|
||||
LKF_CONVERT,
|
||||
name, strlen(name),
|
||||
0, NULL, NULL, NULL);
|
||||
}
|
||||
if (unlock) {
|
||||
lkid = lkids[(i * num_lpr) + j];
|
||||
|
||||
printf("unlock %s %x\n", name, lkid);
|
||||
|
||||
rv = dlm_ls_unlock_wait(dh, lkid, 0, &lksb);
|
||||
}
|
||||
|
||||
if (rv) {
|
||||
log_error("dlm op %d %d %d %d,%d error %d",
|
||||
acquire, convert, unlock, i, j, rv);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (acquire && lkids)
|
||||
lkids[(i * num_lpr) + j] = lksb.sb_lkid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void print_usage(void)
|
||||
{
|
||||
printf("dlm_seq [options]\n");
|
||||
printf("Options:\n");
|
||||
printf("\n");
|
||||
printf(" -i <n> Iterations (0 no limit), default 1)\n");
|
||||
printf(" -r <n> The number of resources, default %d\n", DEFAULT_NUM_R);
|
||||
printf(" -l <n> The number of locks per resource, default %d\n", DEFAULT_NUM_LPR);
|
||||
printf(" -c Convert locks after acquiring them all\n");
|
||||
printf(" -u Unlock locks after acquire/convert\n");
|
||||
printf(" -s Same resource names in each iteration\n");
|
||||
printf(" -d <us> Delay us between consecutive seq\n");
|
||||
printf(" -o Open/close existing lockspace\n");
|
||||
printf(" -v Verbose output\n");
|
||||
printf(" -q Quiet output\n");
|
||||
}
|
||||
|
||||
static void decode_arguments(int argc, char **argv)
|
||||
{
|
||||
int cont = 1;
|
||||
int optchar;
|
||||
|
||||
while (cont) {
|
||||
optchar = getopt(argc, argv, "i:r:l:cuvqohad:s");
|
||||
|
||||
switch (optchar) {
|
||||
|
||||
case 'i':
|
||||
num_iter = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
num_r = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
num_lpr = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
opt_convert = 1;
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
opt_unlock = 1;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
opt_delay = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
openclose = 1;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
quiet = 1;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
print_usage();
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
printf("%s (built %s %s)\n", argv[0], __DATE__, __TIME__);
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case ':':
|
||||
case '?':
|
||||
fprintf(stderr, "Please use '-h' for usage.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case EOF:
|
||||
cont = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "unknown option: %c\n", optchar);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void _acquire(int mode)
|
||||
{
|
||||
seq(1, 0, 0, mode);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
void _convert(int mode)
|
||||
{
|
||||
seq(0, 1, 0, mode);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
void _unlock(void)
|
||||
{
|
||||
seq(0, 0, 1, 0);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rv, quit = 0;
|
||||
|
||||
decode_arguments(argc, argv);
|
||||
|
||||
printf("%d resources, %d locks per resource\n", num_r, num_lpr);
|
||||
|
||||
if (openclose) {
|
||||
log_debug("dlm_open_lockspace...");
|
||||
|
||||
dh = dlm_open_lockspace("dlm_seq");
|
||||
if (!dh) {
|
||||
log_error("dlm_open_lockspace error %lu %d",
|
||||
(unsigned long)dh, errno);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
} else {
|
||||
log_debug("dlm_new_lockspace...");
|
||||
|
||||
dh = dlm_new_lockspace("dlm_seq", 0600, 0);
|
||||
if (!dh) {
|
||||
log_error("dlm_new_lockspace error %lu %d",
|
||||
(unsigned long)dh, errno);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
}
|
||||
|
||||
lkids = malloc(sizeof(uint32_t) * (num_r * num_lpr));
|
||||
if (!lkids) {
|
||||
log_error("no mem");
|
||||
goto done;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
_acquire(LKM_EXMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_EXMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_EXMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_unlock();
|
||||
|
||||
_acquire(LKM_PRMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_PRMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
|
||||
_acquire(LKM_NLMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_NLMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_NLMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_unlock();
|
||||
|
||||
iter++;
|
||||
|
||||
if (!num_iter)
|
||||
continue;
|
||||
if (iter == num_iter)
|
||||
break;
|
||||
}
|
||||
|
||||
free(lkids);
|
||||
|
||||
done:
|
||||
if (openclose) {
|
||||
log_debug("dlm_close_lockspace");
|
||||
|
||||
rv = dlm_close_lockspace(dh);
|
||||
if (rv < 0)
|
||||
log_error("dlm_close_lockspace error %d %d",
|
||||
rv, errno);
|
||||
} else {
|
||||
log_debug("dlm_release_lockspace");
|
||||
|
||||
rv = dlm_release_lockspace("dlm_seq", dh, 1);
|
||||
if (rv < 0)
|
||||
log_error("dlm_release_lockspace error %d %d",
|
||||
rv, errno);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
50
tests/scripts/run_tests.sh
Executable file
50
tests/scripts/run_tests.sh
Executable file
@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
|
||||
COROSYNC_NODE=$(hostname)
|
||||
|
||||
sed -e "s/@LOCAL_NODE@/$COROSYNC_NODE/" test-corosync-conf > /etc/corosync/corosync.conf
|
||||
|
||||
modprobe configfs
|
||||
mount -t configfs none /sys/kernel/config
|
||||
|
||||
modprobe dlm
|
||||
|
||||
ls /sys/kernel/config
|
||||
ls /sys/kernel/config/dlm
|
||||
|
||||
mkdir /var/log/cluster
|
||||
|
||||
systemctl start corosync
|
||||
sleep 2
|
||||
corosync-quorumtool
|
||||
sleep 2
|
||||
|
||||
tail -8 /var/log/cluster/corosync.conf
|
||||
|
||||
mkdir /var/log/dlm_controld
|
||||
|
||||
dlm_controld --log_debug --debug_logfile --enable_fencing 0 --enable_quorum_lockspace 0 --enable_quorum_fencing 0 --enable_startup_fencing 0
|
||||
sleep 2
|
||||
|
||||
tail -8 /var/log/dlm_controld/dlm_controld.log
|
||||
|
||||
ls /sys/kernel/config/dlm
|
||||
|
||||
dlm_tool status
|
||||
|
||||
gcc dlm_seq_async.c -ldlm -o dlm_seq_async
|
||||
gcc dlm_seq_sync.c -ldlm_lt -o dlm_seq_sync
|
||||
|
||||
./dlm_seq_sync -i 100 -d 10000 -c -u -v -r 10 -i 10
|
||||
|
||||
[ $? -ne 0 ] && echo "dlm_seq_sync error" >&2 && exit 1
|
||||
|
||||
./dlm_seq_async -i 100 -d 10000 -c -u -v -r 10 -i 10
|
||||
|
||||
[ $? -ne 0 ] && echo "dlm_seq_async error" >&2 && exit 1
|
||||
|
||||
pkill dlm_controld
|
||||
sleep 2
|
||||
corosync-cfgtool -H
|
20
tests/scripts/test-corosync-conf
Normal file
20
tests/scripts/test-corosync-conf
Normal file
@ -0,0 +1,20 @@
|
||||
totem {
|
||||
version: 2
|
||||
secauth: off
|
||||
cluster_name: test
|
||||
}
|
||||
nodelist {
|
||||
node {
|
||||
ring0_addr: @LOCAL_NODE@
|
||||
nodeid: 1
|
||||
}
|
||||
}
|
||||
quorum {
|
||||
provider: corosync_votequorum
|
||||
}
|
||||
logging {
|
||||
to_logfile: yes
|
||||
logfile: /var/log/cluster/corosync.log
|
||||
to_syslog: yes
|
||||
}
|
||||
|
14
tests/tests.yml
Normal file
14
tests/tests.yml
Normal file
@ -0,0 +1,14 @@
|
||||
- hosts: localhost
|
||||
roles:
|
||||
- role: standard-test-basic # this is a standard test role, it takes care of the test environment, logging, archiving results..
|
||||
tags:
|
||||
- classic
|
||||
tests:
|
||||
- simple:
|
||||
dir: scripts
|
||||
run: ./run_tests.sh
|
||||
required_packages:
|
||||
- dlm
|
||||
- dlm-devel
|
||||
- corosync
|
||||
- gcc
|
Loading…
Reference in New Issue
Block a user