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