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