diff options
Diffstat (limited to '0001-RH-queue-without-daemon.patch')
-rw-r--r-- | 0001-RH-queue-without-daemon.patch | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/0001-RH-queue-without-daemon.patch b/0001-RH-queue-without-daemon.patch new file mode 100644 index 0000000..1dfe5e0 --- /dev/null +++ b/0001-RH-queue-without-daemon.patch @@ -0,0 +1,168 @@ +From 8191fb07d8212e29ad44370abb60e174e1c34bb5 Mon Sep 17 00:00:00 2001 +From: Fabio M. Di Nitto <fdinitto@redhat.com> +Date: Tue, 13 Oct 2009 08:15:15 +0200 +Subject: [PATCH 01/12] RH: queue without daemon + +Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com> +--- +:100644 100644 50a728c... 86b1320... M libmultipath/config.h +:100644 100644 ee4de68... 7888e8e... M libmultipath/dict.c +:100644 100644 afd1246... 2e7a0d1... M libmultipath/structs.h +:100644 100644 c222da4... 9afa615... M multipath.conf.annotated +:100644 100644 3e0fd6e... 44d1329... M multipath.conf.synthetic +:100644 100644 41a9bd0... 90de6df... M multipathd/main.c + libmultipath/config.h | 1 + + libmultipath/dict.c | 35 +++++++++++++++++++++++++++++++++++ + libmultipath/structs.h | 6 ++++++ + multipath.conf.annotated | 9 +++++++++ + multipath.conf.synthetic | 1 + + multipathd/main.c | 5 +++++ + 6 files changed, 57 insertions(+), 0 deletions(-) + +diff --git a/libmultipath/config.h b/libmultipath/config.h +index 50a728c..86b1320 100644 +--- a/libmultipath/config.h ++++ b/libmultipath/config.h +@@ -72,6 +72,7 @@ struct config { + int pg_timeout; + int max_fds; + int force_reload; ++ int queue_without_daemon; + int daemon; + int flush_on_last_del; + int attribute_flags; +diff --git a/libmultipath/dict.c b/libmultipath/dict.c +index ee4de68..7888e8e 100644 +--- a/libmultipath/dict.c ++++ b/libmultipath/dict.c +@@ -333,6 +333,28 @@ def_no_path_retry_handler(vector strvec) + } + + 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; +@@ -1846,6 +1868,18 @@ snprint_def_no_path_retry (char * buff, int len, void * data) + } + + 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_pg_timeout (char * buff, int len, void * data) + { + if (conf->pg_timeout == DEFAULT_PGTIMEOUT) +@@ -1931,6 +1965,7 @@ init_keywords(void) + 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("pg_timeout", &def_pg_timeout_handler, &snprint_def_pg_timeout); + install_keyword("flush_on_last_del", &def_flush_on_last_del_handler, &snprint_def_flush_on_last_del); + install_keyword("user_friendly_names", &names_handler, &snprint_def_user_friendly_names); +diff --git a/libmultipath/structs.h b/libmultipath/structs.h +index afd1246..2e7a0d1 100644 +--- a/libmultipath/structs.h ++++ b/libmultipath/structs.h +@@ -63,6 +63,12 @@ enum pgstates { + PGSTATE_ACTIVE + }; + ++enum queue_without_daemon_states { ++ QUE_NO_DAEMON_UNDEF, ++ QUE_NO_DAEMON_OFF, ++ QUE_NO_DAEMON_ON, ++}; ++ + enum pgtimeouts { + PGTIMEOUT_UNDEF, + PGTIMEOUT_NONE +diff --git a/multipath.conf.annotated b/multipath.conf.annotated +index c222da4..9afa615 100644 +--- a/multipath.conf.annotated ++++ b/multipath.conf.annotated +@@ -153,6 +153,15 @@ + # no_path_retry queue + # + # # ++# # 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 ++# queue_without_daemon no ++# ++# # + # # name : user_friendly_names + # # scope : multipath + # # desc : If set to "yes", using the bindings file +diff --git a/multipath.conf.synthetic b/multipath.conf.synthetic +index 3e0fd6e..44d1329 100644 +--- a/multipath.conf.synthetic ++++ b/multipath.conf.synthetic +@@ -16,6 +16,7 @@ + # rr_weight priorities + # failback immediate + # no_path_retry fail ++# queue_without_daemon no + # user_friendly_names no + # mode 644 + # uid 0 +diff --git a/multipathd/main.c b/multipathd/main.c +index 41a9bd0..90de6df 100644 +--- a/multipathd/main.c ++++ b/multipathd/main.c +@@ -1334,6 +1334,8 @@ child (void * param) + pthread_t check_thr, uevent_thr, uxlsnr_thr; + pthread_attr_t log_attr, misc_attr; + struct vectors * vecs; ++ struct multipath * mpp; ++ int i; + + mlockall(MCL_CURRENT | MCL_FUTURE); + +@@ -1422,6 +1424,9 @@ child (void * param) + */ + 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_and_stop_waiters(vecs); + free_pathvec(vecs->pathvec, FREE_PATHS); + +-- +1.6.5.1 + |