From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59455) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WCr6S-0004uG-C4 for qemu-devel@nongnu.org; Mon, 10 Feb 2014 08:40:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WCr6N-0002xX-4v for qemu-devel@nongnu.org; Mon, 10 Feb 2014 08:40:52 -0500 Received: from paradis.irqsave.net ([62.212.105.220]:49564) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WCr6M-0002xB-FK for qemu-devel@nongnu.org; Mon, 10 Feb 2014 08:40:47 -0500 Date: Mon, 10 Feb 2014 14:40:44 +0100 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140210134044.GH3088@irqsave.net> References: <1391881159-13585-1-git-send-email-mreitz@redhat.com> <1391881159-13585-4-git-send-email-mreitz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1391881159-13585-4-git-send-email-mreitz@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 3/8] block: Make bdrv_file_open() static List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Max Reitz Cc: Kevin Wolf , Jeff Cody , qemu-devel@nongnu.org, Stefan Hajnoczi Le Saturday 08 Feb 2014 =E0 18:39:14 (+0100), Max Reitz a =E9crit : > Add the bdrv_open() option BDRV_O_PROTOCOL which results in passing the > call to bdrv_file_open(). Additionally, make bdrv_file_open() static an= d > therefore bdrv_open() the only way to call it. >=20 > Consequently, all existing calls to bdrv_file_open() have to be adjuste= d > to use bdrv_open() with the BDRV_O_PROTOCOL flag instead. >=20 > Signed-off-by: Max Reitz > --- > block.c | 17 ++++++++++++----- > block/cow.c | 6 +++--- > block/qcow.c | 6 +++--- > block/qcow2.c | 5 +++-- > block/qed.c | 5 +++-- > block/sheepdog.c | 8 +++++--- > block/vhdx.c | 5 +++-- > block/vmdk.c | 11 +++++++---- > include/block/block.h | 6 +++--- > qemu-io.c | 4 +++- > 10 files changed, 45 insertions(+), 28 deletions(-) >=20 > diff --git a/block.c b/block.c > index 3a32c37..432d659 100644 > --- a/block.c > +++ b/block.c > @@ -953,9 +953,9 @@ free_and_fail: > * after the call (even on failure), so if the caller intends to reuse= the > * dictionary, it needs to use QINCREF() before calling bdrv_file_open= . > */ > -int bdrv_file_open(BlockDriverState **pbs, const char *filename, > - const char *reference, QDict *options, int flags, > - Error **errp) > +static int bdrv_file_open(BlockDriverState **pbs, const char *filename= , > + const char *reference, QDict *options, int f= lags, > + Error **errp) > { > BlockDriverState *bs =3D NULL; > BlockDriver *drv; > @@ -1201,8 +1201,9 @@ int bdrv_open_image(BlockDriverState **pbs, const= char *filename, > =20 > ret =3D bdrv_open(pbs, filename, NULL, image_options, flags, N= ULL, errp); > } else { > - ret =3D bdrv_file_open(pbs, filename, reference, image_options= , flags, > - errp); > + *pbs =3D NULL; > + ret =3D bdrv_open(pbs, filename, reference, image_options, > + flags | BDRV_O_PROTOCOL, NULL, errp); > } > =20 > done: > @@ -1234,6 +1235,12 @@ int bdrv_open(BlockDriverState **pbs, const char= *filename, > =20 > assert(pbs); > =20 > + if (flags & BDRV_O_PROTOCOL) { > + assert(!drv); > + return bdrv_file_open(pbs, filename, reference, options, > + flags & ~BDRV_O_PROTOCOL, errp); > + } > + > if (reference) { > bool options_non_empty =3D options ? qdict_size(options) : fal= se; > QDECREF(options); > diff --git a/block/cow.c b/block/cow.c > index 7fc0b12..f0748a2 100644 > --- a/block/cow.c > +++ b/block/cow.c > @@ -332,7 +332,7 @@ static int cow_create(const char *filename, QEMUOpt= ionParameter *options, > const char *image_filename =3D NULL; > Error *local_err =3D NULL; > int ret; > - BlockDriverState *cow_bs; > + BlockDriverState *cow_bs =3D NULL; > =20 > /* Read out options */ > while (options && options->name) { > @@ -351,8 +351,8 @@ static int cow_create(const char *filename, QEMUOpt= ionParameter *options, > return ret; > } > =20 > - ret =3D bdrv_file_open(&cow_bs, filename, NULL, NULL, BDRV_O_RDWR, > - &local_err); > + ret =3D bdrv_open(&cow_bs, filename, NULL, NULL, > + BDRV_O_RDWR | BDRV_O_PROTOCOL, NULL, &local_err); > if (ret < 0) { > qerror_report_err(local_err); > error_free(local_err); > diff --git a/block/qcow.c b/block/qcow.c > index 948b0c5..4881d84 100644 > --- a/block/qcow.c > +++ b/block/qcow.c > @@ -670,7 +670,7 @@ static int qcow_create(const char *filename, QEMUOp= tionParameter *options, > int flags =3D 0; > Error *local_err =3D NULL; > int ret; > - BlockDriverState *qcow_bs; > + BlockDriverState *qcow_bs =3D NULL; > =20 > /* Read out options */ > while (options && options->name) { > @@ -691,8 +691,8 @@ static int qcow_create(const char *filename, QEMUOp= tionParameter *options, > return ret; > } > =20 > - ret =3D bdrv_file_open(&qcow_bs, filename, NULL, NULL, BDRV_O_RDWR= , > - &local_err); > + ret =3D bdrv_open(&qcow_bs, filename, NULL, NULL, > + BDRV_O_RDWR | BDRV_O_PROTOCOL, NULL, &local_err); > if (ret < 0) { > qerror_report_err(local_err); > error_free(local_err); > diff --git a/block/qcow2.c b/block/qcow2.c > index 6996276..bd72172 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -1481,7 +1481,7 @@ static int qcow2_create2(const char *filename, in= t64_t total_size, > * 2 GB for 64k clusters, and we don't want to have a 2 GB initial= file > * size for any qcow2 image. > */ > - BlockDriverState* bs; > + BlockDriverState *bs =3D NULL; > QCowHeader *header; > uint8_t* refcount_table; > Error *local_err =3D NULL; > @@ -1493,7 +1493,8 @@ static int qcow2_create2(const char *filename, in= t64_t total_size, > return ret; > } > =20 > - ret =3D bdrv_file_open(&bs, filename, NULL, NULL, BDRV_O_RDWR, &lo= cal_err); > + ret =3D bdrv_open(&bs, filename, NULL, NULL, BDRV_O_RDWR | BDRV_O_= PROTOCOL, > + NULL, &local_err); > if (ret < 0) { > error_propagate(errp, local_err); > return ret; > diff --git a/block/qed.c b/block/qed.c > index b9ca7ac..33fbce1 100644 > --- a/block/qed.c > +++ b/block/qed.c > @@ -571,8 +571,9 @@ static int qed_create(const char *filename, uint32_= t cluster_size, > return ret; > } > =20 > - ret =3D bdrv_file_open(&bs, filename, NULL, NULL, > - BDRV_O_RDWR | BDRV_O_CACHE_WB, &local_err); > + ret =3D bdrv_open(&bs, filename, NULL, NULL, > + BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_PROTOCOL, N= ULL, > + &local_err); > if (ret < 0) { > qerror_report_err(local_err); > error_free(local_err); > diff --git a/block/sheepdog.c b/block/sheepdog.c > index 672b9c9..6f2ec57 100644 > --- a/block/sheepdog.c > +++ b/block/sheepdog.c > @@ -1534,7 +1534,8 @@ static int sd_prealloc(const char *filename) > Error *local_err =3D NULL; > int ret; > =20 > - ret =3D bdrv_file_open(&bs, filename, NULL, NULL, BDRV_O_RDWR, &lo= cal_err); > + ret =3D bdrv_open(&bs, filename, NULL, NULL, BDRV_O_RDWR | BDRV_O_= PROTOCOL, > + NULL, &local_err); > if (ret < 0) { > qerror_report_err(local_err); > error_free(local_err); > @@ -1683,7 +1684,7 @@ static int sd_create(const char *filename, QEMUOp= tionParameter *options, > } > =20 > if (backing_file) { > - BlockDriverState *bs; > + BlockDriverState *bs =3D NULL; > BDRVSheepdogState *base; > BlockDriver *drv; > =20 > @@ -1695,7 +1696,8 @@ static int sd_create(const char *filename, QEMUOp= tionParameter *options, > goto out; > } > =20 > - ret =3D bdrv_file_open(&bs, backing_file, NULL, NULL, 0, &loca= l_err); > + ret =3D bdrv_open(&bs, backing_file, NULL, NULL, BDRV_O_PROTOC= OL, NULL, > + &local_err); > if (ret < 0) { > qerror_report_err(local_err); > error_free(local_err); > diff --git a/block/vhdx.c b/block/vhdx.c > index 55689cf..38d949c 100644 > --- a/block/vhdx.c > +++ b/block/vhdx.c > @@ -1724,7 +1724,7 @@ static int vhdx_create(const char *filename, QEMU= OptionParameter *options, > =20 > gunichar2 *creator =3D NULL; > glong creator_items; > - BlockDriverState *bs; > + BlockDriverState *bs =3D NULL; > const char *type =3D NULL; > VHDXImageType image_type; > Error *local_err =3D NULL; > @@ -1797,7 +1797,8 @@ static int vhdx_create(const char *filename, QEMU= OptionParameter *options, > goto exit; > } > =20 > - ret =3D bdrv_file_open(&bs, filename, NULL, NULL, BDRV_O_RDWR, &lo= cal_err); > + ret =3D bdrv_open(&bs, filename, NULL, NULL, BDRV_O_RDWR | BDRV_O_= PROTOCOL, > + NULL, &local_err); > if (ret < 0) { > error_propagate(errp, local_err); > goto exit; > diff --git a/block/vmdk.c b/block/vmdk.c > index e007793..70bf011 100644 > --- a/block/vmdk.c > +++ b/block/vmdk.c > @@ -776,8 +776,9 @@ static int vmdk_parse_extents(const char *desc, Blo= ckDriverState *bs, > =20 > path_combine(extent_path, sizeof(extent_path), > desc_file_path, fname); > - ret =3D bdrv_file_open(&extent_file, extent_path, NULL, NULL, > - bs->open_flags, errp); > + extent_file =3D NULL; > + ret =3D bdrv_open(&extent_file, extent_path, NULL, NULL, > + bs->open_flags | BDRV_O_PROTOCOL, NULL, errp); > if (ret) { > return ret; > } > @@ -1493,7 +1494,8 @@ static int vmdk_create_extent(const char *filenam= e, int64_t filesize, > goto exit; > } > =20 > - ret =3D bdrv_file_open(&bs, filename, NULL, NULL, BDRV_O_RDWR, &lo= cal_err); > + ret =3D bdrv_open(&bs, filename, NULL, NULL, BDRV_O_RDWR | BDRV_O_= PROTOCOL, > + NULL, &local_err); > if (ret < 0) { > error_propagate(errp, local_err); > goto exit; > @@ -1831,7 +1833,8 @@ static int vmdk_create(const char *filename, QEMU= OptionParameter *options, > goto exit; > } > } > - ret =3D bdrv_file_open(&new_bs, filename, NULL, NULL, BDRV_O_RDWR,= &local_err); > + ret =3D bdrv_open(&new_bs, filename, NULL, NULL, > + BDRV_O_RDWR | BDRV_O_PROTOCOL, NULL, &local_err); > if (ret < 0) { > error_setg_errno(errp, -ret, "Could not write description"); > goto exit; > diff --git a/include/block/block.h b/include/block/block.h > index a421041..bf78db5 100644 > --- a/include/block/block.h > +++ b/include/block/block.h > @@ -102,6 +102,9 @@ typedef enum { > #define BDRV_O_CHECK 0x1000 /* open solely for consistency chec= k */ > #define BDRV_O_ALLOW_RDWR 0x2000 /* allow reopen to change from r/o = to r/w */ > #define BDRV_O_UNMAP 0x4000 /* execute guest UNMAP/TRIM operati= ons */ > +#define BDRV_O_PROTOCOL 0x8000 /* if no block driver is explicitly= given: > + select an appropriate protocol d= river, > + ignoring the format layer */ > =20 > #define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB | BDRV_O_= NO_FLUSH) > =20 > @@ -183,9 +186,6 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDrive= rState *bs_old); > void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top); > int bdrv_parse_cache_flags(const char *mode, int *flags); > int bdrv_parse_discard_flags(const char *mode, int *flags); > -int bdrv_file_open(BlockDriverState **pbs, const char *filename, > - const char *reference, QDict *options, int flags, > - Error **errp); > int bdrv_open_image(BlockDriverState **pbs, const char *filename, > QDict *options, const char *bdref_key, int flags, > bool force_raw, bool allow_none, Error **errp); > diff --git a/qemu-io.c b/qemu-io.c > index 61d54c0..71d7806 100644 > --- a/qemu-io.c > +++ b/qemu-io.c > @@ -59,7 +59,9 @@ static int openfile(char *name, int flags, int growab= le, QDict *opts) > } > =20 > if (growable) { > - if (bdrv_file_open(&qemuio_bs, name, NULL, opts, flags, &local= _err)) { > + if (bdrv_open(&qemuio_bs, name, NULL, opts, flags | BDRV_O_PRO= TOCOL, > + NULL, &local_err)) > + { > fprintf(stderr, "%s: can't open device %s: %s\n", progname= , name, > error_get_pretty(local_err)); > error_free(local_err); > --=20 > 1.8.5.4 >=20 >=20 Reviewed-by: Benoit Canet