From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55190) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WLEYh-0000nr-MI for qemu-devel@nongnu.org; Wed, 05 Mar 2014 11:20:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WLEYb-0004fM-ED for qemu-devel@nongnu.org; Wed, 05 Mar 2014 11:20:39 -0500 Received: from lnantes-156-75-100-125.w80-12.abo.wanadoo.fr ([80.12.84.125]:55746 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WLEYb-0004f4-8A for qemu-devel@nongnu.org; Wed, 05 Mar 2014 11:20:33 -0500 Date: Wed, 5 Mar 2014 17:20:33 +0100 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140305162032.GK1709@irqsave.net> References: <1393860533-2063-1-git-send-email-mreitz@redhat.com> <1393860533-2063-10-git-send-email-mreitz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1393860533-2063-10-git-send-email-mreitz@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 09/10] 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 , qemu-devel@nongnu.org, Stefan Hajnoczi The Monday 03 Mar 2014 =E0 16:28:52 (+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 | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) >=20 > diff --git a/block/qapi.c b/block/qapi.c > index 8f2b4db..c4ddced 100644 > --- a/block/qapi.c > +++ b/block/qapi.c > @@ -171,11 +171,27 @@ 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 simple filter and every simple filter itself until a BDS i= s > + * encountered which cannot be removed through these rules; a simp= le filter > + * is a filter BDS which has its child in .file (that is, > + * bdrv_recurse_is_first_non_filter is NULL). */ > + ubs =3D bs; > + while ((ubs->drv && ubs->drv->authorizations[BS_IS_A_FILTER]) || > + (ubs->drv && !strcmp(ubs->drv->format_name, "raw") && ubs->= file && > + ubs->file->drv && ubs->file->drv->authorizations[BS_IS_A_F= ILTER] && > + !ubs->file->drv->bdrv_recurse_is_first_non_filter)) > + { > + ubs =3D ubs->file; > + } The rewrite Paolo asked me to do don't allow to do it anymore: there is n= o distinction between simple filter driver and quorum like filter drivers. Maybe this rewrite was not so nice. Best regards Beno=EEt > + > + 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