This patchset handles 4 separate issues:
1. The self-preemption workaround for changing keys using REGISTER AND
IGNORE, while the path holding the reservation was down was broken
by a recent commit.
2. mpathpersist was failing a RESERVE command issued on a multipath
device that held a reservation, when the holding path was down.
Issuing an identical reserve on a device that holds a reservation
is supposed to succeed, and multipathd has enough information to
know the device is actually holding the reservation. So if
multipathd says that the device is holding the reservation, it
should not fail, even if the path holding the reservation is down.
3. mpathpersist was not clearing the reservation when the key holding
it was unregistered, if the path holding the reservation was down.
4. When unregistering a key that holds a reservation, depending on the
order that the paths got unregistered, there was a window where
IO going to the device could fail. This should not happen because
the reservation should be removed and the key should be unregistered
atomically.
Changes in V2:
0004: reworked how the unregister infromation is passed to an from
mpath_prout_rel() to make it less confusing, at Martin's
suggestion.
Feel free to reformat my patches. I forgot to do that first. Sorry.
Benjamin Marzinski (4):
libmpathpersist: Fix REGISTER AND IGNORE while holding a reservation
libmpathpersist: Handle RESERVE with reservation held by failed path
libmpathpersist: use check_holding_reservation in mpath_prout_rel
libmpathpersist: Fix unregistering while holding the reservation
libmpathpersist/mpath_persist.h | 3 +
libmpathpersist/mpath_persist_int.c | 204 ++++++++++++++++++----------
2 files changed, 134 insertions(+), 73 deletions(-)
--
2.50.1