Assume I’m running a VM with the qemu driver in libvirt, with multiple disks, with no guest agent.
Now if I take a disks-only snapshot of that active VM.
I see that under the hood, libvirt is issuing a qmp transaction with blockdev-snapshot command per each disk.
I also see that qmp_transaction in qemu is draining all disks IO before performing the transaction (calling bdrv_drain_all).
But once the transaction has started, is it possible that any incoming guest disk IO will be processed before the transaction completes?
Assuming that’s not possible, how is this “block disk IO while running the transaction” is enforced? Is it the call to GLOBAL_STATE_CODE() at the beginning of qemu’s qmp_transaction(…)?