From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54538) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXajd-0001MU-CM for qemu-devel@nongnu.org; Fri, 26 Sep 2014 14:59:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XXajV-0002cP-Hi for qemu-devel@nongnu.org; Fri, 26 Sep 2014 14:59:17 -0400 Received: from mx1.redhat.com ([209.132.183.28]:2574) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XXajV-0002bE-9a for qemu-devel@nongnu.org; Fri, 26 Sep 2014 14:59:09 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s8QIx3RX024471 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Fri, 26 Sep 2014 14:59:03 -0400 From: Kevin Wolf Date: Fri, 26 Sep 2014 20:58:48 +0200 Message-Id: <1411757937-9087-3-git-send-email-kwolf@redhat.com> In-Reply-To: <1411757937-9087-1-git-send-email-kwolf@redhat.com> References: <1411757937-9087-1-git-send-email-kwolf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 02/11] blockdev: Disentangle BlockDriverState and DriveInfo creation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com From: Markus Armbruster blockdev_init() mixes up BlockDriverState and DriveInfo initialization Finish the BlockDriverState job before starting to mess with DriveInfo. Easier on the eyes. Signed-off-by: Markus Armbruster Reviewed-by: Max Reitz Reviewed-by: Beno=C3=AEt Canet Signed-off-by: Kevin Wolf --- blockdev.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/blockdev.c b/blockdev.c index b361fbb..5ec4635 100644 --- a/blockdev.c +++ b/blockdev.c @@ -301,6 +301,7 @@ static DriveInfo *blockdev_init(const char *file, QDi= ct *bs_opts, int ro =3D 0; int bdrv_flags =3D 0; int on_read_error, on_write_error; + BlockDriverState *bs; DriveInfo *dinfo; ThrottleConfig cfg; int snapshot =3D 0; @@ -456,26 +457,27 @@ static DriveInfo *blockdev_init(const char *file, Q= Dict *bs_opts, } =20 /* init */ - dinfo =3D g_malloc0(sizeof(*dinfo)); - dinfo->id =3D g_strdup(qemu_opts_id(opts)); - dinfo->bdrv =3D bdrv_new(dinfo->id, &error); - if (error) { - error_propagate(errp, error); - goto bdrv_new_err; + bs =3D bdrv_new(qemu_opts_id(opts), errp); + if (!bs) { + goto early_err; } - dinfo->bdrv->open_flags =3D snapshot ? BDRV_O_SNAPSHOT : 0; - dinfo->bdrv->read_only =3D ro; - dinfo->bdrv->detect_zeroes =3D detect_zeroes; - QTAILQ_INSERT_TAIL(&drives, dinfo, next); + bs->open_flags =3D snapshot ? BDRV_O_SNAPSHOT : 0; + bs->read_only =3D ro; + bs->detect_zeroes =3D detect_zeroes; =20 - bdrv_set_on_error(dinfo->bdrv, on_read_error, on_write_error); + bdrv_set_on_error(bs, on_read_error, on_write_error); =20 /* disk I/O throttling */ if (throttle_enabled(&cfg)) { - bdrv_io_limits_enable(dinfo->bdrv); - bdrv_set_io_limits(dinfo->bdrv, &cfg); + bdrv_io_limits_enable(bs); + bdrv_set_io_limits(bs, &cfg); } =20 + dinfo =3D g_malloc0(sizeof(*dinfo)); + dinfo->id =3D g_strdup(qemu_opts_id(opts)); + dinfo->bdrv =3D bs; + QTAILQ_INSERT_TAIL(&drives, dinfo, next); + if (!file || !*file) { if (has_driver_specific_opts) { file =3D NULL; @@ -502,7 +504,8 @@ static DriveInfo *blockdev_init(const char *file, QDi= ct *bs_opts, bdrv_flags |=3D ro ? 0 : BDRV_O_RDWR; =20 QINCREF(bs_opts); - ret =3D bdrv_open(&dinfo->bdrv, file, NULL, bs_opts, bdrv_flags, drv= , &error); + ret =3D bdrv_open(&bs, file, NULL, bs_opts, bdrv_flags, drv, &error)= ; + assert(bs =3D=3D dinfo->bdrv); =20 if (ret < 0) { error_setg(errp, "could not open disk image %s: %s", @@ -511,8 +514,9 @@ static DriveInfo *blockdev_init(const char *file, QDi= ct *bs_opts, goto err; } =20 - if (bdrv_key_required(dinfo->bdrv)) + if (bdrv_key_required(bs)) { autostart =3D 0; + } =20 QDECREF(bs_opts); qemu_opts_del(opts); @@ -520,9 +524,8 @@ static DriveInfo *blockdev_init(const char *file, QDi= ct *bs_opts, return dinfo; =20 err: - bdrv_unref(dinfo->bdrv); + bdrv_unref(bs); QTAILQ_REMOVE(&drives, dinfo, next); -bdrv_new_err: g_free(dinfo->id); g_free(dinfo); early_err: --=20 1.8.3.1