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