From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45848) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WMckL-0001bH-Ak for qemu-devel@nongnu.org; Sun, 09 Mar 2014 08:22:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WMckF-0001Br-J3 for qemu-devel@nongnu.org; Sun, 09 Mar 2014 08:22:25 -0400 Received: from lnantes-156-75-100-125.w80-12.abo.wanadoo.fr ([80.12.84.125]:55951 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WMckF-0001Bn-DH for qemu-devel@nongnu.org; Sun, 09 Mar 2014 08:22:19 -0400 Date: Sun, 9 Mar 2014 13:22:18 +0100 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140309122218.GE3307@irqsave.net> References: <1394232956-27852-1-git-send-email-mreitz@redhat.com> <1394232956-27852-12-git-send-email-mreitz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1394232956-27852-12-git-send-email-mreitz@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 11/12] block/qapi: Ignore filters on top for format name List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Max Reitz Cc: Kevin Wolf , =?iso-8859-1?Q?Beno=EEt?= Canet , qemu-devel@nongnu.org, Stefan Hajnoczi The Friday 07 Mar 2014 =E0 23:55:55 (+0100), Max Reitz wrote : > bdrv_query_image_info() currently deduces the image filename and the > format name from the top BDS. However, it is probably more reasonable t= o > ignore as many filters as possible on top of the BDS chain since those > neither change the type nor the filename of the underlying image. >=20 > Filters like quorum which have multiple underlying BDS should not be > removed, however, since the underlying BDS chains may lead to different > image formats and most certainly to different filenames. Therefore, onl= y > simple filters with a single underlying BDS may be skipped. >=20 > In addition, any "raw" BDS on top of such a simple filter should be > removed, since they have probably been automatically created by > bdrv_open() but basically function as a simple filter as well. >=20 > Signed-off-by: Max Reitz > --- > block/qapi.c | 18 ++++++++++++++++-- > 1 file changed, 16 insertions(+), 2 deletions(-) >=20 > diff --git a/block/qapi.c b/block/qapi.c > index 8f2b4db..84b3097 100644 > --- a/block/qapi.c > +++ b/block/qapi.c > @@ -171,11 +171,25 @@ void bdrv_query_image_info(BlockDriverState *bs, > int ret; > Error *err =3D NULL; > ImageInfo *info =3D g_new0(ImageInfo, 1); > + BlockDriverState *ubs; > =20 > bdrv_get_geometry(bs, &total_sectors); > =20 > - info->filename =3D g_strdup(bs->filename); > - info->format =3D g_strdup(bdrv_get_format_name(bs)); > + /* Remove the top layer of filters; that is, remove every "raw" BD= S on top > + * of a single-child filter and every single-child filter itself u= ntil a BDS > + * is encountered which cannot be removed through these rules */ > + ubs =3D bs; > + while ((ubs->drv && ubs->drv->is_filter && ubs->drv->has_single_ch= ild) || > + (ubs->drv && !strcmp(ubs->drv->format_name, "raw") && ubs->= file && > + ubs->file->drv && ubs->file->drv->is_filter && > + ubs->file->drv->has_single_child)) > + { > + ubs =3D ubs->file; > + } > + > + info->filename =3D g_strdup(ubs->filename); > + info->format =3D g_strdup(bdrv_get_format_name(ubs)); > + > info->virtual_size =3D total_sectors * 512; > info->actual_size =3D bdrv_get_allocated_file_size(bs); > info->has_actual_size =3D info->actual_size >=3D 0; > --=20 > 1.9.0 >=20 >=20 Reviewed-by: Benoit Canet