[dm-devel] multipath-tools libmultipath/config.h libmulti ...

bmarzins at sourceware.org bmarzins at sourceware.org
Wed Sep 8 21:40:30 UTC 2010


CVSROOT:	/cvs/dm
Module name:	multipath-tools
Branch: 	RHEL5_FC6
Changes by:	bmarzins at sourceware.org	2010-09-08 21:40:30

Modified files:
	libmultipath   : config.h dict.c structs.h 
	multipathd     : main.c 

Log message:
	fix for bz #574813.  There is a new default multipath configuration option,
	"log_checker_err", setting this to "once" will cause multipathd to only log the
	first path failure message at verbosity 2.  Further path failure messages are
	logged at verbosity 3.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/config.h.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.18.2.12&r2=1.18.2.13
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/dict.c.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.17.2.14&r2=1.17.2.15
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/libmultipath/structs.h.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.18.2.7&r2=1.18.2.8
http://sourceware.org/cgi-bin/cvsweb.cgi/multipath-tools/multipathd/main.c.diff?cvsroot=dm&only_with_tag=RHEL5_FC6&r1=1.69.2.29&r2=1.69.2.30

--- multipath-tools/libmultipath/config.h	2010/09/03 20:59:14	1.18.2.12
+++ multipath-tools/libmultipath/config.h	2010/09/08 21:40:29	1.18.2.13
@@ -80,6 +80,7 @@
 	int checker_timeout;
 	int allow_queueing;
 	int pg_prio_calc;
+	int log_checker_err;
 	uid_t uid;
 	gid_t gid;
 	mode_t mode;
--- multipath-tools/libmultipath/dict.c	2010/09/03 20:59:14	1.17.2.14
+++ multipath-tools/libmultipath/dict.c	2010/09/08 21:40:30	1.17.2.15
@@ -435,7 +435,24 @@
 	return 0;
 }
 	
+static int
+def_log_checker_err_handler(vector strvec)
+{
+	char * buff;
+
+	buff = set_value(strvec);
+
+	if (!buff)
+		return 1;
 
+	if (strlen(buff) == 4 && !strcmp(buff, "once"))
+		conf->log_checker_err = LOG_CHKR_ERR_ONCE;
+	else if (strlen(buff) == 6 && !strcmp(buff, "always"))
+		conf->log_checker_err = LOG_CHKR_ERR_ALWAYS;
+
+	free(buff);
+	return 0;
+}
 static int
 bindings_file_handler(vector strvec)
 {
@@ -2004,6 +2021,14 @@
 }
 
 static int
+snprint_def_log_checker_err (char *buff, int len, void *data)
+{
+	if (conf->log_checker_err == LOG_CHKR_ERR_ONCE)
+		return snprintf(buff, len, "once");
+	return snprintf(buff, len, "always");
+}
+
+static int
 snprint_def_bindings_file (char * buff, int len, void * data)
 {
 	if (conf->bindings_file == NULL)
@@ -2066,6 +2091,7 @@
 	install_keyword("pg_timeout", &def_pg_timeout_handler, &snprint_def_pg_timeout);
 	install_keyword("user_friendly_names", &names_handler, &snprint_def_user_friendly_names);
 	install_keyword("pg_prio_calc", &def_pg_prio_calc_handler, &snprint_def_pg_prio_calc);
+	install_keyword("log_checker_err", &def_log_checker_err_handler, &snprint_def_log_checker_err);
 	install_keyword("bindings_file", &bindings_file_handler, &snprint_def_bindings_file);
 	install_keyword("mode", &def_mode_handler, &snprint_def_mode);
 	install_keyword("uid", &def_uid_handler, &snprint_def_uid);
--- multipath-tools/libmultipath/structs.h	2010/09/03 20:59:14	1.18.2.7
+++ multipath-tools/libmultipath/structs.h	2010/09/08 21:40:30	1.18.2.8
@@ -89,6 +89,11 @@
 	PG_PRIO_CALC_AVG,
 };
 
+enum log_checker_err_states {
+	LOG_CHKR_ERR_ALWAYS,
+	LOG_CHKR_ERR_ONCE,
+};
+
 struct scsi_idlun {
 	int dev_id;
 	int host_unique_id;
--- multipath-tools/multipathd/main.c	2010/09/01 18:29:18	1.69.2.29
+++ multipath-tools/multipathd/main.c	2010/09/08 21:40:30	1.69.2.30
@@ -74,7 +74,10 @@
 #define CALLOUT_DIR "/var/cache/multipathd"
 
 #define LOG_MSG(a,b) \
-	if (strlen(b)) condlog(a, "%s: %s", pp->dev, b);
+do { \
+	if (strlen(b)) \
+		condlog(a, "%s: %s", pp->dev, b); \
+} while(0)
 
 pthread_cond_t exit_cond = PTHREAD_COND_INITIALIZER;
 pthread_mutex_t exit_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -1111,8 +1114,12 @@
 				condlog(4, "%s: delay next check %is",
 						pp->dev_t, pp->tick);
 			}
-			else if (newstate == PATH_DOWN)
-				LOG_MSG(2, checker_message(&pp->checker));
+			else if (newstate == PATH_DOWN) {
+				if (conf->log_checker_err == LOG_CHKR_ERR_ONCE)
+					LOG_MSG(3, checker_message(&pp->checker));
+				else
+					LOG_MSG(2, checker_message(&pp->checker));
+			}
 
 			pp->state = newstate;
 




More information about the dm-devel mailing list