[sheepdog] [PATCH v2] sheepdog: selectable object size support
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Thu Jan 22 06:22:52 CET 2015
At Tue, 20 Jan 2015 16:14:28 +0900,
Teruaki Ishizaki wrote:
>
> Previously, qemu block driver of sheepdog used hard-coded VDI object size.
> This patch enables users to handle "block_size_shift" value for
> calculating VDI object size.
>
> When you start qemu, you don't need to specify additional command option.
>
> But when you create the VDI which doesn't have default object size
> with qemu-img command, you specify block_size_shift option.
>
> If you want to create a VDI of 8MB(1 << 23) object size,
> you need to specify following command option.
>
> # qemu-img create -o block_size_shift=23 sheepdog:test1 100M
>
> In addition, when you don't specify qemu-img command option,
> a default value of sheepdog cluster is used for creating VDI.
>
> # qemu-img create sheepdog:test2 100M
>
> Signed-off-by: Teruaki Ishizaki <ishizaki.teruaki at lab.ntt.co.jp>
> ---
> V2:
> - Fix coding style problem (white space).
> - Add members, store_policy and block_size_shift to struct SheepdogVdiReq
> - Initialize request header to use block_size_shift specified by user.
> ---
> block/sheepdog.c | 142 ++++++++++++++++++++++++++++++++++++++-------
> include/block/block_int.h | 1 +
> 2 files changed, 121 insertions(+), 22 deletions(-)
>
> @@ -1757,6 +1800,48 @@ static int sd_create(const char *filename, QemuOpts *opts,
> }
>
> s->aio_context = qemu_get_aio_context();
> +
> + /* if block_size_shift is not specified, get cluster default value */
> + if (s->inode.block_size_shift == 0) {
> + SheepdogVdiReq hdr;
> + SheepdogClusterRsp *rsp = (SheepdogClusterRsp *)&hdr;
> + Error *local_err = NULL;
> + int fd;
> + unsigned int wlen = 0, rlen = 0;
> +
> + fd = connect_to_sdog(s, &local_err);
> + if (fd < 0) {
> + error_report("%s", error_get_pretty(local_err));
> + error_free(local_err);
> + ret = -EIO;
> + goto out;
> + }
> +
> + memset(&hdr, 0, sizeof(hdr));
SD_OP_GET_CLUSTER_DEFAULT doesn't require succeeding data, so the below memset() for buf and
> + memset(&buf, 0, sizeof(buf));
> + hdr.opcode = SD_OP_GET_CLUSTER_DEFAULT;
> + hdr.proto_ver = SD_PROTO_VER;
the below two statements aren't required.
> + hdr.data_length = wlen;
> + hdr.flags = SD_FLAG_CMD_WRITE;
Thanks,
Hitoshi
More information about the sheepdog
mailing list