mirror of https://gitlab.com/qemu-project/qemu
qcow2: fix flushing after dirty bitmap metadata writes
update_header_sync itself does not need to flush the caches to disk. The only paths that allocate clusters are: - bitmap_list_store with in_place=false, called by update_ext_header_and_dir - store_bitmap_data, called by store_bitmap - store_bitmap, called by qcow2_store_persistent_dirty_bitmaps and followed by update_ext_header_and_dir So in the end the central place where we need to flush the caches is update_ext_header_and_dir. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
8b220eb7c8
commit
1a0c2bfb03
|
@ -110,7 +110,7 @@ static int update_header_sync(BlockDriverState *bs)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return bdrv_flush(bs);
|
return bdrv_flush(bs->file->bs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void bitmap_table_to_be(uint64_t *bitmap_table, size_t size)
|
static inline void bitmap_table_to_be(uint64_t *bitmap_table, size_t size)
|
||||||
|
@ -882,7 +882,7 @@ static int update_ext_header_and_dir(BlockDriverState *bs,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_flush(bs->file->bs);
|
ret = qcow2_flush_caches(bs);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue