[dm-devel] [PATCH 4/5] multipath: add alternate reservation_key method
Martin Wilck
mwilck at suse.com
Fri Sep 8 21:34:48 UTC 2017
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 at redhat.com>
> ---
> 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 at suse.com>
--
Dr. Martin Wilck <mwilck at suse.com>, Tel. +49 (0)911 74053 2107
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
More information about the dm-devel
mailing list