From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53493) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VbFyX-0003fn-2O for qemu-devel@nongnu.org; Tue, 29 Oct 2013 16:33:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VbFyS-0000DD-2J for qemu-devel@nongnu.org; Tue, 29 Oct 2013 16:33:17 -0400 Received: from nodalink.pck.nerim.net ([62.212.105.220]:37860 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VbFyR-0000Cx-I8 for qemu-devel@nongnu.org; Tue, 29 Oct 2013 16:33:11 -0400 Date: Tue, 29 Oct 2013 21:32:58 +0100 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20131029203258.GD2948@irqsave.net> References: <1383034655-12606-1-git-send-email-namei.unix@gmail.com> <1383034655-12606-2-git-send-email-namei.unix@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1383034655-12606-2-git-send-email-namei.unix@gmail.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 1/2] sheepdog: refactor do_sd_create() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Liu Yuan Cc: Kevin Wolf , sheepdog@lists.wpkg.org, qemu-devel@nongnu.org, Stefan Hajnoczi >Le Tuesday 29 Oct 2013 =E0 16:17:34 (+0800), Liu Yuan a =E9crit : > We can actually use BDRVSheepdogState *s to pass most of the parameters= . >=20 > Cc: Kevin Wolf > Cc: Stefan Hajnoczi > Signed-off-by: Liu Yuan > --- > block/sheepdog.c | 37 +++++++++++++++---------------------- > 1 file changed, 15 insertions(+), 22 deletions(-) >=20 > diff --git a/block/sheepdog.c b/block/sheepdog.c > index 9f0757b..e66d2f8 100644 > --- a/block/sheepdog.c > +++ b/block/sheepdog.c > @@ -1348,9 +1348,7 @@ out: > return ret; > } > =20 > -static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t = vdi_size, > - uint32_t base_vid, uint32_t *vdi_id, int snaps= hot, > - uint8_t copy_policy) > +static int do_sd_create(BDRVSheepdogState *s, uint32_t *vdi_id, int sn= apshot) > { > SheepdogVdiReq hdr; > SheepdogVdiRsp *rsp =3D (SheepdogVdiRsp *)&hdr; > @@ -1367,11 +1365,11 @@ static int do_sd_create(BDRVSheepdogState *s, c= har *filename, int64_t vdi_size, > * does not fit in buf? For now, just truncate and avoid buffer o= verrun. > */ > memset(buf, 0, sizeof(buf)); > - pstrcpy(buf, sizeof(buf), filename); > + pstrcpy(buf, sizeof(buf), s->name); > =20 > memset(&hdr, 0, sizeof(hdr)); > hdr.opcode =3D SD_OP_NEW_VDI; > - hdr.vdi_id =3D base_vid; > + hdr.vdi_id =3D s->inode.vdi_id; > =20 > wlen =3D SD_MAX_VDI_LEN; > =20 > @@ -1379,8 +1377,8 @@ static int do_sd_create(BDRVSheepdogState *s, cha= r *filename, int64_t vdi_size, > hdr.snapid =3D snapshot; > =20 > hdr.data_length =3D wlen; > - hdr.vdi_size =3D vdi_size; > - hdr.copy_policy =3D copy_policy; > + hdr.vdi_size =3D s->inode.vdi_size; > + hdr.copy_policy =3D s->inode.copy_policy; > =20 > ret =3D do_req(fd, (SheepdogReq *)&hdr, buf, &wlen, &rlen); > =20 > @@ -1391,7 +1389,7 @@ static int do_sd_create(BDRVSheepdogState *s, cha= r *filename, int64_t vdi_size, > } > =20 > if (rsp->result !=3D SD_RES_SUCCESS) { > - error_report("%s, %s", sd_strerror(rsp->result), filename); > + error_report("%s, %s", sd_strerror(rsp->result), s->inode.name= ); > return -EIO; > } > =20 > @@ -1452,23 +1450,21 @@ static int sd_create(const char *filename, QEMU= OptionParameter *options, > Error **errp) > { > int ret =3D 0; > - uint32_t vid =3D 0, base_vid =3D 0; > - int64_t vdi_size =3D 0; > + uint32_t vid =3D 0; > char *backing_file =3D NULL; > BDRVSheepdogState *s; > - char vdi[SD_MAX_VDI_LEN], tag[SD_MAX_VDI_TAG_LEN]; > + char tag[SD_MAX_VDI_TAG_LEN]; > uint32_t snapid; > bool prealloc =3D false; > Error *local_err =3D NULL; > =20 > s =3D g_malloc0(sizeof(BDRVSheepdogState)); > =20 > - memset(vdi, 0, sizeof(vdi)); > memset(tag, 0, sizeof(tag)); > if (strstr(filename, "://")) { > - ret =3D sd_parse_uri(s, filename, vdi, &snapid, tag); > + ret =3D sd_parse_uri(s, filename, s->name, &snapid, tag); > } else { > - ret =3D parse_vdiname(s, filename, vdi, &snapid, tag); > + ret =3D parse_vdiname(s, filename, s->name, &snapid, tag); > } > if (ret < 0) { > goto out; > @@ -1476,7 +1472,7 @@ static int sd_create(const char *filename, QEMUOp= tionParameter *options, > =20 > while (options && options->name) { > if (!strcmp(options->name, BLOCK_OPT_SIZE)) { > - vdi_size =3D options->value.n; > + s->inode.vdi_size =3D options->value.n; > } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FILE)) { > backing_file =3D options->value.s; > } else if (!strcmp(options->name, BLOCK_OPT_PREALLOC)) { > @@ -1494,7 +1490,7 @@ static int sd_create(const char *filename, QEMUOp= tionParameter *options, > options++; > } > =20 > - if (vdi_size > SD_MAX_VDI_SIZE) { > + if (s->inode.vdi_size > SD_MAX_VDI_SIZE) { > error_report("too big image size"); > ret =3D -EINVAL; > goto out; > @@ -1529,12 +1525,11 @@ static int sd_create(const char *filename, QEMU= OptionParameter *options, > goto out; > } > =20 > - base_vid =3D s->inode.vdi_id; > bdrv_unref(bs); > } > =20 > /* TODO: allow users to specify copy number */ > - ret =3D do_sd_create(s, vdi, vdi_size, base_vid, &vid, 0, 0); > + ret =3D do_sd_create(s, &vid, 0); > if (!prealloc || ret) { > goto out; > } > @@ -1723,8 +1718,7 @@ static int sd_create_branch(BDRVSheepdogState *s) > * false bail out. > */ > deleted =3D sd_delete(s); > - ret =3D do_sd_create(s, s->name, s->inode.vdi_size, s->inode.vdi_i= d, &vid, > - !deleted, s->inode.copy_policy); > + ret =3D do_sd_create(s, &vid, !deleted); > if (ret) { > goto out; > } > @@ -2013,8 +2007,7 @@ static int sd_snapshot_create(BlockDriverState *b= s, QEMUSnapshotInfo *sn_info) > goto cleanup; > } > =20 > - ret =3D do_sd_create(s, s->name, s->inode.vdi_size, s->inode.vdi_i= d, &new_vid, > - 1, s->inode.copy_policy); > + ret =3D do_sd_create(s, &new_vid, 1); > if (ret < 0) { > error_report("failed to create inode for snapshot. %s", > strerror(errno)); > --=20 > 1.7.9.5 >=20 >=20 Reviewed-by: Benoit Canet