I see that you have a mix of aio=native and aio=threads. I can't say much about the aio=native disks (perhaps try to reproduce without them?), but there are definitely no worker threads for the other disks that bdrv_drain_all() would have to wait for.
True. But I/O was being done only qcow2 disk with threads backend. And snapshot was made on this disk.
I'll try to reproduce with all 'threads'.
bdrv_requests_pending(), called by bdrv_requests_pending_all(), is the function that determines for each of the disks in your VM if it still has requests in flight that need to be completed. This function must have returned true even though there is nothing to wait for. Can you check which of its conditions led to this behaviour, and for which disk it did? Either by setting a breakpoint there and singlestepping through the function the next time it is called (if the poll even has a timeout), or by inspecting the conditions manually in gdb.
I'm on it. -- mg