+24
−6
Loading
When an I/O gets an I/O error, the I/O path to which the I/O was submitted may be still available. In this case, the I/O should be retried to the same I/O path. However, a new I/O path was always selected for an I/O retry. For the active/passive policy, the same I/O path was selected naturally. However, for the active/active policy, it was very likely that a different I/O path was selected. To use the same I/O path for an I/O retry, add a helper function bdev_nvme_retry_io() into bdev_nvme_retry_ios() and replace bdev_nvme_submit_request() by bdev_nvme_retry_io(). bdev_nvme_retry_io() checks if nbdev_io->io_path is not NULL and is available. Then, call _bdev_nvme_submit_request() if true, or call bdev_nvme_submit_request() otherwise. For I/O path error, clear nbdev_io->io_path for clarification. Add unit test to verify this change. Linux kernel native NVMe multipath already takes this approach. Hence, this change will be reasonable. Signed-off-by:Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: I7022aafd8b1cdd5830c4f743d64b080aa970cf8d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16015 Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by:
Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by:
Richael <richael.zhuang@arm.com> Reviewed-by:
Jim Harris <james.r.harris@intel.com>