[sheepdog] [PATCH 08/10] sheep: set SD_FLAG_CMD_WRITE in sd_init_req

MORITA Kazutaka morita.kazutaka at gmail.com
Tue Oct 15 20:17:06 CEST 2013


At Tue, 15 Oct 2013 22:36:41 +0800,
Liu Yuan wrote:
> 
> It is easy to forget to set SD_FLAG_CMD_WRITE for write and create and hard
> to debug, so set it directly in sd_init_req().
> 
> Signed-off-by: Liu Yuan <namei.unix at gmail.com>
> ---
>  dog/common.c         |    1 -
>  include/sheep.h      |    2 ++
>  sheep/gateway.c      |    1 -
>  sheep/object_cache.c |    3 ---
>  sheep/store.c        |    3 ---
>  5 files changed, 2 insertions(+), 8 deletions(-)
> 
> diff --git a/dog/common.c b/dog/common.c
> index a2fb945..b70080e 100644
> --- a/dog/common.c
> +++ b/dog/common.c
> @@ -100,7 +100,6 @@ int sd_write_object(uint64_t oid, uint64_t cow_oid, void *data,
>  		sd_init_req(&hdr, SD_OP_WRITE_OBJ);
>  
>  	hdr.data_length = datalen;
> -	hdr.flags = flags | SD_FLAG_CMD_WRITE;
>  	if (cow_oid)
>  		hdr.flags |= SD_FLAG_CMD_COW;
>  	if (direct)
> diff --git a/include/sheep.h b/include/sheep.h
> index 293e057..f93026f 100644
> --- a/include/sheep.h
> +++ b/include/sheep.h
> @@ -54,6 +54,8 @@ static inline void sd_init_req(struct sd_req *req, uint8_t opcode)
>  	memset(req, 0, sizeof(*req));
>  	req->opcode = opcode;
>  	req->proto_ver = opcode < 0x80 ? SD_PROTO_VER : SD_SHEEP_PROTO_VER;
> +	if (opcode == SD_OP_CREATE_AND_WRITE_OBJ || opcode == SD_OP_WRITE_OBJ)
> +		req->flags = SD_FLAG_CMD_WRITE;

I'm against dealing only these two opcodes as special cases.  I think
of adding more general check to detect this kind of error in sheep
code.

Thanks,

Kazutaka



More information about the sheepdog mailing list