]> git.ipfire.org Git - thirdparty/qemu.git/commit
file-posix: Probe paths and retry SG_IO on potential path errors
authorKevin Wolf <kwolf@redhat.com>
Thu, 22 May 2025 13:08:03 +0000 (15:08 +0200)
committerKevin Wolf <kwolf@redhat.com>
Thu, 22 May 2025 15:56:50 +0000 (17:56 +0200)
commitbf627788ef17721955bfcfba84209a07ae5f54ea
treea73b0bf1b5d24ff7226b27f7ea094a5f0f04d618
parent5634622bcb339f213469eceeff005640492fc902
file-posix: Probe paths and retry SG_IO on potential path errors

When scsi-block is used on a host multipath device, it runs into the
problem that the kernel dm-mpath doesn't know anything about SCSI or
SG_IO and therefore can't decide if a SG_IO request returned an error
and needs to be retried on a different path. Instead of getting working
failover, an error is returned to scsi-block and handled according to
the configured error policy. Obviously, this is not what users want,
they want working failover.

QEMU can parse the SG_IO result and determine whether this could have
been a path error, but just retrying the same request could just send it
to the same failing path again and result in the same error.

With a kernel that supports the DM_MPATH_PROBE_PATHS ioctl on dm-mpath
block devices (queued in the device mapper tree for Linux 6.16), we can
tell the kernel to probe all paths and tell us if any usable paths
remained. If so, we can now retry the SG_IO ioctl and expect it to be
sent to a working path.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-ID: <20250522130803.34738-1-kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block/file-posix.c