On Thu, Jan 29, 2026 at 04:20:30PM -0500, Stefan Hajnoczi wrote:
> v3:
> - Use warn_report_err() instead of suppressing errors [Daniel Berrangé]
> - Wrap lines exceeding 80 characters
CCing Daniel Berrangé (sorry, I forgot!)
>
> v2:
> - Add user documentation [Paolo]
> - Send PREEMPT on the source if migration fails. This rollback operation
> ensures the source regains access to the LUN even if migration fails after
> the destination issues its own PREEMPT.
>
> Live migration does not work for SCSI Persistent Reservations acquired on
> scsi-block devices. This patch series migrates the reservation key and
> reservation type so that the destination QEMU can take over the persistent
> reservation with the PREEMPT service action upon live migration.
>
> The approach involves snooping PERSISTENT RESERVE OUT replies and tracking the
> scsi-block device's current reservation key and reservation type. In most cases
> this involves no additional SCSI commands. This approach isn't perfect: if
> another machine modifies the reservation on the physical LUN, then QEMU's state
> becomes stale. Persistent reservations are inherently cooperative, so this is
> acceptable as long as real applications don't run into problems.
>
> I am also working on a test suite called pr-tests that runs sg_persist(8)
> commands across multiple machines in order to exercise various scenarios:
> https://gitlab.com/stefanha/pr-tests
>
> Stefan Hajnoczi (5):
> scsi: generalize scsi_SG_IO_FROM_DEV() to scsi_SG_IO()
> scsi: add error reporting to scsi_SG_IO()
> scsi: track SCSI reservation state for live migration
> scsi: save/load SCSI reservation state
> docs: add SCSI migrate-pr documentation
>
> docs/system/device-emulation.rst | 1 +
> docs/system/devices/scsi/index.rst | 10 +
> docs/system/devices/scsi/migrate-pr.rst | 54 +++++
> include/hw/scsi/scsi.h | 15 +-
> include/scsi/constants.h | 21 ++
> hw/core/machine.c | 4 +-
> hw/scsi/scsi-bus.c | 3 +
> hw/scsi/scsi-disk.c | 90 +++++++-
> hw/scsi/scsi-generic.c | 291 +++++++++++++++++++++++-
> hw/scsi/trace-events | 2 +
> 10 files changed, 476 insertions(+), 15 deletions(-)
> create mode 100644 docs/system/devices/scsi/index.rst
> create mode 100644 docs/system/devices/scsi/migrate-pr.rst
>
> --
> 2.52.0
>