On Fri, 2017-09-08 at 13:45 -0500, Benjamin Marzinski wrote: > 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. > > This patch provides an alternate 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. Where a device's > reservation key comes from is tracked by the prkey_source variable, > which is set and read through the reservation_key dict.c functions. > > There are also new multipathd commands to get, set, and unset the > mappings in the prkesy file. Currently, > > "multipathd map $map setprkey key $key" sets the mapping > "multipathd map $map unsetprkey" unsets the mapping > "multipathd map $map getprkey" gets the current reservation_key for a > multipath device. > > There is some lack of symmetry here where you are allowed to set and > unset mappings even for devices that aren't configured to use the > prkeys > file, but you will only get the mapping from the prkeys file for > devices > that are configured to use it. Otherwise you will get the mapping > from > multipath.conf. In other words, setprkey and unsetprkey return > success > but don't do anything useful unless a device is configured with > > reservation_key file > > but getprkey will return the device's current reservation_key > regardless > of where the key came from. > > Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> > --- > libmultipath/Makefile | 2 +- > libmultipath/config.c | 6 +- > libmultipath/config.h | 3 + > libmultipath/defaults.h | 1 + > libmultipath/dict.c | 67 +++++++++++++++---- > libmultipath/dict.h | 2 +- > libmultipath/prkey.c | 166 > ++++++++++++++++++++++++++++++++++++++++++++++ > libmultipath/prkey.h | 19 ++++++ > libmultipath/propsel.c | 31 +++++++-- > libmultipath/structs.h | 7 ++ > multipathd/cli.c | 8 +++ > multipathd/cli.h | 8 +++ > multipathd/cli_handlers.c | 82 +++++++++++++++++++++++ > multipathd/cli_handlers.h | 3 + > multipathd/main.c | 3 + > 15 files changed, 388 insertions(+), 20 deletions(-) > create mode 100644 libmultipath/prkey.c > create mode 100644 libmultipath/prkey.h Looks ok to me. I suppose you tested that parsing code for the key file. Reviewed-by: Martin Wilck <mwilck@xxxxxxxx> -- Dr. Martin Wilck <mwilck@xxxxxxxx>, Tel. +49 (0)911 74053 2107 SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg) -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel