From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:48269) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UVh1t-0005zi-UE for qemu-devel@nongnu.org; Fri, 26 Apr 2013 07:41:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UVh1o-0008MA-TR for qemu-devel@nongnu.org; Fri, 26 Apr 2013 07:41:29 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36669) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UVh1o-0008Lv-Jh for qemu-devel@nongnu.org; Fri, 26 Apr 2013 07:41:24 -0400 Date: Fri, 26 Apr 2013 13:41:14 +0200 From: Stefan Hajnoczi Message-ID: <20130426114114.GC26175@stefanha-thinkpad.redhat.com> References: <1366822079-6582-1-git-send-email-namei.unix@gmail.com> <1366894179-9350-1-git-send-email-namei.unix@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1366894179-9350-1-git-send-email-namei.unix@gmail.com> Subject: Re: [Qemu-devel] [PATCH v4] sheepdog: fix loadvm operation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Liu Yuan Cc: Kevin Wolf , sheepdog@lists.wpkg.org, qemu-devel@nongnu.org, MORITA Kazutaka On Thu, Apr 25, 2013 at 08:49:39PM +0800, Liu Yuan wrote: > From: Liu Yuan > > Currently the 'loadvm' opertaion works as following: > 1. switch to the snapshot > 2. mark current working VDI as a snapshot > 3. rely on sd_create_branch to create a new working VDI based on the snapshot > > This works not the same as other format as QCOW2. For e.g, > > qemu > savevm # get a live snapshot snap1 > qemu > savevm # snap2 > qemu > loadvm 1 # This will steally create snap3 of the working VDI > > Which will result in following snapshot chain: > > base <-- snap1 <-- snap2 <-- snap3 > ^ > | > working VDI > > snap3 was unnecessarily created and might be annoying users. > > This patch discard the unnecessary 'snap3' creation. and implement > rollback(loadvm) operation to the specified snapshot by > 1. switch to the snapshot > 2. delete working VDI > 3. rely on sd_create_branch to create a new working VDI based on the snapshot > > The snapshot chain for above example will be: > > base <-- snap1 <-- snap2 > ^ > | > working VDI > > Cc: qemu-devel@nongnu.org > Cc: MORITA Kazutaka > Cc: Kevin Wolf > Cc: Stefan Hajnoczi > Signed-off-by: Liu Yuan > --- > v4: > - print an error message when NO_VDI found > > v3: > - let boot from snapshot behave like 'loadvm' > > v2: > - use do_req() because sd_delete isn't in coroutine > - don't break old behavior if we boot up on the snapshot by using s->reverted > to indicate if we delete working VDI successfully > - fix a subtle case that sd_create_branch() isn't called yet while another > 'loadvm' is executed > > block/sheepdog.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 53 insertions(+), 1 deletion(-) Thanks, applied to my block tree: https://github.com/stefanha/qemu/commits/block Stefan