diff options
author | Kevin Wolf <kwolf@redhat.com> | 2011-11-22 16:50:27 +0100 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2011-11-23 17:04:03 +0100 |
commit | 2bc3166c22aeeb5cd7b8f21104f4744f08c7a288 (patch) | |
tree | 6fb1a78297e1dc219b2a83da90cf00770bb763bd /block/vmdk.c | |
parent | fc9d106c8dfe1c4afe0e127dfcd2764e63f0efb0 (diff) |
vmdk: Add migration blocker
VMDK caches L2 tables. For migration to work, they would have to be
invalidated. Block migration for now.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block/vmdk.c')
-rw-r--r-- | block/vmdk.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/block/vmdk.c b/block/vmdk.c index 96f7d5d90f..f5441591d7 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -26,6 +26,7 @@ #include "qemu-common.h" #include "block_int.h" #include "module.h" +#include "migration.h" #include <zlib.h> #define VMDK3_MAGIC (('C' << 24) | ('O' << 16) | ('W' << 8) | 'D') @@ -97,6 +98,7 @@ typedef struct BDRVVmdkState { int num_extents; /* Extent array with num_extents entries, ascend ordered by address */ VmdkExtent *extents; + Error *migration_blocker; } BDRVVmdkState; typedef struct VmdkMetaData { @@ -659,7 +661,14 @@ static int vmdk_open(BlockDriverState *bs, int flags) } s->parent_cid = vmdk_read_cid(bs, 1); qemu_co_mutex_init(&s->lock); - return ret; + + /* Disable migration when VMDK images are used */ + error_set(&s->migration_blocker, + QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED, + "vmdk", bs->device_name, "live migration"); + migrate_add_blocker(s->migration_blocker); + + return 0; fail: vmdk_free_extents(bs); @@ -1504,7 +1513,12 @@ exit: static void vmdk_close(BlockDriverState *bs) { + BDRVVmdkState *s = bs->opaque; + vmdk_free_extents(bs); + + migrate_del_blocker(s->migration_blocker); + error_free(s->migration_blocker); } static coroutine_fn int vmdk_co_flush(BlockDriverState *bs) |