mirror: support more than one in-flight AIO operation
commit402a47411bff5e849dc880dd08ba7e6564e6e4f4
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 22 Jan 2013 08:03:14 +0000 (22 09:03 +0100)
committerKevin Wolf <kwolf@redhat.com>
Fri, 25 Jan 2013 17:18:35 +0000 (25 18:18 +0100)
treed4c5328c2342f71d41157708c88699ad3d8597e0
parent08e4ed6cdeeee7912072cf14aa8ab6c60dacb4fb
mirror: support more than one in-flight AIO operation

With AIO support in place, we can start copying more than one chunk
in parallel.  This patch introduces the required infrastructure for
this: the buffer is split into multiple granularity-sized chunks,
and there is a free list to access them.

Because of copy-on-write, a single operation may already require
multiple chunks to be available on the free list.

In addition, two different iterations on the HBitmap may want to
copy the same cluster.  We avoid this by keeping a bitmap of in-flight
I/O operations, and blocking until the previous iteration completes.
This should be a pretty rare occurrence, though; as long as there is
no overlap the next iteration can start before the previous one finishes.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block/mirror.c
trace-events