Blame SOURCES/0042-libmultipath-move-fast_io_fail-defines-to-structs.h.patch

05be62
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
05be62
From: Benjamin Marzinski <bmarzins@redhat.com>
05be62
Date: Mon, 12 Oct 2020 16:06:11 -0500
05be62
Subject: [PATCH] libmultipath: move fast_io_fail defines to structs.h
05be62
05be62
Since fast_io_fail is part of the multipath struct, its symbolic values
05be62
belong in structs.h. Also, make it an instance of a general enum, which
05be62
will be used again in future patches, and change the set/print functions
05be62
which use it to use the general enum instead.
05be62
05be62
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
05be62
---
05be62
 libmultipath/config.h  |  8 --------
05be62
 libmultipath/dict.c    | 30 +++++++++++++++---------------
05be62
 libmultipath/dict.h    |  2 +-
05be62
 libmultipath/propsel.c |  2 +-
05be62
 libmultipath/structs.h | 17 +++++++++++++++++
05be62
 5 files changed, 34 insertions(+), 25 deletions(-)
05be62
05be62
diff --git a/libmultipath/config.h b/libmultipath/config.h
05be62
index 160867cd..f38c7639 100644
05be62
--- a/libmultipath/config.h
05be62
+++ b/libmultipath/config.h
05be62
@@ -11,14 +11,6 @@
05be62
 #define ORIGIN_CONFIG  1
05be62
 #define ORIGIN_NO_CONFIG 2
05be62
 
05be62
-/*
05be62
- * In kernel, fast_io_fail == 0 means immediate failure on rport delete.
05be62
- * OTOH '0' means not-configured in various places in multipath-tools.
05be62
- */
05be62
-#define MP_FAST_IO_FAIL_UNSET (0)
05be62
-#define MP_FAST_IO_FAIL_OFF (-1)
05be62
-#define MP_FAST_IO_FAIL_ZERO (-2)
05be62
-
05be62
 enum devtypes {
05be62
 	DEV_NONE,
05be62
 	DEV_DEVT,
05be62
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
05be62
index 184d4b22..ce8e1cda 100644
05be62
--- a/libmultipath/dict.c
05be62
+++ b/libmultipath/dict.c
05be62
@@ -834,7 +834,7 @@ declare_mp_attr_handler(gid, set_gid)
05be62
 declare_mp_attr_snprint(gid, print_gid)
05be62
 
05be62
 static int
05be62
-set_fast_io_fail(vector strvec, void *ptr)
05be62
+set_undef_off_zero(vector strvec, void *ptr)
05be62
 {
05be62
 	char * buff;
05be62
 	int *int_ptr = (int *)ptr;
05be62
@@ -844,36 +844,36 @@ set_fast_io_fail(vector strvec, void *ptr)
05be62
 		return 1;
05be62
 
05be62
 	if (strcmp(buff, "off") == 0)
05be62
-		*int_ptr = MP_FAST_IO_FAIL_OFF;
05be62
+		*int_ptr = UOZ_OFF;
05be62
 	else if (sscanf(buff, "%d", int_ptr) != 1 ||
05be62
-		 *int_ptr < MP_FAST_IO_FAIL_ZERO)
05be62
-		*int_ptr = MP_FAST_IO_FAIL_UNSET;
05be62
+		 *int_ptr < UOZ_ZERO)
05be62
+		*int_ptr = UOZ_UNDEF;
05be62
 	else if (*int_ptr == 0)
05be62
-		*int_ptr = MP_FAST_IO_FAIL_ZERO;
05be62
+		*int_ptr = UOZ_ZERO;
05be62
 
05be62
 	FREE(buff);
05be62
 	return 0;
05be62
 }
05be62
 
05be62
 int
05be62
-print_fast_io_fail(char * buff, int len, long v)
05be62
+print_undef_off_zero(char * buff, int len, long v)
05be62
 {
05be62
-	if (v == MP_FAST_IO_FAIL_UNSET)
05be62
+	if (v == UOZ_UNDEF)
05be62
 		return 0;
05be62
-	if (v == MP_FAST_IO_FAIL_OFF)
05be62
+	if (v == UOZ_OFF)
05be62
 		return snprintf(buff, len, "\"off\"");
05be62
-	if (v == MP_FAST_IO_FAIL_ZERO)
05be62
+	if (v == UOZ_ZERO)
05be62
 		return snprintf(buff, len, "0");
05be62
 	return snprintf(buff, len, "%ld", v);
05be62
 }
