I have read libvirt code, specifically: tools/virsh-domain.c src/libvirt-domain.c src/qemu_driver.c
In the execution path of the block commit logic: vshcommandrun() -> cmdblockcommit() -> virtdomainblockcommit() -> domain->driver(qemu)->domainblockcommit() -> qemudomainblockcommit() As explained in libvirt git logs, QEMU changed its behavior in 2.0 for committing active layer. After the block layer was merged, QEMU has to wait for what to do: Keep using the actual block layer OR pivot into the merged one (invalidating all subsequent layers). Best commit explaining this is: https://gitorious.org/libvirt/libvirt/commit/b2980250631d6bf12a8e5b05f0bdfcb9456dea3c Unfortunately this logic first appeared in 1.6 and was heavily changed until recent versions. In order to have an usable (decently) block commit logic I would have to backport the majority of the following commits: tools/virsh-domain.c e557bd28a26 virsh: blockcommit: Support --bytes and scaled integers ceec58ac9ea virsh: fix report of non-active commit completion 78d4c184403 virsh: Fix types for option bandwidth in block* d8415b54695 virsh: Improve the job type reported of virsh cmd blockcommit f182da20b09 virsh: expose new active commit controls b2980250631 blockcommit: document semantics of committing active layer src/qemu_driver.c eae59247c59 qemu: Update state of block job to READY only if it actually is ready f9ea3d60119 qemu: read backing chain names from qemu ee744b5b387 qemu: block-commit: Mark disk in block jobs only on successful command e1125cebfc0 qemu: forbid second blockcommit during active commit 3937ef9cf4f getstats: crawl backing chain for qemu cfb16b8ed7b blockcommit: turn on active commit 232a31bea3b blockcommit: track job type in xml c29b6529123 qemu: monitor: Add argument for specifying backing name for block commit 40ad7160a2e blockjob: turn on qemu capability bit for active commit 3e3c6ff10fd blockcommit: require base below top 278c51af3a7 blockcommit: update error messages related to block jobs 519181d932f blockcommit: fix regression with explicit top argument b2980250631 blockcommit: document semantics of committing active layer AND some of them are even adding arguments to cmdline that don't exist today (like commit: f182da20b09, specifically adding flags to differentiate the merge type - active with pivot). Per SRU guidelines: https://wiki.ubuntu.com/StableReleaseUpdates, the SRU proposal wouldn't probably not be accepted by our core team. Instead, I'll do what was done upstream right after 1.2.0 release: e6bcbcd32c70 qemu: reject rather than hang on blockcommit of active layer Reject block commit for active layers. This means that the merge will either be offline OR by using other merging method: Block Streaming (comment #10). I'll prepare the debdiff and propose the patch for the SRU. -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1317491 Title: virsh blockcommit hangs at 100% To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1317491/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs