[dm-devel] [PATCH 00/31] multipath/kpartx udev rules cleanup, and fixes
Martin Wilck
mwilck at suse.com
Sat Sep 2 22:38:29 UTC 2017
The main part of this series is a cleanup of the udev rules for
multipath and kpartx. More about that further down.
- patch 01 is an obvious bug fix
- patch 02-08 are fixes for kpartx problems that I encountered
during testing, with related tests. The interesting one here is
04, which adds the ability to rename partition mappings if the
current name doesn't match the specified scheme. The purpose
is to provide consistent naming of partition mappings across
the OS, even in the presence of other tools such as parted
that may follow different conventions.
- 09-15 are changes to the core code I found necessary for the
udev rules cleanup, most importantly a helper to figure out
quickly whether a given multipath has usable paths
(multipath -U). This replaces the former SUSE-specific tests
for DM_DEPS and DM_TABLE_STATE.
- 16ff are the actual changes to the udev rules. This was motivated
by Ben Marzinski who asked Hannes and me a while ago to remove
the SUSE-isms in the rules files (patch 23), and cleanup mainly
kpartx.rules.
More about the udev rules changes:
Multipath maps are special because they can exist without any
usable members/paths, and users expect them to be at least partly
functional in such situations. Care has to be taken to avoid I/O
on maps that may not be able to process it, and not to loose any
symlinks that might be used by systemd to access the partition.
Partitions on multipath maps have similar semantics, with the added
difficulty that no first-hand information about the parent device
is available. A lot of the existing code was trying to fix these
corner case situations, but sometimes incorrectly or not cleanly.
I have pointed out the issues in the individual commit messages.
One important point is that checking DM_NR_VALID_PATHS>0 is not
in sufficient to affirm that I/O will succeed. That was the reason
for writing the "multipath -U" helper.
Also, multipath maps receive frequent udev events that don't
matter to upper layers at all. In such cases, further scanning
should be avoided. This is implemented much more cleanly now,
I hope.
Following the example of the dm core, I split the kpartx rules
up in "early" rules for setting properties and symlinks, and
"late" rules for taking actions such as running kpartx. I believe
that this makes the code better readable.
CAUTION: The new rules files matter for other packages such as dracut.
Distribution package builders have to be careful here. If this patch set
is accepted, respective patches will be send to the dracut maintainers.
Following Ben's suggestions, a new rules file is added that
is responsible for deleting partition device nodes for multipath
member devices.
I didn't expect this series to grow so large, but after having
worked and tested for considerable time, this is the first
version that I find ready for serious review. I smoke-tested the
interaction of rules files, multipathd, udev, systemd, and
kpartx quite a bit with failover and 0-paths scenarios, successfully.
The changes are less drastic than the stats below suggest.
A considerable part just moves functionality out of existing code
into separate functions in order to use it elsewhere.
Regards,
Martin
Martin Wilck (31):
libmultipath: fix partition_delimiter config option
kpartx: helper functions for name and uuid generation
kpartx: search partitions by UUID, and rename
test-kpartx: add tests for renaming functionality
kpartx: fix a corner case when renaming partitions
kpartx: fix part deletion without partition table
test-kpartx: test deletion with empty part table
kpartx: only recognize dasd part table on DASD
libmultipath: support MPATH_UDEV_NO_PATHS_FLAG on map creation
libmultipath: add get_udev_device
libmultipath: get_refwwid: use get_udev_device
libmultipath: use const char* in some dm helpers
libmultipath: add DI_NOIO flag for pathinfo
libmultipath: add dm_get_multipath
multipath: implement "check usable paths" (-C/-U)
11-dm-mpath.rules: multipath -U for READY check
11-dm-mpath.rules: import more ID_FS_xxx vars from db
11-dm-mpath.rules: no need to test before IMPORT
11-dm-mpath.rules: handle new maps with READY==0
11-dm-mpath.rules: don't set READY->ACTIVATION
11-dm-mpath.rules: Remember DM_ACTIVATION
multipath.rules: set ID_FS_TYPE to "mpath_member"
kpartx.rules: don't rely on DM_DEPS and DM_TABLE_STATE
kpartx.rules: respect DM_UDEV_LOW_PRIORITY_FLAG
kpartx.rules: improved logic for by-uuid and by-label links
kpartx.rules: create by-partuuid and by-partlabel symlinks
kpartx.rules: generate type-name links only for multipath devices
kpartx.rules: fix logic for adding partitions
multipath/kpartx rules: avoid superfluous scanning
kpartx/del-part-nodes.rules: new udev file
kpartx.rules: move symlink code to other files
kpartx/Makefile | 2 +
kpartx/dasd.c | 3 +
kpartx/del-part-nodes.rules | 32 ++++++++
kpartx/devmapper.c | 194 ++++++++++++++++++++++++++++++++++++++++++--
kpartx/devmapper.h | 18 +++-
kpartx/dm-parts.rules | 39 +++++++++
kpartx/kpartx.c | 105 +++++++-----------------
kpartx/kpartx.rules | 58 ++++++-------
kpartx/test-kpartx | 50 ++++++++++++
libmultipath/config.h | 1 +
libmultipath/configure.c | 58 ++++++++++---
libmultipath/configure.h | 1 +
libmultipath/devmapper.c | 87 ++++++++++++--------
libmultipath/devmapper.h | 5 +-
libmultipath/discovery.c | 8 ++
libmultipath/discovery.h | 2 +
multipath/11-dm-mpath.rules | 76 +++++++++++++----
multipath/main.c | 90 +++++++++++++++++++-
multipath/multipath.8 | 13 ++-
multipath/multipath.rules | 2 +-
20 files changed, 659 insertions(+), 185 deletions(-)
create mode 100644 kpartx/del-part-nodes.rules
create mode 100644 kpartx/dm-parts.rules
--
2.14.0
More information about the dm-devel
mailing list