linux/drivers/nvme/host
Christoph Hellwig 0d0b660f21 nvme: add ANA support
Add support for Asynchronous Namespace Access as specified in NVMe 1.3
TP 4004.  With ANA each namespace attached to a controller belongs to an
ANA group that describes the characteristics of accessing the namespaces
through this controller.  In the optimized and non-optimized states
namespaces can be accessed regularly, although in a multi-pathing
environment we should always prefer to access a namespace through a
controller where an optimized relationship exists.  Namespaces in
Inaccessible, Permanent-Loss or Change state for a given controller
should not be accessed.

The states are updated through reading the ANA log page, which is read
once during controller initialization, whenever the ANA change notice
AEN is received, or when one of the ANA specific status codes that
signal a state change is received on a command.

The ANA state is kept in the nvme_ns structure, which makes the checks in
the fast path very simple.  Updating the ANA state when reading the log
page is also very simple, the only downside is that finding the initial
ANA state when scanning for namespaces is a bit cumbersome.

The gendisk for a ns_head is only registered once a live path for it
exists.  Without that the kernel would hang during partition scanning.

Includes fixes and improvements from Hannes Reinecke.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Keith Busch <keith.busch@intel.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
2018-07-27 19:12:08 +02:00
..
core.c nvme: add ANA support 2018-07-27 19:12:08 +02:00
fabrics.c nvme-fabrics: fix and refine state checks in __nvmf_check_ready 2018-06-15 11:21:00 +02:00
fabrics.h nvme-fabrics: handle the admin-only case properly in nvmf_check_ready 2018-06-15 11:21:00 +02:00
fault_inject.c nvme: Add fault injection feature 2018-03-26 08:53:43 -06:00
fc.c nvme: cache struct nvme_ctrl reference to struct nvme_request 2018-07-23 09:35:18 +02:00
Kconfig IB: Revert "remove redundant INFINIBAND kconfig dependencies" 2018-05-28 10:40:16 -06:00
lightnvm.c nvme: simplify the API for getting log pages 2018-07-27 19:12:01 +02:00
Makefile nvme: Add fault injection feature 2018-03-26 08:53:43 -06:00
multipath.c nvme: add ANA support 2018-07-27 19:12:08 +02:00
nvme.h nvme: add ANA support 2018-07-27 19:12:08 +02:00
pci.c nvme: cache struct nvme_ctrl reference to struct nvme_request 2018-07-23 09:35:18 +02:00
rdma.c nvme-rdma: centralize admin/io queue teardown sequence 2018-07-24 15:55:50 +02:00
trace.c nvme: add disk name to trace events 2018-07-24 15:55:48 +02:00
trace.h nvme: add disk name to trace events 2018-07-24 15:55:48 +02:00