From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=54620 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PDzuB-0000i6-7b for qemu-devel@nongnu.org; Thu, 04 Nov 2010 09:31:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PDzuA-0005ri-1b for qemu-devel@nongnu.org; Thu, 04 Nov 2010 09:31:03 -0400 Received: from mx1.redhat.com ([209.132.183.28]:47261) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PDzu9-0005rY-Pj for qemu-devel@nongnu.org; Thu, 04 Nov 2010 09:31:01 -0400 Message-ID: <4CD2B5C2.1030704@redhat.com> Date: Thu, 04 Nov 2010 14:31:46 +0100 From: Kevin Wolf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] block: fix the use of protocols in backing files References: <1288203550-23698-1-git-send-email-aliguori@us.ibm.com> <4CD2ACEB.8060400@redhat.com> <4CD2B1C7.9090704@linux.vnet.ibm.com> In-Reply-To: <4CD2B1C7.9090704@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Anthony Liguori , agl@linux.vnet.ibm.com, qemu-devel@nongnu.org, Stefan Hajnoczi Am 04.11.2010 14:14, schrieb Anthony Liguori: > On 11/04/2010 07:54 AM, Kevin Wolf wrote: >> Am 27.10.2010 20:19, schrieb Anthony Liguori: >> >>> Signed-off-by: Anthony Liguori >>> >>> diff --git a/block.c b/block.c >>> index 1a965b2..00b6f21 100644 >>> --- a/block.c >>> +++ b/block.c >>> @@ -603,10 +603,16 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags, >>> BlockDriver *back_drv = NULL; >>> >>> bs->backing_hd = bdrv_new(""); >>> - path_combine(backing_filename, sizeof(backing_filename), >>> - filename, bs->backing_file); >>> - if (bs->backing_format[0] != '\0') >>> - back_drv = bdrv_find_format(bs->backing_format); >>> + back_drv = bdrv_find_protocol(bs->backing_file); >>> + if (!back_drv) { >>> >> If no protocol is specified, bdrv_find_protocol doesn't return NULL but >> the file: driver. >> > > An ugly way to handle this would be to do if (strstr(bs->backing_file, > ":") == NULL) instead. Ugly indeed. > A deeper refactoring could return NULL in bdrv_find_protocol and fixup > the callers to default to file: if none are specified. NULL is already used for errors, so we'd have to have something like int bdrv_find_protocol(const char *filename, BlockDriver **drv) in order to be able to distinguish "invalid protocol" from "no explicit protocol". You could rename this function and retain a bdrv_find_protocol with the old prototype as a wrapper that returns file instead of NULL (there are several callers that expect this behaviour, so probably it makes sense to have it in a central place). Does that sound reasonable? Kevin