From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40430) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VuviA-0004V0-HT for qemu-devel@nongnu.org; Sun, 22 Dec 2013 21:57:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vuvi1-0008Ge-JZ for qemu-devel@nongnu.org; Sun, 22 Dec 2013 21:57:42 -0500 Received: from e23smtp03.au.ibm.com ([202.81.31.145]:39728) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vuvi0-0008GZ-RF for qemu-devel@nongnu.org; Sun, 22 Dec 2013 21:57:33 -0500 Received: from /spool/local by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 23 Dec 2013 12:57:28 +1000 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [9.190.235.152]) by d23dlp01.au.ibm.com (Postfix) with ESMTP id ED77C2CE8051 for ; Mon, 23 Dec 2013 13:57:24 +1100 (EST) Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id rBN2cm2L6816026 for ; Mon, 23 Dec 2013 13:38:49 +1100 Received: from d23av03.au.ibm.com (localhost [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id rBN2vNi7005174 for ; Mon, 23 Dec 2013 13:57:23 +1100 Message-ID: <52B7A697.40302@linux.vnet.ibm.com> Date: Mon, 23 Dec 2013 10:57:27 +0800 From: Wenchao Xia MIME-Version: 1.0 References: <1386244972-528-1-git-send-email-xiawenc@linux.vnet.ibm.com> <1386244972-528-5-git-send-email-xiawenc@linux.vnet.ibm.com> <20131220142034.GB9296@stefanha-thinkpad.redhat.com> In-Reply-To: <20131220142034.GB9296@stefanha-thinkpad.redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH V7 4/6] qcow2: cancel the modification on fail in qcow2_snapshot_create() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: kwolf@redhat.com, jcody@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com, mreitz@redhat.com 于 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 >> >> >