diff options
author | Hou Tao <houtao1@huawei.com> | 2016-07-19 20:43:11 -0400 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-07-19 20:43:11 -0400 |
commit | ad70328a503fae813a563dbe97dd3466ac079e8e (patch) | |
tree | dcad58ba5be6727b35e0a098131ba41e3be40eb1 | |
parent | fbfb24bf105449eab1339c20f6f6b81d02c59c13 (diff) |
xfs: remove the magic numbers in xfs_btree_block-related len macros
replace the magic numbers by offsetof(...) and sizeof(...), and add two
extra checks on xfs_check_ondisk_structs()
[dchinner: renamed header structures to be more descriptive]
Signed-off-by: Hou Tao <houtao1@huawei.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
-rw-r--r-- | fs/xfs/libxfs/xfs_format.h | 66 | ||||
-rw-r--r-- | fs/xfs/xfs_ondisk.h | 2 |
2 files changed, 43 insertions, 25 deletions
diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h index dc97eb21af07..adb204d40f22 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; | |||
1435 | * with the crc feature bit, and all accesses to them must be conditional on | 1435 | * with the crc feature bit, and all accesses to them must be conditional on |
1436 | * that flag. | 1436 | * that flag. |
1437 | */ | 1437 | */ |
1438 | /* short form block header */ | ||
1439 | struct xfs_btree_block_shdr { | ||
1440 | __be32 bb_leftsib; | ||
1441 | __be32 bb_rightsib; | ||
1442 | |||
1443 | __be64 bb_blkno; | ||
1444 | __be64 bb_lsn; | ||
1445 | uuid_t bb_uuid; | ||
1446 | __be32 bb_owner; | ||
1447 | __le32 bb_crc; | ||
1448 | }; | ||
1449 | |||
1450 | /* long form block header */ | ||
1451 | struct xfs_btree_block_lhdr { | ||
1452 | __be64 bb_leftsib; | ||
1453 | __be64 bb_rightsib; | ||
1454 | |||
1455 | __be64 bb_blkno; | ||
1456 | __be64 bb_lsn; | ||
1457 | uuid_t bb_uuid; | ||
1458 | __be64 bb_owner; | ||
1459 | __le32 bb_crc; | ||
1460 | __be32 bb_pad; /* padding for alignment */ | ||
1461 | }; | ||
1462 | |||
1438 | struct xfs_btree_block { | 1463 | struct xfs_btree_block { |
1439 | __be32 bb_magic; /* magic number for block type */ | 1464 | __be32 bb_magic; /* magic number for block type */ |
1440 | __be16 bb_level; /* 0 is a leaf */ | 1465 | __be16 bb_level; /* 0 is a leaf */ |
1441 | __be16 bb_numrecs; /* current # of data records */ | 1466 | __be16 bb_numrecs; /* current # of data records */ |
1442 | union { | 1467 | union { |
1443 | struct { | 1468 | struct xfs_btree_block_shdr s; |
1444 | __be32 bb_leftsib; | 1469 | struct xfs_btree_block_lhdr l; |
1445 | __be32 bb_rightsib; | ||
1446 | |||
1447 | __be64 bb_blkno; | ||
1448 | __be64 bb_lsn; | ||
1449 | uuid_t bb_uuid; | ||
1450 | __be32 bb_owner; | ||
1451 | __le32 bb_crc; | ||
1452 | } s; /* short form pointers */ | ||
1453 | struct { | ||
1454 | __be64 bb_leftsib; | ||
1455 | __be64 bb_rightsib; | ||
1456 | |||
1457 | __be64 bb_blkno; | ||
1458 | __be64 bb_lsn; | ||
1459 | uuid_t bb_uuid; | ||
1460 | __be64 bb_owner; | ||
1461 | __le32 bb_crc; | ||
1462 | __be32 bb_pad; /* padding for alignment */ | ||
1463 | } l; /* long form pointers */ | ||
1464 | } bb_u; /* rest */ | 1470 | } bb_u; /* rest */ |
1465 | }; | 1471 | }; |
1466 | 1472 | ||
1467 | #define XFS_BTREE_SBLOCK_LEN 16 /* size of a short form block */ | 1473 | /* size of a short form block */ |
1468 | #define XFS_BTREE_LBLOCK_LEN 24 /* size of a long form block */ | 1474 | #define XFS_BTREE_SBLOCK_LEN \ |
1475 | (offsetof(struct xfs_btree_block, bb_u) + \ | ||
1476 | offsetof(struct xfs_btree_block_shdr, bb_blkno)) | ||
1477 | /* size of a long form block */ | ||
1478 | #define XFS_BTREE_LBLOCK_LEN \ | ||
1479 | (offsetof(struct xfs_btree_block, bb_u) + \ | ||
1480 | offsetof(struct xfs_btree_block_lhdr, bb_blkno)) | ||
1469 | 1481 | ||
1470 | /* sizes of CRC enabled btree blocks */ | 1482 | /* sizes of CRC enabled btree blocks */ |
1471 | #define XFS_BTREE_SBLOCK_CRC_LEN (XFS_BTREE_SBLOCK_LEN + 40) | 1483 | #define XFS_BTREE_SBLOCK_CRC_LEN \ |
1472 | #define XFS_BTREE_LBLOCK_CRC_LEN (XFS_BTREE_LBLOCK_LEN + 48) | 1484 | (offsetof(struct xfs_btree_block, bb_u) + \ |
1485 | sizeof(struct xfs_btree_block_shdr)) | ||
1486 | #define XFS_BTREE_LBLOCK_CRC_LEN \ | ||
1487 | (offsetof(struct xfs_btree_block, bb_u) + \ | ||
1488 | sizeof(struct xfs_btree_block_lhdr)) | ||
1473 | 1489 | ||
1474 | #define XFS_BTREE_SBLOCK_CRC_OFF \ | 1490 | #define XFS_BTREE_SBLOCK_CRC_OFF \ |
1475 | offsetof(struct xfs_btree_block, bb_u.s.bb_crc) | 1491 | 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 184c44effdd5..20a0d266964b 100644 --- a/fs/xfs/xfs_ondisk.h +++ b/fs/xfs/xfs_ondisk.h | |||
@@ -34,6 +34,8 @@ xfs_check_ondisk_structs(void) | |||
34 | XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_key, 8); | 34 | XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_key, 8); |
35 | XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_rec, 16); | 35 | XFS_CHECK_STRUCT_SIZE(struct xfs_bmbt_rec, 16); |
36 | XFS_CHECK_STRUCT_SIZE(struct xfs_bmdr_block, 4); | 36 | XFS_CHECK_STRUCT_SIZE(struct xfs_bmdr_block, 4); |
37 | XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block_shdr, 48); | ||
38 | XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block_lhdr, 64); | ||
37 | XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block, 72); | 39 | XFS_CHECK_STRUCT_SIZE(struct xfs_btree_block, 72); |
38 | XFS_CHECK_STRUCT_SIZE(struct xfs_dinode, 176); | 40 | XFS_CHECK_STRUCT_SIZE(struct xfs_dinode, 176); |
39 | XFS_CHECK_STRUCT_SIZE(struct xfs_disk_dquot, 104); | 41 | XFS_CHECK_STRUCT_SIZE(struct xfs_disk_dquot, 104); |