[device-mapper-multipath] device-mapper-multipath-0.4.9-49

Benjamin Marzinski bmarzins at fedoraproject.org
Fri Apr 26 22:42:32 UTC 2013


commit eaac5636447a25b9c6dcf61c60d8a206cc23a838
Author: Benjamin Marzinski <bmarzins at redhat.com>
Date:   Fri Apr 26 11:43:50 2013 -0500

    device-mapper-multipath-0.4.9-49
    
    Modify 0020-RHBZ-907360-static-pthread-init.patch
      * Don't initialize uevent list twice
    Add 0029-RH-no-prio-put-msg.patch
    Add 0030-RHBZ-916528-override-queue-no-daemon.patch
      * Default to "queue_without_daemon no"
      * Add "forcequeueing daemon" and "restorequeueing daemon" cli commands
    Modify spec file to force queue_without_daemon when restarting
      multipathd on upgrades.

 0020-RHBZ-907360-static-pthread-init.patch      |   14 +-
 0029-RH-no-prio-put-msg.patch                   |   20 +++
 0030-RHBZ-916528-override-queue-no-daemon.patch |  200 +++++++++++++++++++++++
 device-mapper-multipath.spec                    |   19 ++-
 4 files changed, 246 insertions(+), 7 deletions(-)
---
diff --git a/0020-RHBZ-907360-static-pthread-init.patch b/0020-RHBZ-907360-static-pthread-init.patch
index 00e9a45..bafa5ce 100644
--- a/0020-RHBZ-907360-static-pthread-init.patch
+++ b/0020-RHBZ-907360-static-pthread-init.patch
@@ -1,6 +1,6 @@
 ---
- libmultipath/uevent.c |   10 ++++------
- 1 file changed, 4 insertions(+), 6 deletions(-)
+ libmultipath/uevent.c |   12 ++++--------
+ 1 file changed, 4 insertions(+), 8 deletions(-)
 
 Index: multipath-tools-130222/libmultipath/uevent.c
 ===================================================================
@@ -19,16 +19,18 @@ Index: multipath-tools-130222/libmultipath/uevent.c
  uev_trigger *my_uev_trigger;
  void * my_trigger_data;
  int servicing_uev;
-@@ -411,8 +413,6 @@ int uevent_listen(void)
+@@ -409,10 +411,6 @@ int uevent_listen(void)
+ 	 * thereby not getting to empty the socket's receive buffer queue
+ 	 * often enough.
  	 */
- 	INIT_LIST_HEAD(&uevq);
- 
+-	INIT_LIST_HEAD(&uevq);
+-
 -	pthread_mutex_init(uevq_lockp, NULL);
 -	pthread_cond_init(uev_condp, NULL);
  	pthread_cleanup_push(uevq_stop, NULL);
  
  	monitor = udev_monitor_new_from_netlink(conf->udev, "udev");
-@@ -525,8 +525,6 @@ out:
+@@ -525,8 +523,6 @@ out:
  	if (need_failback)
  		err = failback_listen();
  	pthread_cleanup_pop(1);
