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
>
|