On Mon, May 26, 2014 at 02:58:35PM +0200, Marcin Gibuła wrote: > >Two options for making progress on this bug: > > > >1. Debug bdrv_drain_all() and find out whether there are any I/O > > requests remaining. > > Yes, there is one request pending on active layer of disk that is being > commited (on bs->tracked_requests list). IO threads die off because they > have nothing to do... it seems that requests are somehow not commited into > threads. > > I tried hard (and will continue to try) to debug this, but documentation is > limited :-) so ANY tips where to look are welcome. > > >2. Post steps for reproducing this problem (exact command-lines or virsh > > commands used). > > I'm using application that talks with libvirt via API, so I describe what it > does. > > 1. Create a VM, boot a system. I'm using iso from http://www.sysresccd.org > > 2. VM has a mounted QCOW2 disk with following hierarchy: > [file1] -> [file2 (active)] > > Both are qcow2 files. > > 3. Open console. Start command: > > while true; do dd if=/dev/zero of=/dev/vdX bs=512k oflag=direct; done; > > Where vdX is of course qcow2 disk described above. > > 4. Create snapshot of file2 (virDomainSnapshotCreateXML). So now we have: > > [file1] -> [file2] -> [file3 (active)] - > > 5. Wait couple of seconds (so snapshot fills up). > > 6. Commit file2 into file1 (virDomainBlockCommit). > > 7. During commit, another threads is using virDomainGetBlockJobInfo() to > query its progress. > > Note - it doesn't always happen. I have about 1 per 10 failure rate with > this procedure. > > Do you want me to reproduce it manually with pure virsh?
What happens if you omit #7 virDomainGetBlockJobInfo()? Does it still hang 1/10 times? Can you post the QEMU command-line so we know the precise VM configuration? (ps aux | grep qemu) Thanks, Stefan