diff --git a/0029-RH-no-prio-put-msg.patch b/0029-RH-no-prio-put-msg.patch
new file mode 100644
index 0000000..6ebdae0
--- /dev/null
+++ b/0029-RH-no-prio-put-msg.patch
@@ -0,0 +1,20 @@
+---
+ libmultipath/prio.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+Index: multipath-tools-130222/libmultipath/prio.c
+===================================================================
+--- multipath-tools-130222.orig/libmultipath/prio.c
++++ multipath-tools-130222/libmultipath/prio.c
+@@ -162,7 +162,10 @@ void prio_put (struct prio * dst)
+ 	if (!dst)
+ 		return;
+ 
+-	src = prio_lookup(dst->name);
++	if (!strlen(dst->name))
++		src = NULL;
++	else
++		src = prio_lookup(dst->name);
+ 	memset(dst, 0x0, sizeof(struct prio));
+ 	free_prio(src);
+ }
diff --git a/0030-RHBZ-916528-override-queue-no-daemon.patch b/0030-RHBZ-916528-override-queue-no-daemon.patch
new file mode 100644
index 0000000..e663ded
--- /dev/null
+++ b/0030-RHBZ-916528-override-queue-no-daemon.patch
@@ -0,0 +1,200 @@
+---
+ libmultipath/dict.c               |   10 ++++------
+ libmultipath/structs.h            |    2 +-
+ multipathd/cli.c                  |    3 +++
+ multipathd/cli.h                  |    2 ++
+ multipathd/cli_handlers.c         |   18 ++++++++++++++++++
+ multipathd/cli_handlers.h         |    2 ++
+ multipathd/main.c                 |    2 ++
+ multipathd/multipathd.init.redhat |   14 ++++++++++----
+ 8 files changed, 42 insertions(+), 11 deletions(-)
+
+Index: multipath-tools-130222/libmultipath/dict.c
+===================================================================
+--- multipath-tools-130222.orig/libmultipath/dict.c
++++ multipath-tools-130222/libmultipath/dict.c
+@@ -438,14 +438,11 @@ def_queue_without_daemon(vector strvec)
+ 	if (!buff)
+ 		return 1;
+ 
+-	if (!strncmp(buff, "off", 3) || !strncmp(buff, "no", 2) ||
+-	    !strncmp(buff, "0", 1))
+-		conf->queue_without_daemon = QUE_NO_DAEMON_OFF;
+-	else if (!strncmp(buff, "on", 2) || !strncmp(buff, "yes", 3) ||
++	if (!strncmp(buff, "on", 2) || !strncmp(buff, "yes", 3) ||
+ 		 !strncmp(buff, "1", 1))
+ 		conf->queue_without_daemon = QUE_NO_DAEMON_ON;
+ 	else
+-		conf->queue_without_daemon = QUE_NO_DAEMON_UNDEF;
++		conf->queue_without_daemon = QUE_NO_DAEMON_OFF;
+ 
+ 	free(buff);
+ 	return 0;
+@@ -2670,8 +2667,9 @@ snprint_def_queue_without_daemon (char *
+ 	case QUE_NO_DAEMON_OFF:
+ 		return snprintf(buff, len, "\"no\"");
+ 	case QUE_NO_DAEMON_ON:
+-	case QUE_NO_DAEMON_UNDEF:
+ 		return snprintf(buff, len, "\"yes\"");
++	case QUE_NO_DAEMON_FORCE:
++		return snprintf(buff, len, "\"forced\"");
+ 	}
+ 	return 0;
+ }
+Index: multipath-tools-130222/libmultipath/structs.h
+===================================================================
+--- multipath-tools-130222.orig/libmultipath/structs.h
++++ multipath-tools-130222/libmultipath/structs.h
+@@ -67,9 +67,9 @@ enum pgstates {
+ };
+ 
+ enum queue_without_daemon_states {
+-	QUE_NO_DAEMON_UNDEF,
+ 	QUE_NO_DAEMON_OFF,
+ 	QUE_NO_DAEMON_ON,
++	QUE_NO_DAEMON_FORCE,
+ };
+ 
+ enum pgtimeouts {
+Index: multipath-tools-130222/multipathd/cli.c
+===================================================================
+--- multipath-tools-130222.orig/multipathd/cli.c
++++ multipath-tools-130222/multipathd/cli.c
+@@ -162,6 +162,7 @@ load_keys (void)
+ 	r += add_key(keys, "resize", RESIZE, 0);
+ 	r += add_key(keys, "reset", RESET, 0);
+ 	r += add_key(keys, "reload", RELOAD, 0);
++	r += add_key(keys, "forcequeueing", FORCEQ, 0);
+ 	r += add_key(keys, "disablequeueing", DISABLEQ, 0);
+ 	r += add_key(keys, "restorequeueing", RESTOREQ, 0);
+ 	r += add_key(keys, "paths", PATHS, 0);
+@@ -459,6 +460,8 @@ cli_init (void) {
+ 	add_handler(GETPRSTATUS+MAP, NULL);
+ 	add_handler(SETPRSTATUS+MAP, NULL);
+ 	add_handler(UNSETPRSTATUS+MAP, NULL);
++	add_handler(FORCEQ+DAEMON, NULL);
++	add_handler(RESTOREQ+DAEMON, NULL);
+ 
+ 	return 0;
+ }
+Index: multipath-tools-130222/multipathd/cli.h
+===================================================================
+--- multipath-tools-130222.orig/multipathd/cli.h
++++ multipath-tools-130222/multipathd/cli.h
+@@ -10,6 +10,7 @@ enum {
+ 	__RESIZE,
+ 	__RESET,
+ 	__RELOAD,
++	__FORCEQ,
+ 	__DISABLEQ,
+ 	__RESTOREQ,
+ 	__PATHS,
+@@ -45,6 +46,7 @@ enum {
+ #define RESIZE		(1 << __RESIZE)
+ #define RESET		(1 << __RESET)
+ #define RELOAD		(1 << __RELOAD)
++#define FORCEQ		(1 << __FORCEQ)
+ #define DISABLEQ	(1 << __DISABLEQ)
+ #define RESTOREQ	(1 << __RESTOREQ)
+ #define PATHS		(1 << __PATHS)
+Index: multipath-tools-130222/multipathd/cli_handlers.c
+===================================================================
+--- multipath-tools-130222.orig/multipathd/cli_handlers.c
++++ multipath-tools-130222/multipathd/cli_handlers.c
+@@ -628,6 +628,24 @@ cli_resize(void *v, char **reply, int *l
+ }
+ 
+ int
++cli_force_no_daemon_q(void * v, char ** reply, int * len, void * data)
++{
++	condlog(2, "force queue_without_daemon (operator)");
++	if (conf->queue_without_daemon == QUE_NO_DAEMON_OFF)
++		conf->queue_without_daemon = QUE_NO_DAEMON_FORCE;
++	return 0;
++}
++
++int
++cli_restore_no_daemon_q(void * v, char ** reply, int * len, void * data)
++{
++	condlog(2, "restore queue_without_daemon (operator)");
++	if (conf->queue_without_daemon == QUE_NO_DAEMON_FORCE)
++		conf->queue_without_daemon = QUE_NO_DAEMON_OFF;
++	return 0;
++}
++
++int
+ cli_restore_queueing(void *v, char **reply, int *len, void *data)
+ {
+ 	struct vectors * vecs = (struct vectors *)data;
+Index: multipath-tools-130222/multipathd/cli_handlers.h
+===================================================================
+--- multipath-tools-130222.orig/multipathd/cli_handlers.h
++++ multipath-tools-130222/multipathd/cli_handlers.h
+@@ -28,6 +28,8 @@ int cli_suspend(void * v, char ** reply,
+ int cli_resume(void * v, char ** reply, int * len, void * data);
+ int cli_reinstate(void * v, char ** reply, int * len, void * data);
+ int cli_fail(void * v, char ** reply, int * len, void * data);
++int cli_force_no_daemon_q(void * v, char ** reply, int * len, void * data);
++int cli_restore_no_daemon_q(void * v, char ** reply, int * len, void * data);
+ int cli_quit(void * v, char ** reply, int * len, void * data);
+ int cli_shutdown(void * v, char ** reply, int * len, void * data);
+ int cli_reassign (void * v, char ** reply, int * len, void * data);
+Index: multipath-tools-130222/multipathd/main.c
+===================================================================
+--- multipath-tools-130222.orig/multipathd/main.c
++++ multipath-tools-130222/multipathd/main.c
+@@ -904,6 +904,8 @@ uxlsnrloop (void * ap)
+ 	set_handler_callback(GETPRSTATUS+MAP, cli_getprstatus);
+ 	set_handler_callback(SETPRSTATUS+MAP, cli_setprstatus);
+ 	set_handler_callback(UNSETPRSTATUS+MAP, cli_unsetprstatus);
++	set_handler_callback(FORCEQ+DAEMON, cli_force_no_daemon_q);
++	set_handler_callback(RESTOREQ+DAEMON, cli_restore_no_daemon_q);
+ 
+ 	umask(077);
+ 	uxsock_listen(&uxsock_trigger, ap);
+Index: multipath-tools-130222/multipathd/multipathd.init.redhat
+===================================================================
+--- multipath-tools-130222.orig/multipathd/multipathd.init.redhat
++++ multipath-tools-130222/multipathd/multipathd.init.redhat
+@@ -81,23 +81,28 @@ force_stop() {
+ 	echo
+ }
+ 
+-stop() {
++check_root() {
+         root_dev=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $1; }}' /etc/mtab)
+ 	dm_num=`dmsetup info -c --noheadings -o minor $root_dev 2> /dev/null`
+ 	if [ $? -eq 0 ]; then
+ 		root_dm_device="dm-$dm_num"
+ 		[ -d $syspath/$root_dm_device ] && teardown_slaves $syspath/$root_dm_device
+ 	fi
++}
+ 
+-	force_stop
++force_queue_without_daemon() {
++	$DAEMON forcequeueing daemon
+ }
+ 
+ restart() {
+-	stop
++	force_queue_without_daemon
++	check_root
++	force_stop
+ 	start
+ }
+ 
+ force_restart() {
++	force_queue_without_daemon
+ 	force_stop
+ 	start
+ }
+@@ -115,7 +120,8 @@ start)
+ 	start
+ 	;;
+ stop)
+-	stop
++	check_root
++	force_stop
+ 	;;
+ force-stop)
+ 	force_stop
diff --git a/device-mapper-multipath.spec b/device-mapper-multipath.spec
index 3dbbeef..821f27c 100644
--- a/device-mapper-multipath.spec
+++ b/device-mapper-multipath.spec
@@ -1,7 +1,7 @@
 Summary: Tools to manage multipath devices using device-mapper
 Name: device-mapper-multipath
 Version: 0.4.9
-Release: 48%{?dist}
+Release: 49%{?dist}
 License: GPL+
 Group: System Environment/Base
 URL: http://christophe.varoqui.free.fr/
@@ -36,6 +36,8 @@ Patch0025: 0025-UPBZ-916668_add_maj_min.patch
 Patch0026: 0026-fix-checker-time.patch
 Patch0027: 0027-RH-get-wwid.patch
 Patch0028: 0028-RHBZ-929078-refresh-udev-dev.patch
+Patch0029: 0029-RH-no-prio-put-msg.patch
+Patch0030: 0030-RHBZ-916528-override-queue-no-daemon.patch
 
 # runtime
 Requires: %{name}-libs = %{version}-%{release}
@@ -116,6 +118,8 @@ kpartx manages partition creation and removal for device-mapper devices.
 %patch0026 -p1
 %patch0027 -p1
 %patch0028 -p1
+%patch0029 -p1
+%patch0030 -p1
 cp %{SOURCE1} .
 
 %build
@@ -148,6 +152,9 @@ rm -rf %{buildroot}
 %systemd_preun multipathd.service
 
 %postun
+if [ $1 -ge 1 ] ; then
+	/sbin/multipathd forcequeueing daemon > /dev/null 2>&1 || :
+fi
 %systemd_postun_with_restart multipathd.service
 
 %triggerun -- %{name} < 0.4.9-37
@@ -206,6 +213,16 @@ bin/systemctl --no-reload enable multipathd.service >/dev/null 2>&1 ||:
 %{_mandir}/man8/kpartx.8.gz
 
 %changelog
+* Fri Apr 26 2013 Benjamin Marzinski <bmarzins at redhat.com> 0.4.9-49
+- Modify 0020-RHBZ-907360-static-pthread-init.patch
+  * Don't initialize uevent list twice
+- Add 0029-RH-no-prio-put-msg.patch
+- Add 0030-RHBZ-916528-override-queue-no-daemon.patch
+  * Default to "queue_without_daemon no"
+  * Add "forcequeueing daemon" and "restorequeueing daemon" cli commands
+- Modify spec file to force queue_without_daemon when restarting
+  multipathd on upgrades.
+
 * Thu Apr  4 2013 Benjamin Marzinski <bmarzins at redhat.com> 0.4.9-48
 - Add 0026-fix-checker-time.patch
   * Once multipathd hit it max checker interval, it was reverting to


More information about the scm-commits mailing list