nvme-multipath: revalidate paths during rescan
authorHannes Reinecke <hare@suse.de>
Tue, 24 Aug 2021 14:57:42 +0000 (16:57 +0200)
committerChristoph Hellwig <hch@lst.de>
Mon, 6 Sep 2021 07:59:02 +0000 (09:59 +0200)
commite7d65803e2bb5bc739548b67a5fc72c626cf7e3b
tree0543aa044f37dfc1ee05ea267ae79dc4e6bede54
parentd32d3d0b47f7e34560ae3c55ddfcf68694813501
nvme-multipath: revalidate paths during rescan

When triggering a rescan due to a namespace resize we will be
receiving AENs on every controller, triggering a rescan of all
attached namespaces. If multipath is active only the current path and
the ns_head disk will be updated, the other paths will still refer to
the old size until AENs for the remaining controllers are received.

If I/O comes in before that it might be routed to one of the old
paths, triggering an I/O failure with 'access beyond end of device'.
With this patch the old paths are skipped from multipath path
selection until the controller serving these paths has been rescanned.

Signed-off-by: Hannes Reinecke <hare@suse.de>
[dwagner: - introduce NVME_NS_READY flag instead of NVME_NS_INVALIDATE
          - use 'revalidate' instead of 'invalidate' which
    follows the zoned device code path.
  - clear NVME_NS_READY before clearing current_path]
Signed-off-by: Daniel Wagner <dwagner@suse.de>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/core.c
drivers/nvme/host/multipath.c
drivers/nvme/host/nvme.h