From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57616) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFl2D-0002GT-Le for qemu-devel@nongnu.org; Tue, 18 Feb 2014 08:48:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WFl28-0000vi-7q for qemu-devel@nongnu.org; Tue, 18 Feb 2014 08:48:29 -0500 Received: from lnantes-156-75-100-125.w80-12.abo.wanadoo.fr ([80.12.84.125]:33600 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFl27-0000vd-UT for qemu-devel@nongnu.org; Tue, 18 Feb 2014 08:48:24 -0500 Date: Tue, 18 Feb 2014 14:48:23 +0100 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140218134823.GF18400@irqsave.net> References: <1392435024-26694-1-git-send-email-mreitz@redhat.com> <1392435024-26694-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: <1392435024-26694-4-git-send-email-mreitz@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v3 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 The Saturday 15 Feb 2014 =E0 04:30:19 (+0100), Max Reitz wrote : > 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 | 16 +++++++++++----- > block/cow.c | 5 +++-- > block/qcow.c | 5 +++-- > block/qcow2.c | 4 +++- > block/qed.c | 8 +++++--- > block/sheepdog.c | 7 +++++-- > block/vhdx.c | 4 +++- > block/vmdk.c | 13 +++++++++---- > include/block/block.h | 6 +++--- > qemu-io.c | 4 +++- > 10 files changed, 48 insertions(+), 24 deletions(-) >=20 > diff --git a/block.c b/block.c > index 2483fb9..a697bce 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; > @@ -1202,8 +1202,8 @@ 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); > + ret =3D bdrv_open(pbs, filename, reference, image_options, > + flags | BDRV_O_PROTOCOL, NULL, errp); > } > =20 > done: > @@ -1239,6 +1239,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..d0385be 100644 > --- a/block/cow.c > +++ b/block/cow.c > @@ -351,8 +351,9 @@ 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); > + cow_bs =3D NULL; > + 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..8d00853 100644 > --- a/block/qcow.c > +++ b/block/qcow.c > @@ -691,8 +691,9 @@ 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); > + qcow_bs =3D NULL; > + 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..395194b 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -1493,7 +1493,9 @@ 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); > + bs =3D NULL; > + 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..9bc181f 100644 > --- a/block/qed.c > +++ b/block/qed.c > @@ -562,7 +562,7 @@ static int qed_create(const char *filename, uint32_= t cluster_size, > size_t l1_size =3D header.cluster_size * header.table_size; > Error *local_err =3D NULL; > int ret =3D 0; > - BlockDriverState *bs =3D NULL; > + BlockDriverState *bs; > =20 > ret =3D bdrv_create_file(filename, NULL, &local_err); > if (ret < 0) { > @@ -571,8 +571,10 @@ 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); > + bs =3D NULL; > + 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..c767aad 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); > @@ -1695,7 +1696,9 @@ 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); > + bs =3D NULL; > + 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..366ff2e 100644 > --- a/block/vhdx.c > +++ b/block/vhdx.c > @@ -1797,7 +1797,9 @@ 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); > + bs =3D NULL; > + 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..60ed0f2 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,9 @@ 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); > + assert(bs =3D=3D NULL); > + 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 +1834,9 @@ 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); > + assert(new_bs =3D=3D NULL); > + 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 Reviewed-by: Benoit Canet