[dm-devel] [PATCH 14/19] multipath-tools: add ANA support for NVMe device
Hannes Reinecke
hare at suse.de
Thu Dec 20 15:17:46 UTC 2018
On 12/19/18 12:19 AM, Martin Wilck wrote:
> From: lijie <lijie34 at huawei.com>
>
> Add support for Asynchronous Namespace Access as specified in NVMe 1.3
> TP 4004. The states are updated through reading the ANA log page.
>
> By default, the native nvme multipath takes over the nvme device.
> We can pass a false to the parameter 'multipath' of the nvme-core.ko
> module,when we want to use multipath-tools.
>
> Signed-off-by: Martin Wilck <mwilck at suse.com>
> ---
> libmultipath/prio.h | 1 +
> libmultipath/prioritizers/Makefile | 1 +
> libmultipath/prioritizers/ana.c | 292 +++++++++++++++++++++++++++++
> libmultipath/prioritizers/ana.h | 221 ++++++++++++++++++++++
> multipath/multipath.conf.5 | 8 +
> 5 files changed, 523 insertions(+)
> create mode 100644 libmultipath/prioritizers/ana.c
> create mode 100644 libmultipath/prioritizers/ana.h
>
> diff --git a/libmultipath/prio.h b/libmultipath/prio.h
> index aa587ccd..599d1d88 100644
> --- a/libmultipath/prio.h
> +++ b/libmultipath/prio.h
> @@ -30,6 +30,7 @@ struct path;
> #define PRIO_WEIGHTED_PATH "weightedpath"
> #define PRIO_SYSFS "sysfs"
> #define PRIO_PATH_LATENCY "path_latency"
> +#define PRIO_ANA "ana"
>
> /*
> * Value used to mark the fact prio was not defined
> diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile
> index ab7bc075..15afaba3 100644
> --- a/libmultipath/prioritizers/Makefile
> +++ b/libmultipath/prioritizers/Makefile
> @@ -19,6 +19,7 @@ LIBS = \
> libpriordac.so \
> libprioweightedpath.so \
> libpriopath_latency.so \
> + libprioana.so \
> libpriosysfs.so
>
> all: $(LIBS)
> diff --git a/libmultipath/prioritizers/ana.c b/libmultipath/prioritizers/ana.c
> new file mode 100644
> index 00000000..c5aaa5fb
> --- /dev/null
> +++ b/libmultipath/prioritizers/ana.c
> @@ -0,0 +1,292 @@
> +/*
> + * (C) Copyright HUAWEI Technology Corp. 2017 All Rights Reserved.
> + *
> + * ana.c
> + * Version 1.00
> + *
> + * Tool to make use of a NVMe-feature called Asymmetric Namespace Access.
> + * It determines the ANA state of a device and prints a priority value to stdout.
> + *
> + * Author(s): Cheng Jike <chengjike.cheng at huawei.com>
> + * Li Jie <lijie34 at huawei.com>
> + *
> + * This file is released under the GPL version 2, or any later version.
> + */
> +#include <stdio.h>
> +#include <sys/ioctl.h>
> +#include <sys/stat.h>
> +#include <sys/types.h>
> +#include <stdbool.h>
> +
> +#include "debug.h"
> +#include "prio.h"
> +#include "structs.h"
> +#include "ana.h"
> +
> +enum {
> + ANA_PRIO_OPTIMIZED = 50,
> + ANA_PRIO_NONOPTIMIZED = 10,
> + ANA_PRIO_INACCESSIBLE = 5,
> + ANA_PRIO_PERSISTENT_LOSS = 1,
> + ANA_PRIO_CHANGE = 0,
> + ANA_PRIO_RESERVED = 0,
> + ANA_PRIO_GETCTRL_FAILED = -1,
> + ANA_PRIO_NOT_SUPPORTED = -2,
> + ANA_PRIO_GETANAS_FAILED = -3,
> + ANA_PRIO_GETANALOG_FAILED = -4,
> + ANA_PRIO_GETNSID_FAILED = -5,
> + ANA_PRIO_GETNS_FAILED = -6,
> + ANA_PRIO_NO_MEMORY = -7,
> + ANA_PRIO_NO_INFORMATION = -8,
> +};
Please model the priorities according to the ALUA handler; ANA state
'persistent loss' maps onto ALUA 'unavailable' (and hence should have a
priority of '0'), and ANA state 'inaccessible' is roughly similar to
ALUA 'standby', hence should have a priority of '1'.
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare at suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
More information about the dm-devel
mailing list