Il 11/04/2012 12:40, Kevin Wolf ha scritto:
> @@ -816,6 +816,8 @@ void bdrv_close(BlockDriverState *bs)
>          if (bs->job) {
>              block_job_cancel_sync(bs->job);
>          }
> +        bdrv_drain_all();

Actually the bdrv_drain_all needs to go first.

This is because block_job_cancel_sync guarantees to exit only after the
block job's own I/O has finished, *but* it needs to see all I/O from the
guest.

Paolo


Reply via email to