diff mbox

block: vhdx - add migration blocker

Message ID 29665682371164fd1e375842f5824b1de5648dde.1380643069.git.jcody@redhat.com
State New
Headers show

Commit Message

Jeff Cody Oct. 1, 2013, 3:59 p.m. UTC
This blocks migration for VHDX image files, until the
functionality can be supported.

Signed-off-by: Jeff Cody <jcody@redhat.com>
---
 block/vhdx.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Stefan Hajnoczi Oct. 2, 2013, 1:25 p.m. UTC | #1
On Tue, Oct 01, 2013 at 11:59:20AM -0400, Jeff Cody wrote:
> This blocks migration for VHDX image files, until the
> functionality can be supported.
> 
> Signed-off-by: Jeff Cody <jcody@redhat.com>
> ---
>  block/vhdx.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)

Strictly speaking live migration is safe since the format is read-only.
The source machine will never write to the image, we don't need to worry
about cache consistency.

But given that your log reply and write patches are quite far along,
let's just merge this now.  We'll need it soon.

Thanks, applied to my block tree:
https://github.com/stefanha/qemu/commits/block

Stefan
diff mbox

Patch

diff --git a/block/vhdx.c b/block/vhdx.c
index b8aa49c..6cb0412 100644
--- a/block/vhdx.c
+++ b/block/vhdx.c
@@ -20,6 +20,7 @@ 
 #include "qemu/module.h"
 #include "qemu/crc32c.h"
 #include "block/vhdx.h"
+#include "migration/migration.h"
 
 
 /* Several metadata and region table data entries are identified by
@@ -159,6 +160,7 @@  typedef struct BDRVVHDXState {
     VHDXParentLocatorHeader parent_header;
     VHDXParentLocatorEntry *parent_entries;
 
+    Error *migration_blocker;
 } BDRVVHDXState;
 
 uint32_t vhdx_checksum_calc(uint32_t crc, uint8_t *buf, size_t size,
@@ -806,6 +808,12 @@  static int vhdx_open(BlockDriverState *bs, QDict *options, int flags,
 
     /* TODO: differencing files, write */
 
+    /* Disable migration when VHDX images are used */
+    error_set(&s->migration_blocker,
+            QERR_BLOCK_FORMAT_FEATURE_NOT_SUPPORTED,
+            "vhdx", bs->device_name, "live migration");
+    migrate_add_blocker(s->migration_blocker);
+
     return 0;
 fail:
     qemu_vfree(s->headers[0]);
@@ -952,6 +960,8 @@  static void vhdx_close(BlockDriverState *bs)
     qemu_vfree(s->headers[1]);
     qemu_vfree(s->bat);
     qemu_vfree(s->parent_entries);
+    migrate_del_blocker(s->migration_blocker);
+    error_free(s->migration_blocker);
 }
 
 static BlockDriver bdrv_vhdx = {