These patches are based off Supriya Kannery's original bdrv_reopen() patches as part of the hostcache series.
This provides support for safe reopen of a single image, or transactional reopening of multiple images atomically. Changes from v1 -> v2: Patch 01/16: None Patch 02/16: New patch Patch 03/16: [Kevin] Use QSIMPLEQ_FOREACH_SAFE [Kevin] Use BDRV_O_ALLOW_RDWR flag instead of keep_read_only [Kevin] Preserve error on failure of bdrv_flush() [Kevin] bdrv_reopen_prepare() no longer calls bdrv_reopen_abort() [Kevin] Directly embed BDRVReopenState field in BlockReopenQueueEntry, rather than by reference [Jeff] Add BlockReopenQueue field to the BDRVReopenState struct Feedback not incorporated: -------------------------- [Kevin] Sharing 3 of the BDS flag setting lines with bdrv_open(). I didn't see a great way of doing this. Patch 04/16: New patch, aio init code motion Patch 05/16: [Kevin] New patch, raw_parse_flags code motion Patch 06/16: [Kevin] New patch. Do not parse BDRV_O_CACHE_WB in raw_posix/raw_win32 Patch 07/16: [Kevin] New patch. Code motion - move aligned_buf allocation to helper function. Patch 08/16: [Kevin] See patches 4-7 [Kevin] Init AIO, if appropriate [Kevin] Fallback to qemu_open, if fcntl fails [Eric] Remove spurious mode in qemu_open() [Corey] Use qemu_close() instead of qemu_open() Feedback not incorporated: -------------------------- Moving from fcntl + fcntl_setfl to qemu_dup_flags or equivalent. Ideally I think a separate patch series creating a wrapper function for fcntl, and then update this code with the new wrapper. Patch 09/16: None Patch 10/16: None Patch 11/16: None Patch 12/16: None Patch 13/16: New patch, VMDK driver for reopen Patch 14/16: New patch, raw-win32 driver for reopen. Note, not necessarily safe. If anyone knows a better way to do it under win32, without potentially having to close the handle first, please let me know. Patch 15/16: New patch, move bdrv_commit to use bdrv_reopen() Patch 16/16: [Kevin] Get rid of keep_read_only flag completely Jeff Cody (16): block: correctly set the keep_read_only flag block: make bdrv_set_enable_write_cache() modify open_flags block: Framework for reopening files safely block: move aio initialization into a helper function block: move open flag parsing in raw block drivers to helper functions block: do not parse BDRV_O_CACHE_WB in raw block drivers block: move allocating aligned_buf into a helper function in raw_posix.c block: raw-posix image file reopen block: raw image file reopen block: qed image file reopen block: qcow2 image file reopen block: qcow image file reopen block: vmdk image file reopen block: raw-win32 driver reopen support block: convert bdrv_commit() to use bdrv_reopen() block: remove keep_read_only flag from BlockDriverState struct block.c | 292 ++++++++++++++++++++++++++++++++++++++++++++---------- block.h | 24 +++++ block/qcow.c | 23 +++++ block/qcow2.c | 22 ++++ block/qed.c | 20 ++++ block/raw-posix.c | 243 +++++++++++++++++++++++++++++++++++++-------- block/raw-win32.c | 144 +++++++++++++++++++++++---- block/raw.c | 22 ++++ block/vmdk.c | 47 +++++++++ block_int.h | 8 +- qemu-common.h | 1 + 11 files changed, 732 insertions(+), 114 deletions(-) -- 1.7.11.4