diff --git a/block.c b/block.c
index 50dab8e..d8880e3 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 should be better no IOs in flight 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);
