On Thu, Apr 25, 2013 at 08:49:39PM +0800, Liu Yuan wrote: > From: Liu Yuan <tailai...@taobao.com> > > 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 <morita.kazut...@lab.ntt.co.jp> > Cc: Kevin Wolf <kw...@redhat.com> > Cc: Stefan Hajnoczi <stefa...@redhat.com> > Signed-off-by: Liu Yuan <tailai...@taobao.com> > --- > 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