[Sheepdog] [PATCH v4 6/7] sheep: change hdr flags uint32_t from uint16_t

Liu Yuan namei.unix at gmail.com
Wed Oct 19 05:03:50 CEST 2011


On 10/19/2011 01:01 AM, MORITA Kazutaka wrote:

> At Tue, 18 Oct 2011 16:58:57 +0800,
> Liu Yuan wrote:
>>
>> From: Liu Yuan <tailai.ly at taobao.com>
>>
>> And in passing, extend req/rsp into 14 uint32_t.
>>
>> Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
>> ---
>>  include/sheep.h          |   23 ++++++++++++-----------
>>  include/sheepdog_proto.h |   23 ++++++++++++-----------
>>  2 files changed, 24 insertions(+), 22 deletions(-)
>>
>> diff --git a/include/sheep.h b/include/sheep.h
>> index 230917f..0bacdb6 100644
>> --- a/include/sheep.h
>> +++ b/include/sheep.h
>> @@ -51,7 +51,7 @@
>>  struct sd_so_req {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>> @@ -59,13 +59,13 @@ struct sd_so_req {
>>  	uint64_t	ctime;
>>  	uint32_t	copies;
>>  	uint32_t	tag;
>> -	uint32_t	opcode_specific[2];
>> +	uint32_t	opcode_specific[3];
>>  };
>>  
>>  struct sd_so_rsp {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>> @@ -73,46 +73,46 @@ struct sd_so_rsp {
>>  	uint32_t	copies;
>>  	uint64_t	ctime;
>>  	uint64_t	oid;
>> -	uint32_t	opcode_specific[2];
>> +	uint32_t	opcode_specific[3];
>>  };
>>  
>>  struct sd_list_req {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>>  	uint32_t        tgt_epoch;
>> -	uint32_t        pad[7];
>> +	uint32_t        pad[8];
>>  };
>>  
>>  struct sd_list_rsp {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>>  	uint32_t        result;
>> -	uint32_t        pad[7];
>> +	uint32_t        pad[8];
>>  };
>>  
>>  struct sd_node_req {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>>  	uint32_t	request_ver;
>> -	uint32_t	pad[7];
>> +	uint32_t	pad[8];
>>  };
>>  
>>  struct sd_node_rsp {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>> @@ -122,6 +122,7 @@ struct sd_node_rsp {
>>  	uint32_t	master_idx;
>>  	uint64_t	store_size;
>>  	uint64_t	store_free;
>> +	uint32_t	pad[1];
>>  };
>>  
>>  struct sheepdog_node_list_entry {
>> diff --git a/include/sheepdog_proto.h b/include/sheepdog_proto.h
>> index 9467c44..1091184 100644
>> --- a/include/sheepdog_proto.h
>> +++ b/include/sheepdog_proto.h
>> @@ -95,28 +95,28 @@
>>  struct sd_req {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>> -	uint32_t	opcode_specific[8];
>> +	uint32_t	opcode_specific[9];
>>  };
>>  
>>  struct sd_rsp {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>>  	uint32_t        result;
>> -	uint32_t	opcode_specific[7];
>> +	uint32_t	opcode_specific[8];
>>  };
>>  
>>  struct sd_obj_req {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>> @@ -125,24 +125,25 @@ struct sd_obj_req {
>>  	uint32_t        copies;
>>  	uint32_t        tgt_epoch;
>>  	uint64_t        offset;
>> +	uint32_t	pad[1];
>>  };
>>  
>>  struct sd_obj_rsp {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>>  	uint32_t        result;
>>  	uint32_t        copies;
>> -	uint32_t        pad[6];
>> +	uint32_t        pad[7];
>>  };
>>  
>>  struct sd_vdi_req {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>> @@ -150,13 +151,13 @@ struct sd_vdi_req {
>>  	uint32_t        base_vdi_id;
>>  	uint32_t	copies;
>>  	uint32_t        snapid;
>> -	uint32_t        pad[3];
>> +	uint32_t        pad[4];
>>  };
>>  
>>  struct sd_vdi_rsp {
>>  	uint8_t		proto_ver;
>>  	uint8_t		opcode;
>> -	uint16_t	flags;
>> +	uint32_t	flags;
>>  	uint32_t	epoch;
>>  	uint32_t        id;
>>  	uint32_t        data_length;
>> @@ -165,7 +166,7 @@ struct sd_vdi_rsp {
>>  	uint32_t        vdi_id;
>>  	uint32_t        attr_id;
>>  	uint32_t        copies;
>> -	uint32_t        pad[3];
>> +	uint32_t        pad[4];
>>  };
>>  
>>  struct sheepdog_inode {
> 
> I don't want to change network protocols easily.  This forces us to
> change client codes in QEMU too, and users suffer from the
> compatibility problem.
> 
> Isn't it much better to make all flags uint16_t?
> 


get/set_cluster_flags() use uint32_t and I think 16 flags would be
limited for future dev. And more, we'd better leave at least one extra
pad that is unused right now but would be ready for future use.

If we don't change it now, I guess, in the later future, we are likely
to face it again and a greater suffering to change this ABI.

Anyway, I am okay to make all flags uint16_t.

Thanks,
Yuan



More information about the sheepdog mailing list