From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51068) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WLI9u-00034Y-Fz for qemu-devel@nongnu.org; Wed, 05 Mar 2014 15:11:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WLI9o-0006yC-GB for qemu-devel@nongnu.org; Wed, 05 Mar 2014 15:11:18 -0500 Received: from mx1.redhat.com ([209.132.183.28]:8062) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WLI9o-0006y8-6x for qemu-devel@nongnu.org; Wed, 05 Mar 2014 15:11:12 -0500 Message-ID: <531784D8.6020204@redhat.com> Date: Wed, 05 Mar 2014 21:11:04 +0100 From: Max Reitz MIME-Version: 1.0 References: <1393860533-2063-1-git-send-email-mreitz@redhat.com> <1393860533-2063-10-git-send-email-mreitz@redhat.com> <20140305162032.GK1709@irqsave.net> In-Reply-To: <20140305162032.GK1709@irqsave.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed 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: =?ISO-8859-1?Q?Beno=EEt_Canet?= Cc: Kevin Wolf , qemu-devel@nongnu.org, Stefan Hajnoczi On 05.03.2014 17:20, Beno=EEt Canet wrote: > 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 = to >> 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. >> >> Filters like quorum which have multiple underlying BDS should not be >> removed, however, since the underlying BDS chains may lead to differen= t >> image formats and most certainly to different filenames. Therefore, on= ly >> simple filters with a single underlying BDS may be skipped. >> >> 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. >> >> Signed-off-by: Max Reitz >> --- >> block/qapi.c | 20 ++++++++++++++++++-- >> 1 file changed, 18 insertions(+), 2 deletions(-) >> >> 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" B= DS on top >> + * of a simple filter and every simple filter itself until a BDS = is >> + * encountered which cannot be removed through these rules; a sim= ple 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_= FILTER] && >> + !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= no > distinction between simple filter driver and quorum like filter drivers. > > Maybe this rewrite was not so nice. I'll try to think of something. *g* Max > 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 >> >>