Am 18.09.2012 20:53, schrieb Jeff Cody: > This is based on Supriya Kannery's bdrv_reopen() patch series. > > This provides a transactional method to reopen multiple > images files safely. > > Image files are queue for reopen via bdrv_reopen_queue(), and the > reopen occurs when bdrv_reopen_multiple() is called. Changes are > staged in bdrv_reopen_prepare() and in the equivalent driver level > functions. If any of the staged images fails a prepare, then all > of the images left untouched, and the staged changes for each image > abandoned. > > Block drivers are passed a reopen state structure, that contains: > * BDS to reopen > * flags for the reopen > * opaque pointer for any driver-specific data that needs to be > persistent from _prepare to _commit/_abort > * reopen queue pointer, if the driver needs to queue additional > BDS for a reopen > > Signed-off-by: Jeff Cody <jc...@redhat.com>
> diff --git a/block.h b/block.h > index 4d919c2..b1095d8 100644 > --- a/block.h > +++ b/block.h > @@ -97,6 +97,15 @@ typedef enum { > BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP > } BlockQMPEventAction; > > +typedef QSIMPLEQ_HEAD(BlockReopenQueue, BlockReopenQueueEntry) > BlockReopenQueue; > + > +typedef struct BDRVReopenState { > + BlockDriverState *bs; > + int flags; > + void *opaque; > +} BDRVReopenState; Doesn't compile, it should be typedefed only once: In file included from monitor.h:8, from qemu-timer.c:27: block.h:106: Fehler: Redefinition des typedef »BDRVReopenState« qemu-common.h:248: Anmerkung: Vorherige Deklaration von »BDRVReopenState« war hier > --- a/qemu-common.h > +++ b/qemu-common.h > @@ -245,6 +245,7 @@ typedef struct NICInfo NICInfo; > typedef struct HCIInfo HCIInfo; > typedef struct AudioState AudioState; > typedef struct BlockDriverState BlockDriverState; > +typedef struct BDRVReopenState BDRVReopenState; > typedef struct DriveInfo DriveInfo; > typedef struct DisplayState DisplayState; > typedef struct DisplayChangeListener DisplayChangeListener; Kevin