Chain: [A] <- [B] QEMU launched with: $ ~/build/build-qemu-block-stream-crash-test/x86_64-softmmu/qemu-system-x86_64 -M q35 -display none -nodefconfig -nodefaults -m 512 -blockdev node-name=node-A,driver=qcow2,file.driver=file,file.filename=./a.qcow2 -device virtio-blk,drive=node-A,id=virtio0 -netdev user,id=net0,hostfwd=tcp::5555-:22 -device e1000,netdev=net0 -monitor stdio -qmp unix:./qmp-sock,server,nowait QMP shell: $ ./qmp-shell -v -p /tmp/qmp-sock (QEMU) Short (only `qmp-shell`): ======================================================================= (QEMU) blockdev-snapshot-sync node-name=node-A snapshot-file=b.qcow2 snapshot-node-name=node-B format=qcow2 (QEMU) block-commit device=node-B base=a.qcow2 top=b.qcow2 job-id=job0 (QEMU) query-block-jobs (QEMU) block-job-complete device=job0 (QEMU) query-block-jobs ======================================================================= Long (`qmp-shell` output along with raw JSON): ----------------------------------------------------------------------- (QEMU) query-version { "execute": "query-version", "arguments": {} } { "return": { "qemu": { "micro": 50, "major": 2, "minor": 9 }, "package": " (v2.9.0-557-g0e17187-dirty)" } } (QEMU) ----------------------------------------------------------------------- (QEMU) blockdev-snapshot-sync node-name=node-A snapshot-file=b.qcow2 snapshot-node-name=node-B format=qcow2 { "execute": "blockdev-snapshot-sync", "arguments": { "node-name": "node-A", "snapshot-file": "b.qcow2", "format": "qcow2", "snapshot-node-name": "node-B" } } { "return": {} } ----------------------------------------------------------------------- (QEMU) block-commit device=node-B base=a.qcow2 top=b.qcow2 job-id=job0 { "execute": "block-commit", "arguments": { "device": "node-B", "job-id": "job0", "top": "b.qcow2", "base": "a.qcow2" } } { "return": {} } (QEMU) {u'timestamp': {u'seconds': 1495924024, u'microseconds': 225595}, u'data': {u'device': u'job0', u'type': u'commit', u'speed': 0, u'len': 983040, u'offset': 983040}, u'event': u'BLOCK_JOB_COMPLETED'} {u'timestamp': {u'seconds': 1495924062, u'microseconds': 901494}, u'data': {u'device': u'job0', u'type': u'commit', u'speed': 0, u'len': 0, u'offset': 0}, u'event': u'BLOCK_JOB_READY'} (QEMU) ----------------------------------------------------------------------- (QEMU) query-block-jobs { "execute": "query-block-jobs", "arguments": {} } { "return": [ { "busy": false, "type": "commit", "len": 0, "paused": false, "ready": true, "io-status": "ok", "offset": 0, "device": "job0", "speed": 0 } ] } (QEMU) ----------------------------------------------------------------------- (QEMU) block-job-complete device=job0 { "execute": "block-job-complete", "arguments": { "device": "job0" } } { "return": {} } ----------------------------------------------------------------------- (QEMU) query-block-jobs { "execute": "query-block-jobs", "arguments": {} } { "return": [] } (QEMU) -----------------------------------------------------------------------