• Christoph Hellwig's avatar
    nvme: implement multipath access to nvme subsystems · 32acab31
    Christoph Hellwig authored
    
    
    This patch adds native multipath support to the nvme driver.  For each
    namespace we create only single block device node, which can be used
    to access that namespace through any of the controllers that refer to it.
    The gendisk for each controllers path to the name space still exists
    inside the kernel, but is hidden from userspace.  The character device
    nodes are still available on a per-controller basis.  A new link from
    the sysfs directory for the subsystem allows to find all controllers
    for a given subsystem.
    
    Currently we will always send I/O to the first available path, this will
    be changed once the NVMe Asynchronous Namespace Access (ANA) TP is
    ratified and implemented, at which point we will look at the ANA state
    for each namespace.  Another possibility that was prototyped is to
    use the path that is closes to the submitting NUMA code, which will be
    mostly interesting for PCI, but might also be useful for RDMA or FC
    transports in the future.  There is not plan to implement round robin
    or I/O service time path selectors, as those are not scalable with
    the performance rates provided by NVMe.
    
    The multipath device will go away once all paths to it disappear,
    any delay to keep it alive needs to be implemented at the controller
    level.
    
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarKeith Busch <keith.busch@intel.com>
    Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    32acab31