Am 30.11.2010 16:14, schrieb Stefan Hajnoczi: > Backing filenames may contain a protocol. The code currently doesn't > consider this case and produces filenames that embed "<protocol>:". > Don't combine filenames if the backing filename contains a protocol. > > Based on an earlier patch by Anthony Liguori <[email protected]>. > > Signed-off-by: Stefan Hajnoczi <[email protected]> > --- > block.c | 15 +++++++++++---- > 1 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/block.c b/block.c > index 59b69e4..c9a6720 100644 > --- a/block.c > +++ b/block.c > @@ -611,10 +611,17 @@ 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); > + if (path_has_protocol(bs->backing_file)) { > + back_drv = bdrv_find_protocol(bs->backing_file); > + pstrcpy(backing_filename, sizeof(backing_filename), > + bs->backing_file); > + } else { > + 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); > + } > + }
Now we ignore bs->backing_format when a protocol is used. We don't even allow using anything on top of that protocol any more, so for example qcow2 over sheepdog would be broken. Maybe a use case that you like better would be QED over http or something. It might still not be a very common use case, but this doesn't look right to me. Probably only the pstrcpy/path_combine should be conditional. I've applied the first two patches of the series to the block branch. Kevin
