Re: [PATCH] xfs: remove the magic numbers in xfs_btree_block-related len macros

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 2016/6/23 18:21, Carlos Maiolino wrote:
> On Thu, Jun 23, 2016 at 11:10:20AM +0800, Hou Tao wrote:
>> replace the magic numbers by offsetof(...) and sizeof(...), and add two
>> extra checks on xfs_check_ondisk_structs()
>>
>> Signed-off-by: Hou Tao <houtao1@xxxxxxxxxx>
>> ---
>>  fs/xfs/libxfs/xfs_format.h | 66 ++++++++++++++++++++++++++++------------------
>>  fs/xfs/xfs_ondisk.h        |  2 ++
>>  2 files changed, 43 insertions(+), 25 deletions(-)
>>
> 
> Particularly I liked the idea of defining the short and long block structures
> outside of xfs_btree_block and removing magic numbers is a good thing too.
> 
> you can consider it
> 
I had tried to do more than just move two structs out of struct xfs_btree_block,
but the modification would be huge, so i just keep it simple.

> Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
> 
Thanks for your review.


>> diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
>> index dc97eb21..d3069be 100644
>> --- a/fs/xfs/libxfs/xfs_format.h
>> +++ b/fs/xfs/libxfs/xfs_format.h
>> @@ -1435,41 +1435,57 @@ typedef __be64 xfs_bmbt_ptr_t, xfs_bmdr_ptr_t;
>>   * with the crc feature bit, and all accesses to them must be conditional on
>>   * that flag.
>>   */
>> +/* short form block */
>> +struct xfs_btree_sblock_part {
>> +	__be32		bb_leftsib;
>> +	__be32		bb_rightsib;
>> +
>> +	__be64		bb_blkno;
>> +	__be64		bb_lsn;
>> +	uuid_t		bb_uuid;
>> +	__be32		bb_owner;
>> +	__le32		bb_crc;
>> +};
>> +
>> +/* long form block */
>> +struct xfs_btree_lblock_part {
>> +	__be64		bb_leftsib;
>> +	__be64		bb_rightsib;
>> +
>> +	__be64		bb_blkno;
>> +	__be64		bb_lsn;
>> +	uuid_t		bb_uuid;
>> +	__be64		bb_owner;
>> +	__le32		bb_crc;
>> +	__be32		bb_pad; /* padding for alignment */
>> +};
>> +
>>  struct xfs_btree_block {
>>  	__be32		bb_magic;	/* magic number for block type */
>>  	__be16		bb_level;	/* 0 is a leaf */
>>  	__be16		bb_numrecs;	/* current # of data records */
>>  	union {
>> -		struct {
>> -			__be32		bb_leftsib;
>> -			__be32		bb_rightsib;
>> -
>> -			__be64		bb_blkno;
>> -			__be64		bb_lsn;
>> -			uuid_t		bb_uuid;
>> -			__be32		bb_owner;
>> -			__le32		bb_crc;
>> -		} s;			/* short form pointers */
>> -		struct	{
>> -			__be64		bb_leftsib;
>> -			__be64		bb_rightsib;
>> -
>> -			__be64		bb_blkno;
>> -			__be64		bb_lsn;
>> -			uuid_t		bb_uuid;
>> -			__be64		bb_owner;
>> -			__le32		bb_crc;
>> -			__be32		bb_pad; /* padding for alignment */
>> -		} l;			/* long form pointers */
>> +		struct xfs_btree_sblock_part s;
>> +		struct xfs_btree_lblock_part l;
>>  	} bb_u;				/* rest */
>>  };
>>  
>> -#define XFS_BTREE_SBLOCK_LEN	16	/* size of a short form block */
>> -#define XFS_BTREE_LBLOCK_LEN	24	/* size of a long form block */
>> +/* size of a short form block */
>> +#define XFS_BTREE_SBLOCK_LEN \
>> +	(offsetof(struct xfs_btree_block, bb_u) + \
>> +	 offsetof(struct xfs_btree_sblock_part, bb_blkno))
>> +/* size of a long form block */
>> +#define XFS_BTREE_LBLOCK_LEN \
>> +	(offsetof(struct xfs_btree_block, bb_u) + \
>> +	 offsetof(struct xfs_btree_lblock_part, bb_blkno))
>>  
>>  /* sizes of CRC enabled btree blocks */
>> -#define XFS_BTREE_SBLOCK_CRC_LEN	(XFS_BTREE_SBLOCK_LEN + 40)
>> -#define XFS_BTREE_LBLOCK_CRC_LEN	(XFS_BTREE_LBLOCK_LEN + 48)
>> +#define XFS_BTREE_SBLOCK_CRC_LEN \
>> +	(offsetof(struct xfs_btree_block, bb_u) + \
>> +	 sizeof(struct xfs_btree_sblock_part))
>> +#define XFS_BTREE_LBLOCK_CRC_LEN \
>> +	(offsetof(struct xfs_btree_block, bb_u) + \
>> +	 sizeof(struct xfs_btree_lblock_part))
>>  
>>  #define XFS_BTREE_SBLOCK_CRC_OFF \
>>  	offsetof(struct xfs_btree_block, bb_u.s.bb_crc)
>> diff --git a/fs/xfs/xfs_ondisk.h b/fs/xfs/xfs_ondisk.h
>> index 184c44e..6f06c48 100644
>> --- a/fs/xfs/xfs_ondisk.h
>> +++ b/fs/xfs/xfs_ondisk.h
>> @@ -34,6 +34,8 @@ xfs_check_ondisk_structs(void)
>>  	XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_key,		8);
>>  	XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_rec,		16);
>>  	XFS_CHECK_STRUCT_SIZE(struct xfs_bmdr_block,		4);
>> +	XFS_CHECK_STRUCT_SIZE(struct xfs_btree_sblock_part,	48);
>> +	XFS_CHECK_STRUCT_SIZE(struct xfs_btree_lblock_part,	64);
>>  	XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block,		72);
>>  	XFS_CHECK_STRUCT_SIZE(struct xfs_dinode,		176);
>>  	XFS_CHECK_STRUCT_SIZE(struct xfs_disk_dquot,		104);
>> -- 
>> 2.5.5
>>
>> _______________________________________________
>> xfs mailing list
>> xfs@xxxxxxxxxxx
>> http://oss.sgi.com/mailman/listinfo/xfs
> 

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs



[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux