[dm-devel] [PATCH 00/33] multipath-tools fixes from SUSE

Martin Wilck mwilck at suse.com
Tue Feb 28 16:22:56 UTC 2017


As announced previously, here comes a collection of multipath-tools patches
that SUSE is using for SLES12 SP2.

The whole series can be roughly broken down into the following logical
parts. Details can be found in the indvidual patches.

A) Modified boot sequence (01, 02, 04):

Under SLES12, the systemd service startup sequence has been changed such that
multipathd is now started after "udev settle" has finished. This has solved a
variety of sporadic, hard-to-track boot-time problems for us. The bottom line is
that until "udev settle" finishes, the udev db is incomplete when multipathd
tries to derive device information from it. That may cause multipathd to infer
incorrectly that a certain map is degraded, causing all kinds of problems.

B) Changed command line option semantices with find_multipaths (16, 17):

SUSE uses "multipath -i" in udev rules during device detection, as discussed
by Hannes on this list previously. This doesn't work well with the
"find_multipaths" option. We worked around this by relying on WWID for the
"find_multipaths" case, as other distributions do.

C) Avoid unnecessary domap() calls in configure() (18-28):

This patch series fixes another group of boot-time problems we encountered
in reboot tests. In many cases, multipathd has already set up valid maps
during initrd processing. When multipathd is restarted after switching to the
root FS, more often than not, no configuration changes are necessary. Yet
domap() is called for every map again. This call may race with other boot-time
operations such as LVM pvscan or mount commands and cause sporadic boot failures.

The idea of this series of patches is to detect this situation and avoid calling
making device mapper calls if the multipath internal representation of the map
already matches the kernel state. The logic of this series works only if the
udev db is in a sane state after switching root, thus it's closely related to
A).

Side note: This modified logic was also the background of my earlier remarks
about the possible processing of uevent batches using configure(). Based on
this series, further changes for configure could be written that would make
this possible.

D) Misc bug fixes (all except those mentioned so far).

For those who prefer github, the whole series is also available on
https://github.com/mwilck/multipath-tools/commits/upstream_170228

Best Regards,
Martin

Hannes Reinecke (15):
  multipathd.service: fixup Wants= and Before= statements
  multipathd: start daemon after udev trigger
  multipath: do not check daemon from udev rules
  Invalid error code when using multipathd CLI
  multipathd: set timeout for CLI commands correctly
  libmultipath: fall back to search paths by devt
  libmultipath: Do not crash on empty features
  multipathd: Set CLI timeout correctly
  multipath: avoid crash when using modified configuration
  multipathd: issue systemd READY after initial configuration
  libmultipath/discovery: do not cache 'access_state' sysfs attribute
  libmultipath: use existing alias from bindings file
  kpartx: sanitize delete partitions
  tur: Add pthread_testcancel()
  multipathd: fixup check for new path states

Martin Wilck (18):
  Add support for "multipath=off" and "nompath" on kernel cmdline
  multipath -ll: set DI_SERIAL
  libmultipath: move suspend logic to _dm_flush_map
  multipath: ignore -i if find_multipaths is set
  multipathd: imply -n if find_multipaths is set
  multipathd: use weaker "force_reload" at startup
  libmultipath: setup_features: log msg if queue_if_no_path is ignored
  libmultipath: setup_feature: print log msg if no_path_retry cant be
    set
  libmultipath: setup_feature: handle "retain_attached_hw_handler"
  libmultipath: disassemble_map: skip no_path_retry check
  libmultipath: disassemble_map: treat minio like assemble_map does
  libmultipath: select_action: check special features separately
  libmultipath: sysfs_attr_set_value: use const char*
  libmultipath: reload map if not known to udev
  libmultipath: differentiate ACT_NOTHING and ACT_IMPOSSIBLE
  libmultipath: coalesce_paths: trigger uevent if nothing done
  libmultipath/checkers: make RADOS checker optional
  Make libdmmp build optional

 Makefile                       |   6 +-
 Makefile.inc                   |   6 ++
 kpartx/devmapper.c             | 229 +++++++++++++++++++++++++++++++++++++++--
 kpartx/devmapper.h             |   7 +-
 kpartx/kpartx.c                |  44 ++------
 libmpathcmd/mpath_cmd.c        |   4 +
 libmpathcmd/mpath_cmd.h        |   2 +-
 libmultipath/alias.c           |   8 ++
 libmultipath/checkers/Makefile |   6 +-
 libmultipath/checkers/tur.c    |   1 +
 libmultipath/config.h          |   6 ++
 libmultipath/configure.c       | 117 +++++++++++++++++++--
 libmultipath/configure.h       |   1 +
 libmultipath/devmapper.c       | 102 ++++++++----------
 libmultipath/devmapper.h       |   9 +-
 libmultipath/discovery.c       |  19 ++--
 libmultipath/dmparser.c        |  26 +++--
 libmultipath/print.c           |   2 +-
 libmultipath/propsel.c         |   4 +-
 libmultipath/structs.c         |  39 ++++---
 libmultipath/sysfs.c           |   2 +-
 libmultipath/sysfs.h           |   2 +-
 libmultipath/util.c            |  59 +++++++++++
 libmultipath/util.h            |   1 +
 libmultipath/uxsock.c          |   9 +-
 multipath/main.c               |  37 ++++---
 multipath/multipath.rules      |   5 +
 multipathd/cli_handlers.c      |   3 +-
 multipathd/main.c              |  31 ++++--
 multipathd/multipathd.service  |  10 +-
 30 files changed, 603 insertions(+), 194 deletions(-)

-- 
2.11.0




More information about the dm-devel mailing list