[sanlock/f18] update to sanlock-2.6-6

Federico Simoncelli fsimonce at fedoraproject.org
Sun Jan 13 12:41:50 UTC 2013


commit 572ceee374ad829e7065d71ef42e1bd84b589ae5
Author: Federico Simoncelli <fsimonce at redhat.com>
Date:   Sun Jan 13 12:00:41 2013 +0100

    update to sanlock-2.6-6
    
    - wdmd: fix miscellaneous build warnings
    - wdmd: dynamically select working watchdog device

 0005-wdmd-fix-miscellaneous-build-warnings.patch   |   59 +++++++
 ...ynamically-select-working-watchdog-device.patch |  164 ++++++++++++++++++++
 sanlock.spec                                       |    9 +-
 3 files changed, 231 insertions(+), 1 deletions(-)
---
diff --git a/0005-wdmd-fix-miscellaneous-build-warnings.patch b/0005-wdmd-fix-miscellaneous-build-warnings.patch
new file mode 100644
index 0000000..7997062
--- /dev/null
+++ b/0005-wdmd-fix-miscellaneous-build-warnings.patch
@@ -0,0 +1,59 @@
+From e076556572ae9129807a0ae00bb63b7ff0a54807 Mon Sep 17 00:00:00 2001
+From: Federico Simoncelli <fsimonce at redhat.com>
+Date: Mon, 10 Dec 2012 17:33:58 +0100
+Subject: [PATCH 5/6] wdmd: fix miscellaneous build warnings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fixed warnings:
+* wdmd: _FORTIFY_SOURCE requires compiling with optimization (-O)
+* wdmd: initialization discards ‘const’ qualifier from pointer target type
+* ignoring return value of ‘write’
+
+Signed-off-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ wdmd/Makefile | 2 +-
+ wdmd/main.c   | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/wdmd/Makefile b/wdmd/Makefile
+index de6b035..bf871c5 100644
+--- a/wdmd/Makefile
++++ b/wdmd/Makefile
+@@ -21,7 +21,7 @@ LIB_SOURCE = client.c wdmd_sock.c
+ 
+ TEST_SOURCE = wdmd_client.c
+ 
+-CFLAGS += -D_GNU_SOURCE -g \
++CFLAGS += -D_GNU_SOURCE -g -O2 \
+ 	-Wall \
+ 	-Wformat \
+ 	-Wformat-security \
+diff --git a/wdmd/main.c b/wdmd/main.c
+index ff2d57c..8a97f04 100644
+--- a/wdmd/main.c
++++ b/wdmd/main.c
+@@ -63,8 +63,8 @@ static int shm_fd;
+ 
+ static int allow_scripts;
+ static int kill_script_sec;
+-static char *scripts_dir = (char *)"/etc/wdmd.d";
+-static char *watchdog_path = "/dev/watchdog";
++static const char *scripts_dir = "/etc/wdmd.d";
++static const char *watchdog_path = "/dev/watchdog";
+ 
+ struct script_status {
+ 	uint64_t start;
+@@ -1307,7 +1307,7 @@ static void print_debug_and_exit(void)
+ 	if (rv < 0)
+ 		exit(1);
+ 
+-	write(STDOUT_FILENO, debug_buf, strlen(debug_buf));
++	rv = write(STDOUT_FILENO, debug_buf, strlen(debug_buf));
+ 
+ 	exit(0);
+ }
+-- 
+1.7.11.7
+
diff --git a/0006-wdmd-dynamically-select-working-watchdog-device.patch b/0006-wdmd-dynamically-select-working-watchdog-device.patch
new file mode 100644
index 0000000..58596da
--- /dev/null
+++ b/0006-wdmd-dynamically-select-working-watchdog-device.patch
@@ -0,0 +1,164 @@
+From b154ab95212f2a882f9893000a184199baa8fb68 Mon Sep 17 00:00:00 2001
+From: David Teigland <teigland at redhat.com>
+Date: Tue, 8 Jan 2013 14:23:14 -0600
+Subject: [PATCH 6/6] wdmd: dynamically select working watchdog device
+
+Some watchdog drivers enable both /dev/watchdog0 and
+/dev/watchdog1.  Sometimes, only one of them works,
+and the working one is not consistent.  So, we need
+to test which works before deciding which to use.
+
+Signed-off-by: David Teigland <teigland at redhat.com>
+---
+ wdmd/main.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 82 insertions(+), 5 deletions(-)
+
+diff --git a/wdmd/main.c b/wdmd/main.c
+index 8a97f04..827d1bb 100644
+--- a/wdmd/main.c
++++ b/wdmd/main.c
+@@ -49,6 +49,8 @@
+ #define DEFAULT_SOCKET_GID 0
+ #define DEFAULT_SOCKET_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
+ 
++#define WDPATH_SIZE 64
++
+ static int test_interval = DEFAULT_TEST_INTERVAL;
+ static int fire_timeout = DEFAULT_FIRE_TIMEOUT;
+ static int high_priority = DEFAULT_HIGH_PRIORITY;
+@@ -64,7 +66,9 @@ static int shm_fd;
+ static int allow_scripts;
+ static int kill_script_sec;
+ static const char *scripts_dir = "/etc/wdmd.d";
+-static const char *watchdog_path = "/dev/watchdog";
++static char watchdog_path[WDPATH_SIZE];
++static char option_path[WDPATH_SIZE];
++static char saved_path[WDPATH_SIZE];
+ 
+ struct script_status {
+ 	uint64_t start;
+@@ -928,7 +932,7 @@ static int open_dev(void)
+ 
+ 	fd = open(watchdog_path, O_WRONLY | O_CLOEXEC);
+ 	if (fd < 0) {
+-		log_error("no %s, load a watchdog driver", watchdog_path);
++		log_error("open %s error %d", watchdog_path, errno);
+ 		return fd;
+ 	}
+ 
+@@ -969,10 +973,18 @@ static void close_watchdog(void)
+ 	dev_fd = -1;
+ }
+ 
+-static int setup_watchdog(void)
++static int _setup_watchdog(char *path)
+ {
++	struct stat buf;
+ 	int rv, timeout;
+ 
++	strncpy(watchdog_path, path, WDPATH_SIZE);
++	watchdog_path[WDPATH_SIZE - 1] = '\0';
++
++	rv = stat(watchdog_path, &buf);
++	if (rv < 0)
++		return -1;
++
+ 	rv = open_dev();
+ 	if (rv < 0)
+ 		return -1;
+@@ -1006,9 +1018,73 @@ static int setup_watchdog(void)
+  out:
+ 	log_error("%s armed with fire_timeout %d", watchdog_path, fire_timeout);
+ 
++	/* TODO: save watchdog_path in /var/run/wdmd/saved_path,
++	 * and in startup read that file, copying it to saved_path */
++
+ 	return 0;
+ }
+ 
++/*
++ * Order of preference:
++ * . saved path (path used before daemon restart)
++ * . command line option (-w)
++ * . /dev/watchdog0
++ * . /dev/watchdog1
++ * . /dev/watchdog
++ */
++
++static int setup_watchdog(void)
++{
++	int rv;
++
++	if (!saved_path[0])
++		goto opt;
++
++	rv = _setup_watchdog(saved_path);
++	if (!rv)
++		return 0;
++
++ opt:
++	if (!option_path[0] || !strcmp(saved_path, option_path))
++		goto zero;
++
++	rv = _setup_watchdog(option_path);
++	if (!rv)
++		return 0;
++
++ zero:
++	if (!strcmp(saved_path, "/dev/watchdog0") ||
++	    !strcmp(option_path, "/dev/watchdog0"))
++		goto one;
++
++	rv = _setup_watchdog((char *)"/dev/watchdog0");
++	if (!rv)
++		return 0;
++
++ one:
++	if (!strcmp(saved_path, "/dev/watchdog1") ||
++	    !strcmp(option_path, "/dev/watchdog1"))
++		goto old;
++
++	rv = _setup_watchdog((char *)"/dev/watchdog1");
++	if (!rv)
++		return 0;
++
++ old:
++	if (!strcmp(saved_path, "/dev/watchdog") ||
++	    !strcmp(option_path, "/dev/watchdog"))
++		goto out;
++
++	rv = _setup_watchdog((char *)"/dev/watchdog");
++	if (!rv)
++		return 0;
++
++ out:
++	log_error("no watchdog device, load a watchdog driver");
++	return -1;
++
++}
++
+ static void pet_watchdog(void)
+ {
+ 	int rv, unused;
+@@ -1327,7 +1403,7 @@ static void print_usage_and_exit(int status)
+ 	printf("-s <path>             path to scripts dir (default %s)\n", scripts_dir);
+ 	printf("-k <num>              kill unfinished scripts after num seconds (default %d)\n",
+ 				      kill_script_sec);
+-	printf("-w /dev/watchdog      path to the watchdog device (default %s)\n", watchdog_path);
++	printf("-w /dev/watchdog      path to the watchdog device to try first\n");
+ 	exit(status);
+ }
+ 
+@@ -1394,7 +1470,8 @@ int main(int argc, char *argv[])
+ 		    kill_script_sec = atoi(optarg);
+ 		    break;
+ 		case 'w':
+-		    watchdog_path = strdup(optarg);
++		    snprintf(option_path, WDPATH_SIZE, "%s", optarg);
++		    option_path[WDPATH_SIZE - 1] = '\0';
+ 		    break;
+ 	    }
+ 	}
+-- 
+1.7.11.7
+
diff --git a/sanlock.spec b/sanlock.spec
index 5909cfa..c7fb105 100644
--- a/sanlock.spec
+++ b/sanlock.spec
@@ -1,6 +1,6 @@
 Name:           sanlock
 Version:        2.6
-Release:        5%{?dist}
+Release:        6%{?dist}
 Summary:        A shared disk lock manager
 
 Group:          System Environment/Base
@@ -23,6 +23,9 @@ Patch0: 0001-fix-systemd-service-files.patch
 Patch1: 0002-wdmd-use-mode-775-for-run-dir.patch
 Patch2: 0003-systemd-add-wdmd-dependency-for-sanlock.patch
 Patch3: 0004-wdmd-make-the-watchdog-device-configurable.patch
+Patch4: 0005-wdmd-fix-miscellaneous-build-warnings.patch
+Patch5: 0006-wdmd-dynamically-select-working-watchdog-device.patch
+
 
 %description
 sanlock uses disk paxos to manage leases on shared storage.
@@ -263,6 +266,10 @@ if [ $1 -ge 1 ] ; then
 fi
 
 %changelog
+* Sun Jan 13 2013 Federico Simoncelli <fsimonce at redhat.com> 2.6-6
+- wdmd: fix miscellaneous build warnings
+- wdmd: dynamically select working watchdog device
+
 * Wed Jan  2 2013 Federico Simoncelli <fsimonce at redhat.com> 2.6-5
 - wdmd: make the watchdog device configurable
 


More information about the scm-commits mailing list