qcow2: Flush pending discards before allocating cluster
commitecbda7a22576591a84f44de1be0150faf6001f1c
authorKevin Wolf <kwolf@redhat.com>
Wed, 6 May 2015 11:21:51 +0000 (6 13:21 +0200)
committerKevin Wolf <kwolf@redhat.com>
Fri, 22 May 2015 15:08:00 +0000 (22 17:08 +0200)
treed01afef7f41119ede1366f027b0023c9a709d240
parent8b6db32a4ec47d1171ccfa21d557096b99f4eef0
qcow2: Flush pending discards before allocating cluster

Before a freed cluster can be reused, pending discards for this cluster
must be processed.

The original assumption was that this was not a problem because discards
are only cached during discard/write zeroes operations, which are
synchronous so that no concurrent write requests can cause cluster
allocations.

However, the discard/write zeroes operation itself can allocate a new L2
table (and it has to in order to put zero flags there), so make sure we
can cope with the situation.

This fixes https://bugs.launchpad.net/bugs/1349972.

Cc: qemu-stable@nongnu.org
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
block/qcow2-refcount.c