aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Lieven <pl@dlhnet.de>2013-02-18 13:48:31 +0100
committerMichael Roth <mdroth@linux.vnet.ibm.com>2013-04-02 10:05:31 -0500
commite6b795f34e2dfb440340d559c6813ce0febec937 (patch)
treec5c3ae8f4de5878e2a09f3413c5046164a8fc0b1
parent51968b8503a00b5128fb4e3ed14efb8dc69579ce (diff)
block: complete all IOs before .bdrv_truncate
bdrv_truncate() invalidates the bdrv_check_request() result for in-flight requests, so there should better be none. Cc: qemu-stable@nongnu.org Signed-off-by: Peter Lieven <pl@kamp.de> Reported-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> (cherry picked from commit 9a665b2b8640e464f0a778216fc2dca8d02acf33) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rw-r--r--block.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/block.c b/block.c
index 50dab8e595..11f162bb2e 100644
--- a/block.c
+++ b/block.c
@@ -2427,6 +2427,10 @@ int bdrv_truncate(BlockDriverState *bs, int64_t offset)
return -EACCES;
if (bdrv_in_use(bs))
return -EBUSY;
+
+ /* There better not be any in-flight IOs when we truncate the device. */
+ bdrv_drain_all();
+
ret = drv->bdrv_truncate(bs, offset);
if (ret == 0) {
ret = refresh_total_sectors(bs, offset >> BDRV_SECTOR_BITS);