05be62
 
05be62
-declare_def_handler(fast_io_fail, set_fast_io_fail)
05be62
-declare_def_snprint_defint(fast_io_fail, print_fast_io_fail,
05be62
+declare_def_handler(fast_io_fail, set_undef_off_zero)
05be62
+declare_def_snprint_defint(fast_io_fail, print_undef_off_zero,
05be62
 			   DEFAULT_FAST_IO_FAIL)
05be62
-declare_ovr_handler(fast_io_fail, set_fast_io_fail)
05be62
-declare_ovr_snprint(fast_io_fail, print_fast_io_fail)
05be62
-declare_hw_handler(fast_io_fail, set_fast_io_fail)
05be62
-declare_hw_snprint(fast_io_fail, print_fast_io_fail)
05be62
+declare_ovr_handler(fast_io_fail, set_undef_off_zero)
05be62
+declare_ovr_snprint(fast_io_fail, print_undef_off_zero)
05be62
+declare_hw_handler(fast_io_fail, set_undef_off_zero)
05be62
+declare_hw_snprint(fast_io_fail, print_undef_off_zero)
05be62
 
05be62
 static int
05be62
 set_dev_loss(vector strvec, void *ptr)
05be62
diff --git a/libmultipath/dict.h b/libmultipath/dict.h
05be62
index a40ac66f..a917e1ca 100644
05be62
--- a/libmultipath/dict.h
05be62
+++ b/libmultipath/dict.h
05be62
@@ -13,7 +13,7 @@ int print_rr_weight(char *buff, int len, long v);
05be62
 int print_pgfailback(char *buff, int len, long v);
05be62
 int print_pgpolicy(char *buff, int len, long v);
05be62
 int print_no_path_retry(char *buff, int len, long v);
05be62
-int print_fast_io_fail(char *buff, int len, long v);
05be62
+int print_undef_off_zero(char *buff, int len, long v);
05be62
 int print_dev_loss(char *buff, int len, unsigned long v);
05be62
 int print_reservation_key(char * buff, int len, struct be64 key, uint8_t
05be62
 			  flags, int source);
05be62
diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c
05be62
index d7febec6..725db2b1 100644
05be62
--- a/libmultipath/propsel.c
05be62
+++ b/libmultipath/propsel.c
05be62
@@ -755,7 +755,7 @@ int select_fast_io_fail(struct config *conf, struct multipath *mp)
05be62
 	mp_set_conf(fast_io_fail);
05be62
 	mp_set_default(fast_io_fail, DEFAULT_FAST_IO_FAIL);
05be62
 out:
05be62
-	print_fast_io_fail(buff, 12, mp->fast_io_fail);
05be62
+	print_undef_off_zero(buff, 12, mp->fast_io_fail);
05be62
 	condlog(3, "%s: fast_io_fail_tmo = %s %s", mp->alias, buff, origin);
05be62
 	return 0;
05be62
 }
05be62
diff --git a/libmultipath/structs.h b/libmultipath/structs.h
05be62
index 8e78b8c0..29209984 100644
05be62
--- a/libmultipath/structs.h
05be62
+++ b/libmultipath/structs.h
05be62
@@ -229,6 +229,23 @@ enum vpd_vendor_ids {
05be62
 	VPD_VP_ARRAY_SIZE, /* This must remain the last entry */
05be62
 };
05be62
 
05be62
+/*
05be62
+ * Multipath treats 0 as undefined for optional config parameters.
05be62
+ * Use this for cases where 0 is a valid option for systems multipath
05be62
+ * is communicating with
05be62
+ */
05be62
+enum undefined_off_zero {
05be62
+	UOZ_UNDEF = 0,
05be62
+	UOZ_OFF = -1,
05be62
+	UOZ_ZERO = -2,
05be62
+};
05be62
+
05be62
+enum fast_io_fail_states {
05be62
+	MP_FAST_IO_FAIL_UNSET = UOZ_UNDEF,
05be62
+	MP_FAST_IO_FAIL_OFF = UOZ_OFF,
05be62
+	MP_FAST_IO_FAIL_ZERO = UOZ_ZERO,
05be62
+};
05be62
+
05be62
 struct vpd_vendor_page {
05be62
 	int pg;
05be62
 	const char *name;
05be62
-- 
05be62
2.17.2
05be62