Wouldn't it be nicer to keep manual as the default and remove all FAILBACK_UNDEF from the hwtable ?
In the current code base, FAILBACK_UNDEF causes need_switch_pathgroup() to refresh each path prio and mpp->bestpg, and return to the caller it should switch pathgroup. But the caller (check_path()) won't switch anyway.
As I read it FAILBACK_UNDEF never fails back automatically, like FAILBACK_MANUAL, but causes unecessary work.
Hannes, Ben, do you confirm I read correctly ? Would you ack to removal of FAILBACK_UNDEF from the hwtable ?
Regards,
Christophe Varoqui
OpenSVC
On Thu, Aug 18, 2016 at 7:58 PM, Xose Vazquez Perez <xose.vazquez@xxxxxxxxx> wrote:
Default value is: manual
30 .pgfailback = FAILBACK_UNDEF,
45 .pgfailback = -FAILBACK_IMMEDIATE,
manual is not used by any device.
I hope it's reasonable. If someone disagrees, drop it.
Cc: Hannes Reinecke <hare@xxxxxxx>
Cc: Benjamin Marzinski <bmarzins@xxxxxxxxxx>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com >
Cc: device-mapper development <dm-devel@xxxxxxxxxx>
Signed-off-by: Xose Vazquez Perez <xose.vazquez@xxxxxxxxx>
---
libmultipath/defaults.h | 2 +-
libmultipath/hwtable.c | 32 +-------------------------------
multipath/multipath.conf.5 | 8 +++++++-
3 files changed, 9 insertions(+), 33 deletions(-)
diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h
index 9bf27d6..a7c74fe 100644
--- a/libmultipath/defaults.h
+++ b/libmultipath/defaults.h
@@ -12,7 +12,7 @@
#define DEFAULT_MINIO 1000
#define DEFAULT_MINIO_RQ 1
#define DEFAULT_PGPOLICY FAILOVER
-#define DEFAULT_FAILBACK -FAILBACK_MANUAL
+#define DEFAULT_FAILBACK FAILBACK_UNDEF
#define DEFAULT_RR_WEIGHT RR_WEIGHT_NONE
#define DEFAULT_NO_PATH_RETRY NO_PATH_RETRY_UNDEF
#define DEFAULT_VERBOSITY 2
diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
index 72b5e1d..c4037d5 100644
--- a/libmultipath/hwtable.c
+++ b/libmultipath/hwtable.c
@@ -37,7 +37,6 @@ static struct hwentry default_hw[] = {
.vendor = "APPLE",
.product = "Xserve RAID",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
/*
* HPE
@@ -58,7 +57,6 @@ static struct hwentry default_hw[] = {
.no_path_retry = NO_PATH_RETRY_QUEUE,
.hwhandler = "1 hp_sw",
.pgpolicy = GROUP_BY_PRIO,
- .pgfailback = FAILBACK_UNDEF,
.checker_name = HP_SW,
.prio_name = PRIO_HP_SW,
},
@@ -67,7 +65,6 @@ static struct hwentry default_hw[] = {
.vendor = "HP",
.product = "A6189A",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = 12,
},
{
@@ -76,7 +73,6 @@ static struct hwentry default_hw[] = {
.product = "(MSA|HSV)1[01]0",
.hwhandler = "1 hp_sw",
.pgpolicy = GROUP_BY_PRIO,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = 12,
.checker_name = HP_SW,
.prio_name = PRIO_HP_SW,
@@ -104,7 +100,6 @@ static struct hwentry default_hw[] = {
.vendor = "HP",
.product = "(MSA2[02]12fc|MSA2012i)",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = 18,
},
{
@@ -140,7 +135,6 @@ static struct hwentry default_hw[] = {
.vendor = "HP",
.product = "LOGICAL VOLUME",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = 12,
},
{
@@ -159,7 +153,6 @@ static struct hwentry default_hw[] = {
.vendor = "DDN",
.product = "SAN DataDirector",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
/*
* EMC
@@ -169,7 +162,6 @@ static struct hwentry default_hw[] = {
.vendor = "EMC",
.product = "SYMMETRIX",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = 6,
},
{
@@ -190,14 +182,12 @@ static struct hwentry default_hw[] = {
.product = "Invista",
.bl_product = "LUNZ",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = 5,
},
{
.vendor = "XtremIO",
.product = "XtremApp",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
/*
* DELL
@@ -212,7 +202,6 @@ static struct hwentry default_hw[] = {
.vendor = "COMPELNT",
.product = "Compellent Vol",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = NO_PATH_RETRY_QUEUE,
},
{
@@ -258,7 +247,6 @@ static struct hwentry default_hw[] = {
.vendor = "FSC",
.product = "CentricStor",
.pgpolicy = GROUP_BY_SERIAL,
- .pgfailback = FAILBACK_UNDEF,
},
{
.vendor = "FUJITSU",
@@ -273,7 +261,6 @@ static struct hwentry default_hw[] = {
.vendor = "(EUROLOGC|EuroLogc)",
.product = "FC2502",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
/*
* Hitachi
@@ -286,7 +273,6 @@ static struct hwentry default_hw[] = {
.vendor = "(HITACHI|HP)",
.product = "^OPEN-",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
/* AMS 2000 and HUS 100 families */
@@ -307,7 +293,6 @@ static struct hwentry default_hw[] = {
.vendor = "IBM",
.product = "ProFibre 4000R",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
/* DS4300 / FAStT600 */
@@ -444,7 +429,6 @@ static struct hwentry default_hw[] = {
.vendor = "IBM",
.product = "^3542",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
/* Enterprise Storage Server / Shark family */
@@ -452,7 +436,6 @@ static struct hwentry default_hw[] = {
.product = "^2105",
.no_path_retry = NO_PATH_RETRY_QUEUE,
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
/* DS6000 */
@@ -469,7 +452,6 @@ static struct hwentry default_hw[] = {
.product = "^2107900",
.no_path_retry = NO_PATH_RETRY_QUEUE,
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
/* Storwize family / SAN Volume Controller / Flex System V7000 */
@@ -487,7 +469,6 @@ static struct hwentry default_hw[] = {
.uid_attribute = "ID_UID",
.no_path_retry = NO_PATH_RETRY_QUEUE,
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
.vendor = "IBM",
@@ -496,7 +477,6 @@ static struct hwentry default_hw[] = {
.uid_attribute = "ID_UID",
.no_path_retry = NO_PATH_RETRY_QUEUE,
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
/* Power RAID */
@@ -523,7 +503,6 @@ static struct hwentry default_hw[] = {
.product = "2810XIV",
.no_path_retry = NO_PATH_RETRY_QUEUE,
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
/*
* IBM Power Virtual SCSI Devices
@@ -535,14 +514,12 @@ static struct hwentry default_hw[] = {
.vendor = "AIX",
.product = "VDASD",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = (300 / DEFAULT_CHECKINT),
},
{
/* 3303 NVDISK */
.vendor = "IBM",
.product = "3303[ ]+NVDISK",
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = (300 / DEFAULT_CHECKINT),
},
{
@@ -602,7 +579,6 @@ static struct hwentry default_hw[] = {
.vendor = "NEXENTA",
.product = "COMSTAR",
.pgpolicy = GROUP_BY_SERIAL,
- .pgfailback = FAILBACK_UNDEF,
.no_path_retry = 30,
},
/*
@@ -612,7 +588,6 @@ static struct hwentry default_hw[] = {
.vendor = "SGI",
.product = "TP9100",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
.vendor = "SGI",
@@ -703,7 +678,6 @@ static struct hwentry default_hw[] = {
.vendor = "SUN",
.product = "(StorEdge 3510|T4)",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
{
.vendor = "SUN",
@@ -766,7 +740,6 @@ static struct hwentry default_hw[] = {
.product = "RAIGE VOLUME",
.no_path_retry = NO_PATH_RETRY_QUEUE,
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
/*
* Intel
@@ -818,7 +791,6 @@ static struct hwentry default_hw[] = {
.vendor = "PURE",
.product = "FlashArray",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
.fast_io_fail = 10,
.dev_loss = 60,
},
@@ -830,7 +802,6 @@ static struct hwentry default_hw[] = {
.vendor = "(HUAWEI|HUASY)",
.product = "XSG1",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
/*
* Red Hat
@@ -852,7 +823,6 @@ static struct hwentry default_hw[] = {
.vendor = "KOVE",
.product = "XPD",
.pgpolicy = MULTIBUS,
- .pgfailback = FAILBACK_UNDEF,
},
#if 0
/*
@@ -882,7 +852,7 @@ static struct hwentry default_hw[] = {
.hwhandler = "0",
.prio_name = "const",
.prio_args = "",
- .pgfailback = -FAILBACK_MANUAL,
+ .pgfailback = FAILBACK_UNDEF,
.rr_weight = RR_WEIGHT_NONE,
.no_path_retry = NO_PATH_RETRY_UNDEF,
.minio = 1000,
diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
index 40df315..466ad94 100644
--- a/multipath/multipath.conf.5
+++ b/multipath/multipath.conf.5
@@ -422,6 +422,8 @@ Default value is: \fBmpath\fR
.TP
.B failback
Tell multipathd how to manage path group failback.
+To select \fIimmediate\fR or a \fIvalue\fR, it's mandatory that the device
+has support for a working prioritizer and a 'preferred path'.
.RS
.TP 12
.I immediate
@@ -440,7 +442,11 @@ another node requested the failover.
.I values > 0
Deferred failback (time to defer in seconds).
.TP
-Default value is: \fBmanual\fR
+.\" XXX
+.I <unset>
+??? Undefined.
+.TP
+Default value is: \fB<unset>\fR
.RE
.
.
--
2.7.4
-- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel