[Qemu-devel] [PATCH v2 1/2] sheepdog: refactor do_sd_create()
We can actually use BDRVSheepdogState *s to pass most of the parameters. Cc: Kevin Wolf kw...@redhat.com Cc: Stefan Hajnoczi stefa...@redhat.com Signed-off-by: Liu Yuan namei.u...@gmail.com --- block/sheepdog.c | 37 +++-- 1 file changed, 15 insertions(+), 22 deletions(-) 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; } -static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, -uint32_t base_vid, uint32_t *vdi_id, int snapshot, -uint8_t copy_policy) +static int do_sd_create(BDRVSheepdogState *s, uint32_t *vdi_id, int snapshot) { SheepdogVdiReq hdr; SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)hdr; @@ -1367,11 +1365,11 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, * does not fit in buf? For now, just truncate and avoid buffer overrun. */ memset(buf, 0, sizeof(buf)); -pstrcpy(buf, sizeof(buf), filename); +pstrcpy(buf, sizeof(buf), s-name); memset(hdr, 0, sizeof(hdr)); hdr.opcode = SD_OP_NEW_VDI; -hdr.vdi_id = base_vid; +hdr.vdi_id = s-inode.vdi_id; wlen = SD_MAX_VDI_LEN; @@ -1379,8 +1377,8 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, hdr.snapid = snapshot; hdr.data_length = wlen; -hdr.vdi_size = vdi_size; -hdr.copy_policy = copy_policy; +hdr.vdi_size = s-inode.vdi_size; +hdr.copy_policy = s-inode.copy_policy; ret = do_req(fd, (SheepdogReq *)hdr, buf, wlen, rlen); @@ -1391,7 +1389,7 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, } if (rsp-result != 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; } @@ -1452,23 +1450,21 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, Error **errp) { int ret = 0; -uint32_t vid = 0, base_vid = 0; -int64_t vdi_size = 0; +uint32_t vid = 0; char *backing_file = 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 = false; Error *local_err = NULL; s = g_malloc0(sizeof(BDRVSheepdogState)); -memset(vdi, 0, sizeof(vdi)); memset(tag, 0, sizeof(tag)); if (strstr(filename, ://)) { -ret = sd_parse_uri(s, filename, vdi, snapid, tag); +ret = sd_parse_uri(s, filename, s-name, snapid, tag); } else { -ret = parse_vdiname(s, filename, vdi, snapid, tag); +ret = parse_vdiname(s, filename, s-name, snapid, tag); } if (ret 0) { goto out; @@ -1476,7 +1472,7 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, while (options options-name) { if (!strcmp(options-name, BLOCK_OPT_SIZE)) { -vdi_size = options-value.n; +s-inode.vdi_size = options-value.n; } else if (!strcmp(options-name, BLOCK_OPT_BACKING_FILE)) { backing_file = options-value.s; } else if (!strcmp(options-name, BLOCK_OPT_PREALLOC)) { @@ -1494,7 +1490,7 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, options++; } -if (vdi_size SD_MAX_VDI_SIZE) { +if (s-inode.vdi_size SD_MAX_VDI_SIZE) { error_report(too big image size); ret = -EINVAL; goto out; @@ -1529,12 +1525,11 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, goto out; } -base_vid = s-inode.vdi_id; bdrv_unref(bs); } /* TODO: allow users to specify copy number */ -ret = do_sd_create(s, vdi, vdi_size, base_vid, vid, 0, 0); +ret = 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 = sd_delete(s); -ret = do_sd_create(s, s-name, s-inode.vdi_size, s-inode.vdi_id, vid, - !deleted, s-inode.copy_policy); +ret = do_sd_create(s, vid, !deleted); if (ret) { goto out; } @@ -2013,8 +2007,7 @@ static int sd_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info) goto cleanup; } -ret = do_sd_create(s, s-name, s-inode.vdi_size, s-inode.vdi_id, new_vid, - 1, s-inode.copy_policy); +ret = do_sd_create(s, new_vid, 1); if (ret 0) { error_report(failed to create inode for snapshot. %s, strerror(errno)); -- 1.7.9.5
Re: [Qemu-devel] [PATCH v2 1/2] sheepdog: refactor do_sd_create()
Le Tuesday 29 Oct 2013 à 16:25:51 (+0800), Liu Yuan a écrit : We can actually use BDRVSheepdogState *s to pass most of the parameters. Cc: Kevin Wolf kw...@redhat.com Cc: Stefan Hajnoczi stefa...@redhat.com Signed-off-by: Liu Yuan namei.u...@gmail.com --- block/sheepdog.c | 37 +++-- 1 file changed, 15 insertions(+), 22 deletions(-) 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; } -static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, -uint32_t base_vid, uint32_t *vdi_id, int snapshot, -uint8_t copy_policy) +static int do_sd_create(BDRVSheepdogState *s, uint32_t *vdi_id, int snapshot) { SheepdogVdiReq hdr; SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)hdr; @@ -1367,11 +1365,11 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, * does not fit in buf? For now, just truncate and avoid buffer overrun. */ memset(buf, 0, sizeof(buf)); -pstrcpy(buf, sizeof(buf), filename); +pstrcpy(buf, sizeof(buf), s-name); memset(hdr, 0, sizeof(hdr)); hdr.opcode = SD_OP_NEW_VDI; -hdr.vdi_id = base_vid; +hdr.vdi_id = s-inode.vdi_id; wlen = SD_MAX_VDI_LEN; @@ -1379,8 +1377,8 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, hdr.snapid = snapshot; hdr.data_length = wlen; -hdr.vdi_size = vdi_size; -hdr.copy_policy = copy_policy; +hdr.vdi_size = s-inode.vdi_size; +hdr.copy_policy = s-inode.copy_policy; ret = do_req(fd, (SheepdogReq *)hdr, buf, wlen, rlen); @@ -1391,7 +1389,7 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, } if (rsp-result != 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; } @@ -1452,23 +1450,21 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, Error **errp) { int ret = 0; -uint32_t vid = 0, base_vid = 0; -int64_t vdi_size = 0; +uint32_t vid = 0; char *backing_file = 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 = false; Error *local_err = NULL; s = g_malloc0(sizeof(BDRVSheepdogState)); -memset(vdi, 0, sizeof(vdi)); memset(tag, 0, sizeof(tag)); if (strstr(filename, ://)) { -ret = sd_parse_uri(s, filename, vdi, snapid, tag); +ret = sd_parse_uri(s, filename, s-name, snapid, tag); } else { -ret = parse_vdiname(s, filename, vdi, snapid, tag); +ret = parse_vdiname(s, filename, s-name, snapid, tag); } if (ret 0) { goto out; @@ -1476,7 +1472,7 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, while (options options-name) { if (!strcmp(options-name, BLOCK_OPT_SIZE)) { -vdi_size = options-value.n; +s-inode.vdi_size = options-value.n; } else if (!strcmp(options-name, BLOCK_OPT_BACKING_FILE)) { backing_file = options-value.s; } else if (!strcmp(options-name, BLOCK_OPT_PREALLOC)) { @@ -1494,7 +1490,7 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, options++; } -if (vdi_size SD_MAX_VDI_SIZE) { +if (s-inode.vdi_size SD_MAX_VDI_SIZE) { error_report(too big image size); ret = -EINVAL; goto out; @@ -1529,12 +1525,11 @@ static int sd_create(const char *filename, QEMUOptionParameter *options, goto out; } -base_vid = s-inode.vdi_id; bdrv_unref(bs); } /* TODO: allow users to specify copy number */ -ret = do_sd_create(s, vdi, vdi_size, base_vid, vid, 0, 0); +ret = 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 = sd_delete(s); -ret = do_sd_create(s, s-name, s-inode.vdi_size, s-inode.vdi_id, vid, - !deleted, s-inode.copy_policy); +ret = do_sd_create(s, vid, !deleted); if (ret) { goto out; } @@ -2013,8 +2007,7 @@ static int sd_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info) goto cleanup; } -ret = do_sd_create(s, s-name, s-inode.vdi_size, s-inode.vdi_id, new_vid, - 1, s-inode.copy_policy); +ret = do_sd_create(s, new_vid, 1); if (ret 0) {