Message ID | 1309840884-32409-2-git-send-email-devin122@gmail.com |
---|---|
State | New |
Headers | show |
Am 05.07.2011 06:41, schrieb Devin Nakamura: > Signed-off-by: Devin Nakamura <devin122@gmail.com> > --- > block.c | 19 +++++++++++++++++++ > block.h | 2 ++ > 2 files changed, 21 insertions(+), 0 deletions(-) > > diff --git a/block.c b/block.c > index 24a25d5..e7699a6 100644 > --- a/block.c > +++ b/block.c > @@ -3018,3 +3018,22 @@ out: > > return ret; > } > + > + > +int bdrv_open_conversion_target(BlockDriverState **bs, > + char *filename, char *target_fmt, QEMUOptionParameter *options) > +{ > + BlockDriver *drv; > + > + drv = bdrv_find_format(target_fmt); > + if(!drv){ I'll comment on it here, but you need to fix the coding style in the whole series. You may want to try scripts/checkpatch.pl. > + return -ENOENT; > + } > + > + if(!drv->bdrv_open_conversion_target){ > + return -ENOTSUP; > + } > + *bs = bdrv_new(""); > + (*bs)->opaque = qemu_malloc(drv->instance_size); > + return drv->bdrv_open_conversion_target(*bs, filename, options); Is this actually enough? The normal bdrv_open() sets much more fields of the BlockDriverState, and I would expect that the block drivers rely on at least some of them. Kevin
On Tue, Jul 05, 2011 at 12:41:21AM -0400, Devin Nakamura wrote: > +int bdrv_open_conversion_target(BlockDriverState **bs, > + char *filename, char *target_fmt, QEMUOptionParameter *options) > +{ > + BlockDriver *drv; > + > + drv = bdrv_find_format(target_fmt); > + if(!drv){ Please run scripts/checkpatch.pl before submitting patches. It will report coding style issues. > + return -ENOENT; > + } > + > + if(!drv->bdrv_open_conversion_target){ > + return -ENOTSUP; > + } > + *bs = bdrv_new(""); > + (*bs)->opaque = qemu_malloc(drv->instance_size); Please use qemu_mallocz() like bdrv_open_common() does. This is safer in case a block driver relies on the memory being zeroed (which is a useful property). > + return drv->bdrv_open_conversion_target(*bs, filename, options); Have you considered using bdrv_open_common() with a flag to avoid duplicating bs initialization code? You have not dealt with several fields that bdrv_open_common() initializes. Stefan
diff --git a/block.c b/block.c index 24a25d5..e7699a6 100644 --- a/block.c +++ b/block.c @@ -3018,3 +3018,22 @@ out: return ret; } + + +int bdrv_open_conversion_target(BlockDriverState **bs, + char *filename, char *target_fmt, QEMUOptionParameter *options) +{ + BlockDriver *drv; + + drv = bdrv_find_format(target_fmt); + if(!drv){ + return -ENOENT; + } + + if(!drv->bdrv_open_conversion_target){ + return -ENOTSUP; + } + *bs = bdrv_new(""); + (*bs)->opaque = qemu_malloc(drv->instance_size); + return drv->bdrv_open_conversion_target(*bs, filename, options); +} diff --git a/block.h b/block.h index 859d1d9..da87afb 100644 --- a/block.h +++ b/block.h @@ -250,6 +250,8 @@ int64_t bdrv_get_dirty_count(BlockDriverState *bs); void bdrv_set_in_use(BlockDriverState *bs, int in_use); int bdrv_in_use(BlockDriverState *bs); +int bdrv_open_conversion_target(BlockDriverState **bs, char *filename, + char *target_fmt, QEMUOptionParameter *options); typedef enum { BLKDBG_L1_UPDATE,
Signed-off-by: Devin Nakamura <devin122@gmail.com> --- block.c | 19 +++++++++++++++++++ block.h | 2 ++ 2 files changed, 21 insertions(+), 0 deletions(-)