The scsi persistent reservation API doesn't force devices to implement any method to display the mapping from a reservation key to an I_T Nexus (the READ_FULL_STATUS action is an optional later addition, and a number of devices don't support it). To allow multipathd to determine the correct reservation key for a device without support from the device itself, it uses the reservation_key configuration option. Unfortunately, using this option forces the multipath configuration to be updated whenever a new scsi registration key is used. This isn't acceptable to some users, who want a static configuration file. I've had multiple requests to allow persistent reservations without needing to set the reservation_key paramter beforehand. This patch set provides an alternative method of setting the reservation_key for the multipath device. The reservation_key configuration option now also accepts the keyword "file". If this is used, multpath will look in the new prkeys file (by default "/etc/multipath/prkeys") for a line with the device wwid and it's associated reservation_key. The patches allow users to manually set reservation_key to multipath device mappings by using the multipathd client commands, but mpathpersist will automatically detect when devices are configured to use the prkeys file, and will set and clear the reservation keys automatically. Changes in v3: - Add documentation for new options and commands (Xose Vazquez Perez) [PATCH v3 6/6] multipath: add man page info for my prkey changes - Fix error in checking if multipathd needs to set the prkey for a device in mpath_persistent_reserve_out [PATCH v3 5/6] mpathpersist: add support for prkeys file Changes in v2: - use struct be64 instead of uint64_t to hold the reservation_key (Martin Wilck) Benjamin Marzinski (6): libmultipath: pull functions into util.c libmultipath: change reservation_key to a be64 libmpathpersist: fix update_prflag code multipath: add alternate reservation_key method mpathpersist: add support for prkeys file multipath: add man page info for my prkey changes libmpathpersist/mpath_persist.c | 79 ++++++++++--------- libmpathpersist/mpath_updatepr.c | 43 ++++++---- libmpathpersist/mpathpr.h | 3 +- libmultipath/Makefile | 2 +- libmultipath/byteorder.h | 44 +++++++++++ libmultipath/checkers/rbd.c | 16 +--- libmultipath/config.c | 9 ++- libmultipath/config.h | 9 ++- libmultipath/defaults.h | 1 + libmultipath/dict.c | 105 +++++++++++++------------ libmultipath/dict.h | 4 +- libmultipath/prkey.c | 166 +++++++++++++++++++++++++++++++++++++++ libmultipath/prkey.h | 19 +++++ libmultipath/propsel.c | 35 +++++++-- libmultipath/structs.h | 12 ++- libmultipath/util.c | 33 ++++++++ libmultipath/util.h | 4 + multipath/multipath.conf.5 | 17 ++++ multipathd/cli.c | 8 ++ multipathd/cli.h | 8 ++ multipathd/cli_handlers.c | 82 +++++++++++++++++++ multipathd/cli_handlers.h | 3 + multipathd/main.c | 28 +++---- multipathd/multipathd.8 | 16 ++++ 24 files changed, 590 insertions(+), 156 deletions(-) create mode 100644 libmultipath/byteorder.h create mode 100644 libmultipath/prkey.c create mode 100644 libmultipath/prkey.h -- 2.7.4 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel