From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35936) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1adtsz-00012S-Dk for qemu-devel@nongnu.org; Thu, 10 Mar 2016 01:15:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1adtsw-0007CC-7i for qemu-devel@nongnu.org; Thu, 10 Mar 2016 01:15:49 -0500 Received: from mail.ispras.ru ([83.149.199.45]:41742) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1adtsv-0007C3-W1 for qemu-devel@nongnu.org; Thu, 10 Mar 2016 01:15:46 -0500 From: "Pavel Dovgalyuk" References: <20160301110732.10104.2019.stgit@PASHA-ISP> <20160301110803.10104.77305.stgit@PASHA-ISP> <20160309114321.GE5205@noname.redhat.com> In-Reply-To: <20160309114321.GE5205@noname.redhat.com> Date: Thu, 10 Mar 2016 09:15:36 +0300 Message-ID: <000301d17a94$438c1f20$caa45d60$@ru> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Language: ru Subject: Re: [Qemu-devel] [PATCH v3 5/5] replay: introduce block devices record/replay List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: 'Kevin Wolf' , 'Pavel Dovgalyuk' Cc: edgar.iglesias@xilinx.com, peter.maydell@linaro.org, igor.rubinov@gmail.com, mark.burton@greensocs.com, real@ispras.ru, hines@cert.org, qemu-devel@nongnu.org, maria.klimushenkova@ispras.ru, stefanha@redhat.com, pbonzini@redhat.com, batuzovk@ispras.ru, alex.bennee@linaro.org, fred.konrad@greensocs.com > From: Kevin Wolf [mailto:kwolf@redhat.com] > Am 01.03.2016 um 12:08 hat Pavel Dovgalyuk geschrieben: > > This patch introduces block driver that implement recording > > and replaying of block devices' operations. > > All block completion operations are added to the queue. > > Queue is flushed at checkpoints and information about processed requests > > is recorded to the log. In replay phase the queue is matched with > > events read from the log. Therefore block devices requests are processed > > deterministically. > > > > Signed-off-by: Pavel Dovgalyuk > > I like this new version much better than the old one. :-) Thanks for reviewing! > > +static int blkreplay_open(BlockDriverState *bs, QDict *options, int flags, > > + Error **errp) > > +{ > > + Error *local_err = NULL; > > + int ret; > > + > > + /* Open the image file */ > > + bs->file = bdrv_open_child(NULL, options, "image", > > + bs, &child_file, false, &local_err); > > + if (local_err) { > > + ret = -EINVAL; > > + error_propagate(errp, local_err); > > + goto fail; > > + } > > + > > + ret = 0; > > +fail: > > + if (ret < 0) { > > + bdrv_unref_child(bs, bs->file); > > This is unnecessary because in error cases, bdrv_open_child() returns > NULL. On the other hand, bdrv_unref_child() accepts a NULL child and > just doesn't do anything then, so it's harmless. Right, but this may be useful in case of future changes (if something else will be initialized here). Pavel Dovgalyuk