[dm-devel] [PATCH 2/2] libmultipath: add %L path wildcard for 64-bit hex LUN
Benjamin Marzinski
bmarzins at redhat.com
Thu Feb 10 18:42:07 UTC 2022
On Wed, Feb 09, 2022 at 08:47:13PM +0100, Steffen Maier wrote:
> Complements v0.6.0 commit
> 01ab2a468ea2 ("libmultipath: Add additional path wildcards") as well as
> ("libmultipath: support host adapter name lookup for s390x ccw bus").
>
> With that we can easily get the full FCP addressing triplet
> (HBA, WWPN, FCPLUN) from multipath tools without additional tools
> and correlation:
>
> $ multipathd -k'show paths format "%w|%a|%r|%L"'
> uuid |host adapter|target WWPN |LUN hex
> 36005076400820293e8000000000000a0|0.0.5080 |0x500507680b25c449|0x00a0000000000000
> 36005076400820293e8000000000000a0|0.0.5080 |0x500507680b25c448|0x00a0000000000000
> 36005076400820293e8000000000000a0|0.0.50c0 |0x500507680b26c449|0x00a0000000000000
> 36005076400820293e8000000000000a0|0.0.50c0 |0x500507680b26c448|0x00a0000000000000
>
> Likewise, add a field lun_hex for JSON path output.
>
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>
> Reviewed-by: Benjamin Block <bblock at linux.ibm.com>
> Signed-off-by: Steffen Maier <maier at linux.ibm.com>
> ---
> libmultipath/print.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/libmultipath/print.c b/libmultipath/print.c
> index 221b515f23d3..4f6146e85fc9 100644
> --- a/libmultipath/print.c
> +++ b/libmultipath/print.c
> @@ -96,6 +96,7 @@
> " \"host_wwpn\" : \"%R\",\n" \
> " \"target_wwpn\" : \"%r\",\n" \
> " \"host_adapter\" : \"%a\",\n" \
> + " \"lun_hex\" : \"%L\",\n" \
> " \"marginal_st\" : \"%M\""
>
> #define PROGRESS_LEN 10
> @@ -451,6 +452,24 @@ snprint_hcil (struct strbuf *buff, const struct path * pp)
> pp->sg_id.lun);
> }
>
> +
> +static int
> +snprint_path_lunhex (struct strbuf *buff, const struct path * pp)
> +{
> + uint64_t lunhex = SCSI_INVALID_LUN, scsilun;
> +
> + if (!pp || pp->sg_id.host_no < 0)
> + return print_strbuf(buff, "0x%016" PRIx64, lunhex);
> +
> + scsilun = pp->sg_id.lun;
> + /* cf. Linux kernel function int_to_scsilun() */
> + lunhex = ((scsilun & 0x000000000000ffffULL) << 48) |
> + ((scsilun & 0x00000000ffff0000ULL) << 16) |
> + ((scsilun & 0x0000ffff00000000ULL) >> 16) |
> + ((scsilun & 0xffff000000000000ULL) >> 48);
> + return print_strbuf(buff, "0x%016" PRIx64, lunhex);
> +}
> +
> static int
> snprint_dev (struct strbuf *buff, const struct path * pp)
> {
> @@ -842,6 +861,7 @@ static const struct path_data pd[] = {
> {'0', "failures", snprint_path_failures},
> {'P', "protocol", snprint_path_protocol},
> {'I', "init_st", snprint_initialized},
> + {'L', "LUN hex", snprint_path_lunhex},
> };
>
> static const struct pathgroup_data pgd[] = {
> --
> 2.27.0
More information about the dm-devel
mailing list