From patchwork Wed Apr 18 08:18:17 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Wang X-Patchwork-Id: 153434 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id B5A90B6EF1 for ; Wed, 18 Apr 2012 18:19:27 +1000 (EST) Received: from localhost ([::1]:54371 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SKQ6n-0006My-Ht for incoming@patchwork.ozlabs.org; Wed, 18 Apr 2012 04:19:25 -0400 Received: from eggs.gnu.org ([208.118.235.92]:53644) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SKQ6X-00063U-Qx for qemu-devel@nongnu.org; Wed, 18 Apr 2012 04:19:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SKQ6Q-000181-0I for qemu-devel@nongnu.org; Wed, 18 Apr 2012 04:19:09 -0400 Received: from e28smtp02.in.ibm.com ([122.248.162.2]:40325) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SKQ6O-000170-EC for qemu-devel@nongnu.org; Wed, 18 Apr 2012 04:19:01 -0400 Received: from /spool/local by e28smtp02.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 18 Apr 2012 13:48:51 +0530 Received: from d28relay02.in.ibm.com (9.184.220.59) by e28smtp02.in.ibm.com (192.168.1.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 18 Apr 2012 13:48:48 +0530 Received: from d28av03.in.ibm.com (d28av03.in.ibm.com [9.184.220.65]) by d28relay02.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q3I8Il2c3461328 for ; Wed, 18 Apr 2012 13:48:47 +0530 Received: from d28av03.in.ibm.com (loopback [127.0.0.1]) by d28av03.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q3IDm1Xk020235 for ; Wed, 18 Apr 2012 23:48:01 +1000 Received: from wdongxu-T410.cn.ibm.com ([9.115.118.147]) by d28av03.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q3IDlqgK019679; Wed, 18 Apr 2012 23:48:00 +1000 From: Dong Xu Wang To: qemu-devel@nongnu.org Date: Wed, 18 Apr 2012 16:18:17 +0800 Message-Id: <1334737097-20680-2-git-send-email-wdongxu@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1334737097-20680-1-git-send-email-wdongxu@linux.vnet.ibm.com> References: <1334737097-20680-1-git-send-email-wdongxu@linux.vnet.ibm.com> x-cbid: 12041808-5816-0000-0000-0000022E90E4 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 122.248.162.2 Cc: Kevin Wolf , Marcelo Tosatti , Dong Xu Wang , Stefan Hajnoczi Subject: [Qemu-devel] [PATCH 2/2 v8] add-cow: support snapshot_blkdev X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Dong Xu Wang Raw file format does not support snapshot_blkdev command, we can use add-cow to do this. CC: Marcelo Tosatti CC: Kevin Wolf CC: Stefan Hajnoczi 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 0c2440e..0332b49 100644 --- a/blockdev.c +++ b/blockdev.c @@ -780,15 +780,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.