From: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: kwolf@redhat.com, jcody@redhat.com, qemu-devel@nongnu.org,
stefanha@redhat.com, mreitz@redhat.com
Subject: Re: [Qemu-devel] [PATCH V7 4/6] qcow2: cancel the modification on fail in qcow2_snapshot_create()
Date: Mon, 23 Dec 2013 14:12:56 +0800 [thread overview]
Message-ID: <52B7D468.4060307@linux.vnet.ibm.com> (raw)
In-Reply-To: <52B7A697.40302@linux.vnet.ibm.com>
于 2013/12/23 10:57, Wenchao Xia 写道:
> 于 2013/12/20 22:20, Stefan Hajnoczi 写道:
>> On Thu, Dec 05, 2013 at 08:02:50PM +0800, Wenchao Xia wrote:
>>> +restore_refcount:
>>> + if (qcow2_update_snapshot_refcount(bs, s->l1_table_offset,
>>> s->l1_size, -1)
>>> + < 0 && errp) {
>>> + /* Nothing can be done now, need image check later */
>>> + error_setg(&err, "%s\nqcow2: Error in restoring refcount in
>>> snapshot",
>>> + error_get_pretty(*errp));
>>> + error_free(*errp);
>>> + *errp = NULL;
>>> + error_propagate(errp, err);
>>> + }
>>
>> We get here if writing the new snapshot list failed. If
>> qcow2_update_snapshot_refcount(..., -1) also fails I think we should
>> skip qcow2_free_clusters() below. We don't know the exact state of the
>> disk image anymore - better to leak clusters than to have a dangling
>> reference.
>>
>
> Make sense, dangling point should be avoid in any case, will fix,
> Thanks for reviewing!
>
>>> +dealloc_cluster:
>>> + qcow2_free_clusters(bs, sn->l1_table_offset,
>>> + sn->l1_size * sizeof(uint64_t),
>>> + QCOW2_DISCARD_ALWAYS);
>>> +
>>> fail:
>>> g_free(sn->id_str);
>>> g_free(sn->name);
>>> --
>>> 1.7.1
>>>
>>>
>>
>
>
Hi, Stefan
I have reconsidered the roll back process, there is many case we
should take care, so it is better to summarize a general rule to do such
cancel operations. I suggest: do a series of roll back operations,
when one fail, skip following roll back operation. For snapshot create,
the create action is:
allocate new L1 -> refcount+1 -> allocate sn_list -> update header
The mirrored rollback action can be:
deallocate L1 <- refcount-1 <- deallocate sn_list <- restore header
When fail happens in rollback action, simply stop following ones.
If you agree, I'd like to reorganize the patch as above.
next prev parent reply other threads:[~2013-12-23 6:13 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-05 12:02 [Qemu-devel] [PATCH V7 0/6] qcow2: rollback the modification on fail in snapshot creation Wenchao Xia
2013-12-05 12:02 ` [Qemu-devel] [PATCH V7 1/6] snapshot: add parameter *errp in snapshot create Wenchao Xia
2013-12-20 14:26 ` Stefan Hajnoczi
2013-12-05 12:02 ` [Qemu-devel] [PATCH V7 2/6] qcow2: add error message in qcow2_write_snapshots() Wenchao Xia
2013-12-20 13:48 ` Stefan Hajnoczi
2013-12-05 12:02 ` [Qemu-devel] [PATCH V7 3/6] qcow2: do not free clusters when fail in header update in qcow2_write_snapshots Wenchao Xia
2013-12-05 12:02 ` [Qemu-devel] [PATCH V7 4/6] qcow2: cancel the modification on fail in qcow2_snapshot_create() Wenchao Xia
2013-12-20 14:20 ` Stefan Hajnoczi
2013-12-23 2:57 ` Wenchao Xia
2013-12-23 6:12 ` Wenchao Xia [this message]
2014-01-02 3:42 ` Stefan Hajnoczi
2013-12-05 12:02 ` [Qemu-devel] [PATCH V7 5/6] blkdebug: add debug events for snapshot Wenchao Xia
2013-12-05 12:02 ` [Qemu-devel] [PATCH V7 6/6] qemu-iotests: add test for qcow2 snapshot Wenchao Xia
2013-12-09 3:41 ` [Qemu-devel] [PATCH V7 0/6] qcow2: rollback the modification on fail in snapshot creation Wenchao Xia
2013-12-13 2:15 ` Wenchao Xia
2013-12-18 2:13 ` Wenchao Xia
2013-12-18 13:26 ` Stefan Hajnoczi
2013-12-20 14:27 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52B7D468.4060307@linux.vnet.ibm.com \
--to=xiawenc@linux.vnet.ibm.com \
--cc=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.