From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:35435) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SeohC-0004zp-DB for qemu-devel@nongnu.org; Wed, 13 Jun 2012 10:37:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Seoh6-0001wt-1t for qemu-devel@nongnu.org; Wed, 13 Jun 2012 10:37:17 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:36734) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Seoh5-0001rp-PY for qemu-devel@nongnu.org; Wed, 13 Jun 2012 10:37:11 -0400 Received: by mail-pb0-f45.google.com with SMTP id ro12so2480408pbb.4 for ; Wed, 13 Jun 2012 07:37:10 -0700 (PDT) Sender: Dong Xu Wang From: Dong Xu Wang Date: Wed, 13 Jun 2012 22:36:28 +0800 Message-Id: <1339598189-17933-5-git-send-email-wdongxu@linux.vnet.ibm.com> In-Reply-To: <1339598189-17933-1-git-send-email-wdongxu@linux.vnet.ibm.com> References: <1339598189-17933-1-git-send-email-wdongxu@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH 5/6] add-cow: support snapshot_blkdev List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, Dong Xu Wang add-cow will let raw file support snapshot_blkdev indirectly. Signed-off-by: Dong Xu Wang --- blockdev.c | 31 +++++++++++++++++++++++++++---- docs/live-block-ops.txt | 10 +++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/blockdev.c b/blockdev.c index 622ecba..2d89e5e 100644 --- a/blockdev.c +++ b/blockdev.c @@ -783,15 +783,38 @@ void qmp_transaction(BlockdevActionList *dev_list, Error **errp) /* create new image w/backing file */ if (mode != NEW_IMAGE_MODE_EXISTING) { - ret = bdrv_img_create(new_image_file, format, + if (strcmp(format, "add-cow")) { + ret = bdrv_img_create(new_image_file, format, states->old_bs->filename, states->old_bs->drv->format_name, NULL, -1, flags); - if (ret) { - error_set(errp, QERR_OPEN_FILE_FAILED, new_image_file); - goto delete_and_fail; + } else { + char image_file[1024]; + char option[1024]; + uint64_t size; + + bdrv_get_geometry(states->old_bs, &size); + size *= BDRV_SECTOR_SIZE; + + sprintf(image_file, "%s.raw", new_image_file); + + ret = bdrv_img_create(image_file, "raw", NULL, + NULL, NULL, size, flags); + if (ret) { + error_set(errp, QERR_UNDEFINED_ERROR); + return; + } + sprintf(option, "image_file=%s.raw", new_image_file); + ret = bdrv_img_create(new_image_file, format, + states->old_bs->filename, + states->old_bs->drv->format_name, + option, -1, flags); } } + if (ret) { + error_set(errp, QERR_OPEN_FILE_FAILED, new_image_file); + goto delete_and_fail; + } /* We will manually add the backing_hd field to the bs later */ states->new_bs = bdrv_new(""); diff --git a/docs/live-block-ops.txt b/docs/live-block-ops.txt index a257087..c97344b 100644 --- a/docs/live-block-ops.txt +++ b/docs/live-block-ops.txt @@ -2,7 +2,8 @@ LIVE BLOCK OPERATIONS ===================== High level description of live block operations. Note these are not -supported for use with the raw format at the moment. +supported for use with the raw format at the moment, but we can use +add-cow as metadata to suport raw format. Snapshot live merge =================== @@ -56,3 +57,10 @@ into that image. Example: (qemu) block_stream ide0-hd0 + +Raw is not supported, but we can use add-cow in the 1st step: + +(qemu) snapshot_blkdev ide0-hd0 /new-path/disk.img add-cow + +It will create a raw file named disk.img.raw, with the same virtual size of +ide0-hd0 first, and then create disk.img. -- 1.7.1