Re: [PATCH v5 0/6] vhost-user-blk: add compatibility with older qemu versions

"Michael S. Tsirkin" <[email protected]> Wed, 29 Jul 2026 05:14:04 -0400
Newsgroups dev.linux.lists.virtio-fs,org.nongnu.qemu-devel
Message-ID <[email protected]>
On Tue, Jul 28, 2026 at 03:08:35PM +0500, Alexandr Moshkov wrote:
> v4 -> v5:
> - introduce protocol feature VHOST_USER_PROTOCOL_F_GET_VRING_BASE_SKIP_DRAIN
>   to guard the new message, instead of reusing the existing
>   VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INLIFGHT. Update docs.
> - improved commit messages.
> 
> v3 -> v4:
> - add new protocol message GET_VRING_BASE_SKIP_DRAIN instead of parameter to GET_VRING_BASE message. This new message can be send instead of GET_VRING_BASE, allowing back-end to suspend inflight I/O immediately instead of waiting and completing them.
> - rebase to newer master
> 
> v2 -> v3:
> - fix complile problems
> - add assert check in do_vhost_virtio_stop
> - make inflight-migration property mutable
> 
> v1 -> v2:
> - reorganize commits: make refactor commits first, then core semantic change
> - add additional pre_save check for inflight migration possibility
> 
> ---
> 
> This is v5 of the series previously sent as
> "[PATCH v4 0/6] vhost-user-blk: fix inflight migration compatibility".
> 
> This series extends the vhost-user-blk inflight migration feature
> introduced in QEMU 11.0 to address a runtime compatibility problem.
> 
> Currently, the inflight migration behaviour in vhost-user-blk is
> controlled by VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT, which is
> negotiated once at connection time. Once the feature is negotiated, the
> back-end always uses suspend semantics on GET_VRING_BASE — there is no
> way for the front-end to request normal drain behaviour on a per-call
> basis without reconnecting. This makes it impossible to disable
> inflight-migration at runtime, which is needed when, for example,
> migrating a VM to an older QEMU version that does not support the
> feature.


This part, I do not understand.

What exactly does "migrating" mean here? Live migration?
An older QEMU will presumably either negotiate or fail to negotiate
the bit.


> To solve this, the series introduces a new protocol message
> VHOST_USER_GET_VRING_BASE_SKIP_DRAIN (id=45) guarded by a new protocol
> feature VHOST_USER_PROTOCOL_F_GET_VRING_BASE_SKIP_DRAIN. The message is
> semantically identical to GET_VRING_BASE but explicitly instructs the
> back-end to suspend in-flight I/O immediately rather than draining it.
> This gives the front-end explicit per-call control: GET_VRING_BASE for
> normal operation, GET_VRING_BASE_SKIP_DRAIN during live migration.
> 
> In vhost-user-blk, GET_VRING_BASE_SKIP_DRAIN is sent only when
> inflight-migration is enabled and the device is stopping due to live
> migration (RUN_STATE_FINISH_MIGRATE). The inflight-migration property
> is also made mutable so it can be toggled via qom-set at runtime without
> reconnecting to the back-end.
> 
> Alexandr Moshkov (6):
>   vhost-user: add skip_drain param to do_vhost_virtqueue_stop
>   vhost-user: add GET_VRING_BASE_SKIP_DRAIN message
>   vhost-user: use skip_drain with GET_VRING_BASE_SKIP_DRAIN message
>   vhost-user-blk: make inflight-migration prop mutable
>   vhost-user-blk: move inflight_needed higher
>   vhost-user-blk: use GET_VRING_BASE_SKIP_DRAIN during inflight
>     migration
> 
>  backends/cryptodev-vhost.c        |  2 +-
>  backends/vhost-user.c             |  2 +-
>  docs/interop/vhost-user.rst       | 88 +++++++++++++++++++------------
>  hw/block/vhost-user-blk.c         | 43 ++++++++++++---
>  hw/net/vhost_net.c                |  9 ++--
>  hw/scsi/vhost-scsi-common.c       |  2 +-
>  hw/virtio/vdpa-dev.c              |  2 +-
>  hw/virtio/vhost-user-base.c       |  2 +-
>  hw/virtio/vhost-user-fs.c         |  2 +-
>  hw/virtio/vhost-user-scmi.c       |  2 +-
>  hw/virtio/vhost-user.c            | 47 ++++++++++++++---
>  hw/virtio/vhost-vsock-common.c    |  2 +-
>  hw/virtio/vhost.c                 | 34 ++++++++----
>  include/hw/virtio/vhost-backend.h |  1 +
>  include/hw/virtio/vhost-user.h    |  2 +-
>  include/hw/virtio/vhost.h         |  7 ++-
>  16 files changed, 172 insertions(+), 75 deletions(-)
> 
> -- 
> 2.34.1