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


Reply via email to