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
