All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Wilck <mwilck@suse.com>
To: Christophe Varoqui <christophe.varoqui@opensvc.com>
Cc: Martin Wilck <mwilck@suse.com>, dm-devel@redhat.com
Subject: [PATCH v2 00/20] multipath path classification
Date: Mon, 19 Mar 2018 16:01:35 +0100	[thread overview]
Message-ID: <20180319150155.5363-1-mwilck@suse.com> (raw)

Hello Christophe,

(This patch set is based on Ben's late series "multipath: new and rebased
patches" and "multipathd per-device waiter fixes". If preferred, I can of
course submit a series based on plain 0.7.6. There's only one minor conflict).

This patch set implements a new, improved path detection logic based
on the previous discussions in the dm-devel threads "Multipath path 
classification revisited" and "RFC: multipath path classification". I believe
that this is ready for upstream inclusion now. My testing has shown that this
is as close to "it just works" as we may be able to get. Changes wrt the RFC
submission are substantial, I've been trying hard to meet Ben's concerns, and
fixed various bugs that showed up in tests.

The ideas of this patch set are:

 1. Avoid boot failures due to "blocked" devices, in particular setting
   SYSTEMD_READY=0 for path devices while multipathd can't setup maps for
   some reason. To this end, a means to indicate mapping failure
   has been added in patch 9-11. This was not in the RFC series.
 2. Try to be as consistent as possible between udev rule processing
   (multipath -u) and multipathd. Patch 1-4 contain the necessary logic
   fixes. That alone doesn't fully avoid inconsistencies because udev rule
   processing and multipathd processing occur at different points in time.
   Therefore, Logic to retrigger uevents if multipathd detects inconsistencies
   has been added in patch 5 and 6.
 3. Disallow combinations of options that are dangerous or inconsistent, and
    generally simplify configuration. This is done by merging
   "find_multipaths", "multipath -i", and "multipathd -n" into a multi-value
   "find_multipaths" option in patch 7. This was not in the RFC series.
 4. Try to a achieve "it just works" autodetection, I've called it "smart".
    This requires waiting for siblings, which necessarily inflicts a certain
    delay on initial set-up (boot). To meet the criticism raised on the RFC
   series, I've tried to minimize these delays, in particular for the common
   "local SATA root" case. This is implemented in patch 12-17, implementation
   details have changed wrt the RFC series.
 5. Don't break compatibility with default setups of major distros. The
   semantics of "find_multipaths yes" and "find_multipaths no" was preserved
   for backwards compatibility (see commit message of patch 7 for details).

A side effect of this patch set is that the user visible output of "multipath
-u" and "multipath -c" has been changed to udev-friendly KEY="value" format.

Changes wrt RFC series not described above:
 - 03/17 "should_multipath: keep existing maps": don't check for empty
 pathvec; rather check if the mapping actually exists in device-mapper (Ben
 Marzinski)
 - added three minor patches at the end changing log levels (18-20)

Regards,
Martin

Benjamin Marzinski (1):
  libmultipath: trigger change uevent on new device creation

Martin Wilck (19):
  Revert "multipath: ignore -i if find_multipaths is set"
  Revert "multipathd: imply -n if find_multipaths is set"
  libmultipath: should_multipath: keep existing maps
  multipath -u -i: respect entries in WWIDs file
  libmultipath: trigger path uevent only when necessary
  libmultipath: change find_multipaths option to multi-value
  libmultipath: use const char* in open_file()
  libmultipath: functions to indicate mapping failure in /dev/shm
  libmultipath: indicate wwid failure in dm_addmap_create()
  libmultipath: don't try to set up failed wwids again
  multipath -u: common code path for result message
  multipath -u: change output to environment/key format
  multipath -u: add DM_MULTIPATH_DEVICE_PATH=2 for "maybe"
  libmultipath: implement find_multipaths_timeout
  libmultipath: enable find_multipaths "smart"
  multipath.rules: find_multipaths "smart" logic
  multipathd: decrease log level of "spurious uevent" message
  libmultipath: decrease log level of uevent filter/merge messages
  multipathd: decrease log level of waiter thread start/stop msgs

 libmultipath/config.h      |   3 +-
 libmultipath/configure.c   |  73 +++++++++++++++++++++++--
 libmultipath/configure.h   |   4 +-
 libmultipath/defaults.h    |   4 +-
 libmultipath/devmapper.c   |   8 ++-
 libmultipath/dict.c        |  54 ++++++++++++++++++-
 libmultipath/file.c        |   6 +--
 libmultipath/file.h        |   2 +-
 libmultipath/propsel.c     |  25 +++++++++
 libmultipath/propsel.h     |   1 +
 libmultipath/structs.h     |  28 ++++++++++
 libmultipath/uevent.c      |   4 +-
 libmultipath/wwids.c       | 129 ++++++++++++++++++++++++++++++++++++++++++---
 libmultipath/wwids.h       |   7 ++-
 multipath/main.c           |  79 ++++++++++++++++-----------
 multipath/multipath.8      |   9 +++-
 multipath/multipath.conf.5 |  75 +++++++++++++++++++-------
 multipath/multipath.rules  |  84 +++++++++++++++++++++++++++--
 multipathd/cli_handlers.c  |   5 +-
 multipathd/main.c          |  28 ++++------
 multipathd/main.h          |   8 +++
 multipathd/multipathd.8    |   8 +--
 multipathd/waiter.c        |   4 +-
 23 files changed, 544 insertions(+), 104 deletions(-)

-- 
2.16.1

             reply	other threads:[~2018-03-19 15:01 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-19 15:01 Martin Wilck [this message]
2018-03-19 15:01 ` [PATCH v2 01/20] Revert "multipath: ignore -i if find_multipaths is set" Martin Wilck
2018-03-23 17:51   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 02/20] Revert "multipathd: imply -n " Martin Wilck
2018-03-23 17:51   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 03/20] libmultipath: should_multipath: keep existing maps Martin Wilck
2018-03-23 17:51   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 04/20] multipath -u -i: respect entries in WWIDs file Martin Wilck
2018-03-23 17:54   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 05/20] libmultipath: trigger change uevent on new device creation Martin Wilck
2018-03-19 15:01 ` [PATCH v2 06/20] libmultipath: trigger path uevent only when necessary Martin Wilck
2018-03-23 17:58   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 07/20] libmultipath: change find_multipaths option to multi-value Martin Wilck
2018-03-23 20:07   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 08/20] libmultipath: use const char* in open_file() Martin Wilck
2018-03-23 20:08   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 09/20] libmultipath: functions to indicate mapping failure in /dev/shm Martin Wilck
2018-03-19 15:01 ` [PATCH v2 10/20] libmultipath: indicate wwid failure in dm_addmap_create() Martin Wilck
2018-03-26 17:52   ` Benjamin Marzinski
2018-03-26 20:07     ` Martin Wilck
2018-03-19 15:01 ` [PATCH v2 11/20] libmultipath: don't try to set up failed wwids again Martin Wilck
2018-03-26 18:47   ` Benjamin Marzinski
2018-03-26 20:13     ` Martin Wilck
2018-03-19 15:01 ` [PATCH v2 12/20] multipath -u: common code path for result message Martin Wilck
2018-03-26 18:59   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 13/20] multipath -u: change output to environment/key format Martin Wilck
2018-03-26 19:33   ` Benjamin Marzinski
2018-03-26 20:35   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 14/20] multipath -u: add DM_MULTIPATH_DEVICE_PATH=2 for "maybe" Martin Wilck
2018-03-26 20:41   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 15/20] libmultipath: implement find_multipaths_timeout Martin Wilck
2018-03-26 22:16   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 16/20] libmultipath: enable find_multipaths "smart" Martin Wilck
2018-03-26 22:23   ` Benjamin Marzinski
2018-03-19 15:01 ` [PATCH v2 17/20] multipath.rules: find_multipaths "smart" logic Martin Wilck
2018-03-27 21:03   ` Benjamin Marzinski
2018-03-27 21:34     ` Martin Wilck
2018-03-27 23:07       ` Benjamin Marzinski
2018-03-28 14:51         ` Martin Wilck
2018-03-28 17:12           ` Benjamin Marzinski
2018-03-29  6:04           ` Hannes Reinecke
2018-03-29  9:15             ` Martin Wilck
2018-03-19 15:01 ` [PATCH v2 18/20] multipathd: decrease log level of "spurious uevent" message Martin Wilck
2018-03-19 15:01 ` [PATCH v2 19/20] libmultipath: decrease log level of uevent filter/merge messages Martin Wilck
2018-03-19 15:01 ` [PATCH v2 20/20] multipathd: decrease log level of waiter thread start/stop msgs Martin Wilck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180319150155.5363-1-mwilck@suse.com \
    --to=mwilck@suse.com \
    --cc=christophe.varoqui@opensvc.com \
    --cc=dm-devel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.