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 form v2 -> v3: Patch 03/19: [Paolo] BlockReopenQueue is now only passed to the _prepare functions. Patch 06/19: [Kevin, Paolo] New. Purge imporper usage of BDRV_O_CACHE_WB. Patch 07/19: [Paolo] New. Use BDRV_O_NOCACHE instead of align_buf. Patch 08/19: [Paolo] New. Purge aligned_buf and aligned_buf_size. Patch 09/19: [Paolo] reopen no longer uses aligned_buf. BlockReopenQueue is now passed only to the _prepare() functions. Patch 10/19 - 14/19: [Paolo] Removed unneeded _commit() and _abort() stubs Patch 15/19: [Paolo] BlockReopenQueue is now only passed to the _prepare functions. Patch 16/19: [Paolo] New. Support new image format. Patch 17/19: [Paolo] New. Support new image format. 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 (19): 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 block drivers block: use BDRV_O_NOCACHE instead of s->aligned_buf in raw-posix.c block: purge s->aligned_buf and s->aligned_buf_size from 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: vdi image file reopen block: vpc image file reopen block: convert bdrv_commit() to use bdrv_reopen() block: remove keep_read_only flag from BlockDriverState struct block.c | 299 +++++++++++++++++++++++++++++++++++++++++++++--------- block.h | 18 ++++ block/iscsi.c | 4 - block/qcow.c | 10 ++ block/qcow2.c | 10 ++ block/qed.c | 9 ++ block/raw-posix.c | 212 ++++++++++++++++++++++++++++---------- block/raw-win32.c | 145 ++++++++++++++++++++++---- block/raw.c | 10 ++ block/rbd.c | 6 -- block/sheepdog.c | 14 ++- block/vdi.c | 7 ++ block/vmdk.c | 35 +++++++ block/vpc.c | 7 ++ block_int.h | 9 +- qemu-common.h | 1 + 16 files changed, 652 insertions(+), 144 deletions(-) -- 1.7.11.4