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 . .
