qcow2: Handle dependencies earlier
authorKevin Wolf <kwolf@redhat.com>
Tue, 26 Mar 2013 16:49:56 +0000 (17:49 +0100)
committerStefan Hajnoczi <stefanha@redhat.com>
Thu, 28 Mar 2013 10:52:42 +0000 (11:52 +0100)
commit17a71e58238138c3f02be7e9f5dc8de5d72a9a9d
treee6ceb05281a72aacaf0bb543a13a39e766e4836b
parent9ee6439e27d15c528fde6d9da1e4c238a23b6b7a
qcow2: Handle dependencies earlier

Handling overlapping allocations isn't just a detail of cluster
allocation. It is rather one of three ways to get the host cluster
offset for a write request:

1. If a request overlaps an in-flight allocations, the cluster offset
   can be taken from there (this is what handle_dependencies will evolve
   into) or the request must just wait until the allocation has
   completed. Accessing the L2 is not valid in this case, it has
   outdated information.

2. Outside overlapping areas, check the clusters that can be written to
   as they are, with no COW involved.

3. If a COW is required, allocate new clusters

Changing the code to reflect this doesn't change the behaviour because
overlaps cannot exist for clusters that are kept in step 2. It does
however make it easier for later patches to work on clusters that belong
to an allocation that is still in flight.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
block/qcow2-cluster.c
block/qcow2.h