diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2018-03-01 17:36:15 +0100 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2018-03-09 15:17:47 +0100 |
commit | 1a0c2bfb039c371fe6628d58335705cc7011cecb (patch) | |
tree | b5466da7f58effe30e923b5d8eadf6a0e9b8e3c0 | |
parent | 8b220eb7c8a1b1d5bc2522f394e16456bf20c91f (diff) | |
download | qemu-1a0c2bfb039c371fe6628d58335705cc7011cecb.zip qemu-1a0c2bfb039c371fe6628d58335705cc7011cecb.tar.gz qemu-1a0c2bfb039c371fe6628d58335705cc7011cecb.tar.bz2 |
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>
-rw-r--r-- | block/qcow2-bitmap.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index 5127276..3010adb 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -110,7 +110,7 @@ static int update_header_sync(BlockDriverState *bs) 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) @@ -882,7 +882,7 @@ static int update_ext_header_and_dir(BlockDriverState *bs, return ret; } - ret = bdrv_flush(bs->file->bs); + ret = qcow2_flush_caches(bs); if (ret < 0) { goto fail; } |