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.

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_int.c | 199 +++++++++++++++++-----------
 1 file changed, 125 insertions(+), 74 deletions(-)

-- 
2.50.1


Reply via email to