Hello community,

here is the log from the commit of package multipath-tools for openSUSE:Factory 
checked in at 2017-06-28 10:33:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/multipath-tools (Old)
 and      /work/SRC/openSUSE:Factory/.multipath-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "multipath-tools"

Wed Jun 28 10:33:58 2017 rev:88 rq:505575 version:0.7.1+62+suse.62a2c36e

Changes:
--------
--- /work/SRC/openSUSE:Factory/multipath-tools/multipath-tools.changes  
2017-06-20 10:57:34.263435500 +0200
+++ /work/SRC/openSUSE:Factory/.multipath-tools.new/multipath-tools.changes     
2017-06-28 10:34:00.050777886 +0200
@@ -1,0 +2,28 @@
+Wed Jun 21 20:41:18 UTC 2017 - [email protected]
+
+- Update to version 0.7.1+62+suse.62a2c36e:
+  * kpartx: only check for 'no_partitions' feature on dm devices
+    (bsc#1037533)
+  * Revert "kpartx: use mapname if no uuid is present"
+    (bsc#1037533, bsc#1033541)
+- "no_path_retry" patch series (bsc#1043027)
+  * libmultipath: load_config: skip setting unnecessary defaults
+  * libmultipath: add/remove_feature: use const char* for feature
+  * libmultipath: clarify option conflicts for "features"
+  * libmultipath: merge_hwe: fix queue_if_no_path logic
+  * libmultipath: assemble_map: fix queue_if_no_path logic
+  * multipath.conf.5: document no_path_retry vs. queue_if_no_path
+  * multipath.conf.5: Remove ??? and other minor fixes
+  * libmultipath: add deprecated warning for some features settings
+
+- _service: Use "sles12-sp3" branch as revision, as factory
+  and SLE12-SP3 submissions are in sync. Will be changed when
+  factory forks off (latest at SLE12-SP3 GA).
+
+-------------------------------------------------------------------
+Tue Jun 20 06:57:53 UTC 2017 - [email protected]
+
+- set KBUILD_BUILD_TIMESTAMP to generate reproducible man-pages
+  to fix build-compare (bsc#1045111)
+
+-------------------------------------------------------------------
@@ -4,7 +32,2 @@
-- Update to version 0.7.1+53+suse.07c2f6ac:
-  Merged upstream fixes:
-  * multipath: Merge the DELL MD3xxx device configs
-  * multipath: fix up position independent code
-  * libmultipath: fix partition detection
-  * kpartx: default to running in sync mode
-  * libmultipath: force udev reloads
+- Update to version 0.7.1+53+suse.07c2f6ac
+- kpartx patch series from upstream (bsc#1037533, bsc#1033541)
@@ -23 +46,8 @@
-  * libmultipath: print.c: make sure lines are 0-terminated
+  * Revert "kpartx: relax check when checking for a kpartx device"
+
+- Spec file: use new build flag for libdmmp installation
+  (bsc#1036652), enabled by upstream fix:
+  * libdmmp: enable library installation in alternative directory
+
+- Other bug fixes from upstream:
+  * libmultipath: print.c: make sure lines are 0-terminated (bsc#1038865)
@@ -24,0 +55,11 @@
+  * kpartx: fix device checks
+  * mpath_persist: Don't join threads that don't exist
+  * libmultipath: fix suspended devs from failed reloads
+  * mpathpersist: fix one more crash possiblity
+
+- Minor upstream changes:
+  * multipath: Merge the DELL MD3xxx device configs
+  * multipath: fix up position independent code
+  * libmultipath: fix partition detection (bsc#1037533)
+  * kpartx: default to running in sync mode
+  * libmultipath: force udev reloads
@@ -28,3 +68,0 @@
-  * libmultipath: fix suspended devs from failed reloads
-  * kpartx: fix device checks
-  * mpath_persist: Don't join threads that don't exist
@@ -38,2 +75,0 @@
-  * mpathpersist: fix one more crash possiblity
-  * Revert "kpartx: relax check when checking for a kpartx device"
@@ -41,2 +76,0 @@
-  * libdmmp: enable library installation in alternative directory
-- Spec file: use new build flag for libdmmp installation

Old:
----
  multipath-tools-0.7.1+53+suse.07c2f6ac.tar.xz

New:
----
  multipath-tools-0.7.1+62+suse.62a2c36e.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ multipath-tools.spec ++++++
--- /var/tmp/diff_new_pack.4L6LlQ/_old  2017-06-28 10:34:00.642694144 +0200
+++ /var/tmp/diff_new_pack.4L6LlQ/_new  2017-06-28 10:34:00.646693579 +0200
@@ -89,7 +89,7 @@
 
 Name:           multipath-tools
 Url:            http://christophe.varoqui.free.fr/
-Version:        0.7.1+53+suse.07c2f6ac
+Version:        0.7.1+62+suse.62a2c36e
 Release:        0
 Summary:        Tools to Manage Multipathed Devices with the device-mapper
 License:        GPL-2.0
@@ -176,6 +176,7 @@
 %setup -q -n multipath-tools-%{version}
 
 %build
+[ -n "$SOURCE_DATE_EPOCH" ] && export 
KBUILD_BUILD_TIMESTAMP=@$SOURCE_DATE_EPOCH
 make CC="%__cc" OPTFLAGS="%{optflags}" %{dirflags} %{makeflags}
 
 %install

++++++ _service ++++++
--- /var/tmp/diff_new_pack.4L6LlQ/_old  2017-06-28 10:34:00.686687920 +0200
+++ /var/tmp/diff_new_pack.4L6LlQ/_new  2017-06-28 10:34:00.686687920 +0200
@@ -5,7 +5,7 @@
     <param name="subdir"></param>
     <param name="filename">multipath-tools</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@+suse.%h</param>
-    <param name="revision">factory</param>
+    <param name="revision">sles12-sp3</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.4L6LlQ/_old  2017-06-28 10:34:00.706685091 +0200
+++ /var/tmp/diff_new_pack.4L6LlQ/_new  2017-06-28 10:34:00.710684525 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/openSUSE/multipath-tools.git</param>
-              <param 
name="changesrevision">07c2f6ac8454445babad7927af041c3ad45279e8</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">62a2c36e5565adb1b3637237b3866cfcacf3f31d</param></service></servicedata>
\ No newline at end of file

++++++ multipath-tools-0.7.1+53+suse.07c2f6ac.tar.xz -> 
multipath-tools-0.7.1+62+suse.62a2c36e.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/kpartx/kpartx.c 
new/multipath-tools-0.7.1+62+suse.62a2c36e/kpartx/kpartx.c
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/kpartx/kpartx.c  2017-06-14 
10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/kpartx/kpartx.c  2017-06-21 
22:34:55.000000000 +0200
@@ -402,8 +402,6 @@
                mapname = dm_mapname(major(buf.st_rdev), minor(buf.st_rdev));
                if (mapname) {
                        uuid = dm_mapuuid(mapname);
-                       if (!uuid)
-                               uuid = strdup(mapname);
                        if (!force_devmap && dm_no_partitions(mapname))
                                /* Feature 'no_partitions' is set, return */
                                return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/config.c 
new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/config.c
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/config.c    
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/config.c    
2017-06-21 22:34:55.000000000 +0200
@@ -25,6 +25,7 @@
 #include "prio.h"
 #include "devmapper.h"
 #include "mpath_cmd.h"
+#include "propsel.h"
 
 static int
 hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2)
@@ -318,6 +319,8 @@
 static int
 merge_hwe (struct hwentry * dst, struct hwentry * src)
 {
+       int id_len;
+       char *id;
        merge_str(vendor);
        merge_str(product);
        merge_str(revision);
@@ -353,15 +356,14 @@
        merge_num(san_path_err_forget_rate);
        merge_num(san_path_err_recovery_time);
 
-       /*
-        * Make sure features is consistent with
-        * no_path_retry
-        */
-       if (dst->no_path_retry == NO_PATH_RETRY_FAIL)
-               remove_feature(&dst->features, "queue_if_no_path");
-       else if (dst->no_path_retry != NO_PATH_RETRY_UNDEF)
-               add_feature(&dst->features, "queue_if_no_path");
-
+       id_len = strlen(dst->vendor) + strlen(dst->product) + 2;
+       id = MALLOC(id_len);
+       if (id != NULL)
+               snprintf(id, id_len, "%s/%s", dst->vendor, dst->product);
+       reconcile_features_with_options(id, &dst->features,
+                                       &dst->no_path_retry,
+                                       &dst->retain_hwhandler);
+       FREE(id);
        return 0;
 }
 
@@ -599,40 +601,24 @@
        if (!conf->verbosity)
                conf->verbosity = DEFAULT_VERBOSITY;
 
-       conf->minio = DEFAULT_MINIO;
-       conf->minio_rq = DEFAULT_MINIO_RQ;
        get_sys_max_fds(&conf->max_fds);
        conf->bindings_file = set_default(DEFAULT_BINDINGS_FILE);
        conf->wwids_file = set_default(DEFAULT_WWIDS_FILE);
        conf->multipath_dir = set_default(DEFAULT_MULTIPATHDIR);
-       conf->features = set_default(DEFAULT_FEATURES);
-       conf->flush_on_last_del = DEFAULT_FLUSH;
        conf->attribute_flags = 0;
        conf->reassign_maps = DEFAULT_REASSIGN_MAPS;
        conf->checkint = DEFAULT_CHECKINT;
        conf->max_checkint = 0;
-       conf->pgfailback = DEFAULT_FAILBACK;
-       conf->fast_io_fail = DEFAULT_FAST_IO_FAIL;
-       conf->retain_hwhandler = DEFAULT_RETAIN_HWHANDLER;
-       conf->detect_prio = DEFAULT_DETECT_PRIO;
-       conf->detect_checker = DEFAULT_DETECT_CHECKER;
        conf->force_sync = DEFAULT_FORCE_SYNC;
        conf->partition_delim = DEFAULT_PARTITION_DELIM;
        conf->processed_main_config = 0;
        conf->find_multipaths = DEFAULT_FIND_MULTIPATHS;
        conf->uxsock_timeout = DEFAULT_REPLY_TIMEOUT;
-       conf->uid_attribute = set_default(DEFAULT_UID_ATTRIBUTE);
        conf->retrigger_tries = DEFAULT_RETRIGGER_TRIES;
        conf->retrigger_delay = DEFAULT_RETRIGGER_DELAY;
        conf->uev_wait_timeout = DEFAULT_UEV_WAIT_TIMEOUT;
-       conf->deferred_remove = DEFAULT_DEFERRED_REMOVE;
-       conf->skip_kpartx = DEFAULT_SKIP_KPARTX;
        conf->disable_changed_wwids = DEFAULT_DISABLE_CHANGED_WWIDS;
        conf->remove_retries = 0;
-       conf->max_sectors_kb = DEFAULT_MAX_SECTORS_KB;
-       conf->san_path_err_threshold = DEFAULT_ERR_CHECKS;
-       conf->san_path_err_forget_rate = DEFAULT_ERR_CHECKS;
-       conf->san_path_err_recovery_time = DEFAULT_ERR_CHECKS;
 
        /*
         * preload default hwtable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/configure.c 
new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/configure.c
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/configure.c 
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/configure.c 
2017-06-21 22:34:55.000000000 +0200
@@ -280,18 +280,18 @@
        select_pgfailback(conf, mpp);
        select_pgpolicy(conf, mpp);
        select_selector(conf, mpp);
-       select_features(conf, mpp);
        select_hwhandler(conf, mpp);
+       select_no_path_retry(conf, mpp);
+       select_retain_hwhandler(conf, mpp);
+       select_features(conf, mpp);
        select_rr_weight(conf, mpp);
        select_minio(conf, mpp);
-       select_no_path_retry(conf, mpp);
        select_mode(conf, mpp);
        select_uid(conf, mpp);
        select_gid(conf, mpp);
        select_fast_io_fail(conf, mpp);
        select_dev_loss(conf, mpp);
        select_reservation_key(conf, mpp);
-       select_retain_hwhandler(conf, mpp);
        select_deferred_remove(conf, mpp);
        select_delay_watch_checks(conf, mpp);
        select_delay_wait_checks(conf, mpp);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/dict.c 
new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/dict.c
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/dict.c      
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/dict.c      
2017-06-21 22:34:55.000000000 +0200
@@ -630,7 +630,7 @@
 }
 
 declare_def_handler(fast_io_fail, set_fast_io_fail)
-declare_def_snprint(fast_io_fail, print_fast_io_fail)
+declare_def_snprint_defint(fast_io_fail, print_fast_io_fail, 
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)
@@ -1082,7 +1082,8 @@
 declare_mp_handler(delay_wait_checks, set_off_int_undef)
 declare_mp_snprint(delay_wait_checks, print_off_int_undef)
 declare_def_handler(san_path_err_threshold, set_off_int_undef)
-declare_def_snprint(san_path_err_threshold, print_off_int_undef)
+declare_def_snprint_defint(san_path_err_threshold, print_off_int_undef,
+                          DEFAULT_ERR_CHECKS)
 declare_ovr_handler(san_path_err_threshold, set_off_int_undef)
 declare_ovr_snprint(san_path_err_threshold, print_off_int_undef)
 declare_hw_handler(san_path_err_threshold, set_off_int_undef)
@@ -1090,7 +1091,8 @@
 declare_mp_handler(san_path_err_threshold, set_off_int_undef)
 declare_mp_snprint(san_path_err_threshold, print_off_int_undef)
 declare_def_handler(san_path_err_forget_rate, set_off_int_undef)
-declare_def_snprint(san_path_err_forget_rate, print_off_int_undef)
+declare_def_snprint_defint(san_path_err_forget_rate, print_off_int_undef,
+                          DEFAULT_ERR_CHECKS)
 declare_ovr_handler(san_path_err_forget_rate, set_off_int_undef)
 declare_ovr_snprint(san_path_err_forget_rate, print_off_int_undef)
 declare_hw_handler(san_path_err_forget_rate, set_off_int_undef)
@@ -1098,7 +1100,8 @@
 declare_mp_handler(san_path_err_forget_rate, set_off_int_undef)
 declare_mp_snprint(san_path_err_forget_rate, print_off_int_undef)
 declare_def_handler(san_path_err_recovery_time, set_off_int_undef)
-declare_def_snprint(san_path_err_recovery_time, print_off_int_undef)
+declare_def_snprint_defint(san_path_err_recovery_time, print_off_int_undef,
+                          DEFAULT_ERR_CHECKS)
 declare_ovr_handler(san_path_err_recovery_time, set_off_int_undef)
 declare_ovr_snprint(san_path_err_recovery_time, print_off_int_undef)
 declare_hw_handler(san_path_err_recovery_time, set_off_int_undef)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/dmparser.c 
new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/dmparser.c
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/dmparser.c  
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/dmparser.c  
2017-06-21 22:34:55.000000000 +0200
@@ -74,13 +74,12 @@
         * We have to set 'queue_if_no_path' here even
         * to avoid path failures during map reload.
         */
-       if (mp->no_path_retry == NO_PATH_RETRY_UNDEF ||
-           mp->no_path_retry == NO_PATH_RETRY_FAIL) {
+       if (mp->no_path_retry == NO_PATH_RETRY_FAIL) {
                /* remove queue_if_no_path settings */
                condlog(3, "%s: remove queue_if_no_path from '%s'",
                        mp->alias, mp->features);
                remove_feature(&f, no_path_retry);
-       } else {
+       } else if (mp->no_path_retry != NO_PATH_RETRY_UNDEF) {
                add_feature(&f, no_path_retry);
        }
        if (mp->retain_hwhandler == RETAIN_HWHANDLER_ON)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/propsel.c 
new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/propsel.c
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/propsel.c   
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/propsel.c   
2017-06-21 22:34:55.000000000 +0200
@@ -269,6 +269,60 @@
        return mp->alias ? 0 : 1;
 }
 
+void reconcile_features_with_options(const char *id, char **features, int* 
no_path_retry,
+                 int *retain_hwhandler)
+{
+       static const char q_i_n_p[] = "queue_if_no_path";
+       static const char r_a_h_h[] = "retain_attached_hw_handler";
+       char buff[12];
+
+       if (*features == NULL)
+               return;
+       if (id == NULL)
+               id = "UNKNOWN";
+
+       /*
+        * We only use no_path_retry internally. The "queue_if_no_path"
+        * device-mapper feature is derived from it when the map is loaded.
+        * For consistency, "queue_if_no_path" is removed from the
+        * internal libmultipath features string.
+        * For backward compatibility we allow 'features "1 queue_if_no_path"';
+        * it's translated into "no_path_retry queue" here.
+        */
+       if (strstr(*features, q_i_n_p)) {
+               condlog(0, "%s: option 'features \"1 %s\"' is deprecated, "
+                       "please use 'no_path_retry queue' instead",
+                       id, q_i_n_p);
+               if (*no_path_retry == NO_PATH_RETRY_UNDEF) {
+                       *no_path_retry = NO_PATH_RETRY_QUEUE;
+                       print_no_path_retry(buff, sizeof(buff),
+                                           no_path_retry);
+                       condlog(3, "%s: no_path_retry = %s (inherited setting 
from feature '%s')",
+                               id, buff, q_i_n_p);
+               };
+               /* Warn only if features string is overridden */
+               if (*no_path_retry != NO_PATH_RETRY_QUEUE) {
+                       print_no_path_retry(buff, sizeof(buff),
+                                           no_path_retry);
+                       condlog(2, "%s: ignoring feature '%s' because 
no_path_retry is set to '%s'",
+                               id, q_i_n_p, buff);
+               }
+               remove_feature(features, q_i_n_p);
+       }
+       if (strstr(*features, r_a_h_h)) {
+               condlog(0, "%s: option 'features \"1 %s\"' is deprecated",
+                       id, r_a_h_h);
+               if (*retain_hwhandler == RETAIN_HWHANDLER_UNDEF) {
+                       condlog(3, "%s: %s = on (inherited setting from feature 
'%s')",
+                               id, r_a_h_h, r_a_h_h);
+                       *retain_hwhandler = RETAIN_HWHANDLER_ON;
+               } else if (*retain_hwhandler == RETAIN_HWHANDLER_OFF)
+                       condlog(2, "%s: ignoring feature '%s' because %s is set 
to 'off'",
+                               id, r_a_h_h, r_a_h_h);
+               remove_feature(features, r_a_h_h);
+       }
+}
+
 int select_features(struct config *conf, struct multipath *mp)
 {
        char *origin;
@@ -280,19 +334,11 @@
        mp_set_default(features, DEFAULT_FEATURES);
 out:
        mp->features = STRDUP(mp->features);
-       condlog(3, "%s: features = \"%s\" %s", mp->alias, mp->features, origin);
 
-       if (strstr(mp->features, "queue_if_no_path")) {
-               if (mp->no_path_retry == NO_PATH_RETRY_UNDEF)
-                       mp->no_path_retry = NO_PATH_RETRY_QUEUE;
-               else if (mp->no_path_retry == NO_PATH_RETRY_FAIL) {
-                       condlog(1, "%s: config error, overriding 
'no_path_retry' value",
-                               mp->alias);
-                       mp->no_path_retry = NO_PATH_RETRY_QUEUE;
-               } else if (mp->no_path_retry != NO_PATH_RETRY_QUEUE)
-                       condlog(1, "%s: config error, ignoring 
'queue_if_no_path' because no_path_retry=%d",
-                               mp->alias, mp->no_path_retry);
-       }
+       reconcile_features_with_options(mp->alias, &mp->features,
+                                       &mp->no_path_retry,
+                                       &mp->retain_hwhandler);
+       condlog(3, "%s: features = \"%s\" %s", mp->alias, mp->features, origin);
        return 0;
 }
 
@@ -469,9 +515,6 @@
        if (origin)
                condlog(3, "%s: no_path_retry = %s %s", mp->alias, buff,
                        origin);
-       else if (mp->no_path_retry != NO_PATH_RETRY_UNDEF)
-               condlog(3, "%s: no_path_retry = %s (inherited setting)",
-                       mp->alias, buff);
        else
                condlog(3, "%s: no_path_retry = undef (setting: multipath 
internal)",
                        mp->alias);
@@ -752,6 +795,12 @@
        mp_set_ovr(max_sectors_kb);
        mp_set_hwe(max_sectors_kb);
        mp_set_conf(max_sectors_kb);
+       mp_set_default(max_sectors_kb, DEFAULT_MAX_SECTORS_KB);
+       /*
+        * In the default case, we will not modify max_sectors_kb in sysfs
+        * (see sysfs_set_max_sectors_kb()).
+        * Don't print a log message here to avoid user confusion.
+        */
        return 0;
 out:
        condlog(3, "%s: max_sectors_kb = %i %s", mp->alias, mp->max_sectors_kb,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/propsel.h 
new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/propsel.h
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/propsel.h   
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/propsel.h   
2017-06-21 22:34:55.000000000 +0200
@@ -28,3 +28,6 @@
 int select_san_path_err_forget_rate(struct config *conf, struct multipath *mp);
 int select_san_path_err_threshold(struct config *conf, struct multipath *mp);
 int select_san_path_err_recovery_time(struct config *conf, struct multipath 
*mp);
+void reconcile_features_with_options(const char *id, char **features,
+                                    int* no_path_retry,
+                                    int *retain_hwhandler);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/structs.c 
new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/structs.c
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/structs.c   
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/structs.c   
2017-06-21 22:34:55.000000000 +0200
@@ -513,10 +513,11 @@
        }
 }
 
-int add_feature(char **f, char *n)
+int add_feature(char **f, const char *n)
 {
        int c = 0, d, l = 0;
        char *e, *p, *t;
+       const char *q;
 
        if (!f)
                return 1;
@@ -554,14 +555,14 @@
        if ((c % 10) == 9)
                l++;
        c++;
-       p = n;
-       while (*p != '\0') {
-               if (*p == ' ' && p[1] != '\0' && p[1] != ' ') {
+       q = n;
+       while (*q != '\0') {
+               if (*q == ' ' && q[1] != '\0' && q[1] != ' ') {
                        if ((c % 10) == 9)
                                l++;
                        c++;
                }
-               p++;
+               q++;
        }
 
        t = MALLOC(l + 1);
@@ -601,10 +602,11 @@
        return 0;
 }
 
-int remove_feature(char **f, char *o)
+int remove_feature(char **f, const char *o)
 {
        int c = 0, d, l;
        char *e, *p, *n;
+       const char *q;
 
        if (!f || !*f)
                return 1;
@@ -630,18 +632,18 @@
        /* Just spaces, return */
        if (*o == '\0')
                return 0;
-       e = o + strlen(o);
-       while (*e == ' ')
-               e--;
-       d = (int)(e - o);
+       q = o + strlen(o);
+       while (*q == ' ')
+               q--;
+       d = (int)(q - o);
 
        /* Update feature count */
        c--;
-       p = o;
-       while (p[0] != '\0') {
-               if (p[0] == ' ' && p[1] != ' ' && p[1] != '\0')
+       q = o;
+       while (q[0] != '\0') {
+               if (q[0] == ' ' && q[1] != ' ' && q[1] != '\0')
                        c--;
-               p++;
+               q++;
        }
 
        /* Quick exit if all features have been removed */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/structs.h 
new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/structs.h
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/libmultipath/structs.h   
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/libmultipath/structs.h   
2017-06-21 22:34:55.000000000 +0200
@@ -369,8 +369,8 @@
 int pathcount (struct multipath *, int);
 int pathcmp (struct pathgroup *, struct pathgroup *);
 void setup_feature(struct multipath *, char *);
-int add_feature (char **, char *);
-int remove_feature (char **, char *);
+int add_feature (char **, const char *);
+int remove_feature (char **, const char *);
 
 extern char sysfs_path[PATH_SIZE];
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/multipath-tools-0.7.1+53+suse.07c2f6ac/multipath/multipath.conf.5 
new/multipath-tools-0.7.1+62+suse.62a2c36e/multipath/multipath.conf.5
--- old/multipath-tools-0.7.1+53+suse.07c2f6ac/multipath/multipath.conf.5       
2017-06-14 10:52:13.000000000 +0200
+++ new/multipath-tools-0.7.1+62+suse.62a2c36e/multipath/multipath.conf.5       
2017-06-21 22:34:55.000000000 +0200
@@ -258,7 +258,7 @@
 .I sysfs
 Use the sysfs attributes \fIaccess_state\fR and \fIpreferred_path\fR to
 generate the path priority. This prioritizer accepts the optional prio_arg
-\fIexclusive_pref_bit\fR
+\fIexclusive_pref_bit\fR.
 .TP
 .I emc
 (Hardware-dependent)
@@ -296,14 +296,19 @@
 priority provided as argument. Requires prio_args keyword.
 .TP
 .I datacore
-.\" XXX
-???. Requires prio_args keyword.
+(Hardware-dependent)
+Generate the path priority for some Datacore storage arrays. Requires prio_args
+keyword.
 .TP
 .I iet
-.\" XXX
-???. Requires prio_args keyword.
-.TP
-The default is: \fBconst\fR
+(iSCSI only)
+Generate path priority for iSCSI targets based on IP address. Requires
+prio_args keyword.
+.PP
+The default depends on the \fBdetect_prio\fR setting: If \fBdetect_prio\fR is
+\fByes\fR (default), the default priority algorithm is \fBsysfs\fR (except for
+NetAPP E-Series, where it is \fBalua\fR). If \fBdetect_prio\fR is
+\fBno\fR, the default priority algorithm is \fBconst\fR.
 .RE
 .
 .
@@ -344,12 +349,12 @@
 set will always be in their own path group.
 .TP
 .I datacore
-.\" XXX
-\fIpreferredsds\fR ???.
+\fIpreferredsds\fR (required) denotes the preferred "SDS name" for datacore
+arrays. \fItimeout\fR (optional) is the timeout for the INQUIRY, in ms.
 .TP
 .I iet
-.\" XXX
-\fIpreferredip\fR ???.
+\fIpreferredip=...\fR (required) denotes the preferred IP address (in dotted 
decimal
+notation) for iSCSI targets.
 .TP
 The default is: \fB<unset>\fR
 .RE
@@ -364,27 +369,28 @@
 .TP 12
 .\" XXX
 .I queue_if_no_path
-(Superseded by \fIno_path_retry\fR) (Since ??? kernel) Queue I/O if no path is 
active.
-Identical to the \fIno_path_retry\fR with \fIqueue\fR value. See KNOWN ISSUES.
-.TP
-.I no_partitions
-Disable automatic partitions generation via kpartx.
+(Deprecated, superseded by \fIno_path_retry\fR) Queue I/O if no path is active.
+Identical to the \fIno_path_retry\fR with \fIqueue\fR value. If both this
+feature and \fIno_path_retry\fR are set, the latter value takes
+precedence. See KNOWN ISSUES.
 .TP
 .\" XXX
 .I pg_init_retries <times>
-(Since ??? kernel) Number of times to retry pg_init, it must be between 1 and 
50.
+(Since kernel 2.6.24) Number of times to retry pg_init, it must be between 1 
and 50.
 .TP
 .\" XXX
 .I pg_init_delay_msecs <msecs>
-(Since ??? kernel) Number of msecs before pg_init retry, it must be between 0 
and 60000.
+(Since kernel 2.6.38) Number of msecs before pg_init retry, it must be between 
0 and 60000.
 .TP
 .\" XXX
 .I queue_mode <mode>
-(Since ??? kernel) Select the the queue_mode per multipath device.
-Where <mode> can be \fIbio\fR, \fIrq\fR or \fImq\fR. Which corresponds to
-bio-based, request_fn rq-based, and blk-mq rq-based respectively.
-.TP
-The default is: \fB0\fR
+(Since kernel 4.8) Select the the queueing mode per multipath device.
+<mode> can be \fIbio\fR, \fIrq\fR or \fImq\f, which corresponds to
+bio-based, request-based, and block-multiqueue (blk-mq) request-based,
+respectively.
+
+The default depends on the kernel parameter \fBdm_mod.use_blk_mq\fR. It is
+\fImq\fR if the latter is set, and \fIrq\fR otherwise.
 .RE
 .
 .


Reply via email to