[PATCH 0/8] multipath-tools: max_sectors_kb rework

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch series addresses the issue described in [1].

Changing max_sectors_kb on a live multipath map is dangerous. In particular,
no path device may have a lower value than the map at any time, unless the
device is suspended and all I/O has been flushed. It is also dangerous to
read a max_sectors_kb value from sysfs and write it back, because this may
actually cause the max_sectors value in the kernel (which is in 512 byte block
units, not in kiB) to be rounded down to the next even number.

This patch set avoids both these problematic techniques. max_sectors_kb is
only changed for maps that have the respective configuration parameter set,
and only during map creation or during path addition. In the latter case,
the limit is set on the new path before actually adding it to the map, thus
avoiding a change on a live path. While it is generally recommended to set
max_sectors_kb once and for all before creating a map, the latter technique
can be used to change the value on a live map, by removing and re-adding
a path device.

A side effect of this patch set is that not necessarily all path devices of
a map that has max_sectors_kb set will have this limit configured. In
particular, if max_sectors_kb is enforced by adding a path device, only the
added path and the map itself will have the new max_sectors_kb value, because
multipathd will not attempt to change the value of the other paths, which
can therefore be higher than the configured limit. This is not a problem.
Errors arise only if the limit of the map device is higher than that of
any path device.

This patch set does not attempt to address issues between a multipath device
and block layers stacked on to of it (e.g. LVM or MD raid), as discussed in
the commit message of 8fd4868 ("libmultipath: don't set max_sectors_kb on
reloads"). I think, and my experiments have confirmed it, that for bio-based
stacked devices on top of multipath, max_sectors_kb is not a problem. bios
with a large amount of I/O are split in the kernel to fit into the lower-level
device's limits. Only request-based dm aka multipath is susceptible to errors
caused by max_sectors_kb mismatch. If I am overlooking something here, please
provide an example to prove me wrong.

https://lore.kernel.org/dm-devel/7742003e19b5a49398067dc0c59dfa8ddeffc3d7.camel@xxxxxxxx/

Martin Wilck (8):
  multipath-tools: add TGTDIR option
  libmultipath: move get_udev_for_mpp to sysfs.c
  libmultipath: add mp_find_path_by_devt()
  Revert "libmultipath: fix max_sectors_kb on adding path"
  libmultipath: Only set max_sectors_kb on map creation
  libmultipath: set max_sectors_kb in adopt_paths()
  libmultipath: add wildcard %k for printing max_sectors_kb
  multipath.conf(5): update documentation for max_sectors_kb

 .github/actions/spelling/expect.txt |  2 +
 Makefile.inc                        |  8 ++--
 README.md                           | 33 +++++++++++++++
 libmultipath/configure.c            | 63 +++--------------------------
 libmultipath/print.c                | 38 +++++++++++++++++
 libmultipath/structs.c              | 19 +++++++++
 libmultipath/structs.h              |  3 ++
 libmultipath/structs_vec.c          | 62 +++++++++++++++++++++++++---
 libmultipath/structs_vec.h          |  6 ++-
 libmultipath/sysfs.c                | 19 +++++++++
 libmultipath/sysfs.h                |  4 ++
 multipath/multipath.conf.5.in       | 33 +++++++++++++--
 multipathd/main.c                   |  6 +--
 tests/Makefile                      |  2 +-
 tests/test-lib.c                    |  9 ++++-
 15 files changed, 229 insertions(+), 78 deletions(-)

-- 
2.44.0





[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux