[dm-devel] multipath-tools ./multipath.conf.annotated ./m ...
bmarzins at sourceware.org
bmarzins at sourceware.org
Mon Sep 8 22:01:21 UTC 2008
CVSROOT: /cvs/dm
Module name: multipath-tools
Branch: RHEL5_FC6
Changes by: bmarzins at sourceware.org 2008-09-08 22:01:20
Modified files:
. : multipath.conf.annotated
multipath.conf.synthetic
libmultipath : config.h dict.c structs.h waiter.c
multipathd : main.c
Log message:
Fix for bz #419581. There is a new default multipath.conf option,
queue_without_daemon. It defaults to 'yes'. If it is set to 'no', when
multipathd is stopped, queue_if_no_path is disabled.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipath.conf.annotated.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.18.2.8&r2=1.18.2.9
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipath.conf.synthetic.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.11.2.5&r2=1.11.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/config.h.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.18.2.6&r2=1.18.2.7
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/dict.c.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.17.2.7&r2=1.17.2.8
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/structs.h.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.18.2.5&r2=1.18.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/waiter.c.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.1.2.2&r2=1.1.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipathd/main.c.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.69.2.11&r2=1.69.2.12
--- multipath-tools/multipath.conf.annotated 2008/09/04 20:09:48 1.18.2.8
+++ multipath-tools/multipath.conf.annotated 2008/09/08 22:01:19 1.18.2.9
@@ -121,6 +121,7 @@
# #
# #no_path_retry queue
#
+# #
# # name : flush_on_last_del
# # scope : multipathd
# # desc : If set to "yes", multipathd will disable queueing when the
@@ -131,6 +132,16 @@
# flush_on_last_del yes
#
# #
+# # name : queue_without_daemon
+# # scope : multipathd
+# # desc : If set to "no", multipathd will disable queueing for all
+# # devices when it is shut down.
+# # values : yes|no
+# # default : yes
+# #
+# flush_on_last_del no
+#
+# #
# # name : user_friendly_names
# # scope : multipath
# # desc : If set to "yes", using the bindings file
--- multipath-tools/multipath.conf.synthetic 2008/09/04 20:09:48 1.11.2.5
+++ multipath-tools/multipath.conf.synthetic 2008/09/08 22:01:19 1.11.2.6
@@ -17,6 +17,7 @@
# no_path_retry fail
# user_friendly_names no
# flush_on_last_del no
+# queue_without_daemon no
# mode 0666
# uid 0
# gid 0
--- multipath-tools/libmultipath/config.h 2008/09/04 20:09:48 1.18.2.6
+++ multipath-tools/libmultipath/config.h 2008/09/08 22:01:20 1.18.2.7
@@ -75,6 +75,7 @@
int force_reload;
int attribute_flags;
int flush_on_last_del;
+ int queue_without_daemon;
uid_t uid;
gid_t gid;
mode_t mode;
--- multipath-tools/libmultipath/dict.c 2008/09/04 20:09:48 1.17.2.7
+++ multipath-tools/libmultipath/dict.c 2008/09/08 22:01:20 1.17.2.8
@@ -317,6 +317,28 @@
}
static int
+def_queue_without_daemon(vector strvec)
+{
+ char * buff;
+
+ buff = set_value(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) ||
+ !strncmp(buff, "1", 1))
+ conf->queue_without_daemon = QUE_NO_DAEMON_ON;
+ else
+ conf->queue_without_daemon = QUE_NO_DAEMON_UNDEF;
+
+ free(buff);
+ return 0;
+}
+
+static int
def_pg_timeout_handler(vector strvec)
{
int pg_timeout;
@@ -1812,6 +1834,18 @@
}
static int
+snprint_def_queue_without_daemon (char * buff, int len, void * data)
+{
+ switch (conf->queue_without_daemon) {
+ case QUE_NO_DAEMON_OFF:
+ return snprintf(buff, len, "no");
+ case QUE_NO_DAEMON_ON:
+ return snprintf(buff, len, "yes");
+ }
+ return 0;
+}
+
+static int
snprint_def_flush_on_last_del (char * buff, int len, void * data)
{
switch (conf->flush_on_last_del) {
@@ -1906,6 +1940,7 @@
install_keyword("max_fds", &max_fds_handler, &snprint_max_fds);
install_keyword("rr_weight", &def_weight_handler, &snprint_def_rr_weight);
install_keyword("no_path_retry", &def_no_path_retry_handler, &snprint_def_no_path_retry);
+ install_keyword("queue_without_daemon", &def_queue_without_daemon, &snprint_def_queue_without_daemon);
install_keyword("flush_on_last_del", &def_flush_on_last_del_handler, &snprint_def_flush_on_last_del);
install_keyword("pg_timeout", &def_pg_timeout_handler, &snprint_def_pg_timeout);
install_keyword("user_friendly_names", &names_handler, &snprint_def_user_friendly_names);
--- multipath-tools/libmultipath/structs.h 2008/09/04 20:09:48 1.18.2.5
+++ multipath-tools/libmultipath/structs.h 2008/09/08 22:01:20 1.18.2.6
@@ -78,6 +78,12 @@
FLUSH_IN_PROGRESS,
};
+enum queue_without_daemon_states {
+ QUE_NO_DAEMON_UNDEF,
+ QUE_NO_DAEMON_OFF,
+ QUE_NO_DAEMON_ON,
+};
+
struct scsi_idlun {
int dev_id;
int host_unique_id;
--- multipath-tools/libmultipath/waiter.c 2008/08/27 19:14:57 1.1.2.2
+++ multipath-tools/libmultipath/waiter.c 2008/09/08 22:01:20 1.1.2.3
@@ -182,6 +182,8 @@
waiter = (struct event_thread *)et;
pthread_cleanup_push(free_waiter, et);
+ block_signal(SIGUSR1, NULL);
+ block_signal(SIGHUP, NULL);
while (1) {
r = waiteventloop(waiter);
--- multipath-tools/multipathd/main.c 2008/09/04 23:31:39 1.69.2.11
+++ multipath-tools/multipathd/main.c 2008/09/08 22:01:20 1.69.2.12
@@ -1470,6 +1470,8 @@
#ifdef CLONE_NEWNS
unsigned int new_ns = (unsigned long)param & NEW_NS;
#endif
+ struct multipath * mpp;
+ int i;
if (daemon)
setup_daemon();
@@ -1555,6 +1557,9 @@
*/
block_signal(SIGHUP, NULL);
lock(vecs->lock);
+ if (conf->queue_without_daemon == QUE_NO_DAEMON_OFF)
+ vector_foreach_slot(vecs->mpvec, mpp, i)
+ dm_queue_if_no_path(mpp->alias, 0);
remove_maps(vecs, stop_waiter_thread);
free_pathvec(vecs->pathvec, FREE_PATHS);
More information about the dm-devel
mailing list