From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:39796) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1Cu8-00032r-L8 for qemu-devel@nongnu.org; Tue, 14 Aug 2012 04:55:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T1Cu0-0000qB-DT for qemu-devel@nongnu.org; Tue, 14 Aug 2012 04:55:12 -0400 Received: from e23smtp03.au.ibm.com ([202.81.31.145]:39477) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1Ctz-0000jQ-Rf for qemu-devel@nongnu.org; Tue, 14 Aug 2012 04:55:04 -0400 Received: from /spool/local by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 14 Aug 2012 18:54:13 +1000 Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay03.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q7E8stLd18481214 for ; Tue, 14 Aug 2012 18:54:55 +1000 Received: from d23av03.au.ibm.com (loopback [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q7E8ssX6017322 for ; Tue, 14 Aug 2012 18:54:55 +1000 Message-ID: <502A125C.3070704@linux.vnet.ibm.com> Date: Tue, 14 Aug 2012 14:24:52 +0530 From: Supriya Kannery MIME-Version: 1.0 References: <20120730213409.21536.7589.sendpatchset@skannery.in.ibm.com> <20120730213422.21536.81486.sendpatchset@skannery.in.ibm.com> <20120802171941.3c0027f1@doriath.home> In-Reply-To: <20120802171941.3c0027f1@doriath.home> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [v2 Patch 1/9]block: Framework for reopening image files safely Reply-To: supriyak@linux.vnet.ibm.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: Kevin Wolf , Shrinidhi Joshi , Stefan Hajnoczi , Jeff Cody , qemu-devel@nongnu.org, Christoph Hellwig On 08/03/2012 01:49 AM, Luiz Capitulino wrote: > On Tue, 31 Jul 2012 03:04:22 +0530 > Supriya Kannery wrote: > >> + >> +void bdrv_reopen_commit(BlockDriverState *bs, BDRVReopenState *rs) >> +{ >> + BlockDriver *drv = bs->drv; >> + >> + drv->bdrv_reopen_commit(bs, rs); >> +} >> + >> +void bdrv_reopen_abort(BlockDriverState *bs, BDRVReopenState *rs) >> +{ >> + BlockDriver *drv = bs->drv; >> + >> + drv->bdrv_reopen_abort(bs, rs); >> +} >> + >> +void bdrv_reopen(BlockDriverState *bs, int bdrv_flags, Error **errp) >> +{ >> + BlockDriver *drv = bs->drv; >> + int ret = 0; >> + BDRVReopenState *reopen_state = NULL; >> + >> + /* Quiesce IO for the given block device */ >> + bdrv_drain_all(); >> + ret = bdrv_flush(bs); >> + if (ret != 0) { >> + error_set(errp, QERR_IO_ERROR); >> + return; >> + } >> + >> + /* Use driver specific reopen() if available */ >> + if (drv->bdrv_reopen_prepare) { >> + ret = bdrv_reopen_prepare(bs,&reopen_state, bdrv_flags); >> + if (ret< 0) { >> + bdrv_reopen_abort(bs, reopen_state); > > Why do you have to call bdrv_reopen_abort()? I'd expect bdrv_reopen_prepare() > (to be able) to undo anything it has done. > Having separate abort function avoids cluttering of reopen- prepare(). We wanted to logically separate out preparation, commit and abort. Same format is followed in implementations at block driver level as well. -thanks, Supriya