1919 static_assert((value) == (expected), \
2020 "XFS: value of " #value " is wrong, expected " #expected)
2121
22+ #define XFS_CHECK_SB_OFFSET (field , offset ) \
23+ XFS_CHECK_OFFSET(struct xfs_dsb, field, offset); \
24+ XFS_CHECK_OFFSET(struct xfs_sb, field, offset);
25+
2226static inline void __init
2327xfs_check_ondisk_structs (void )
2428{
25- /* ag/ file structures */
29+ /* file structures */
2630 XFS_CHECK_STRUCT_SIZE (struct xfs_acl , 4 );
2731 XFS_CHECK_STRUCT_SIZE (struct xfs_acl_entry , 12 );
28- XFS_CHECK_STRUCT_SIZE (struct xfs_agf , 224 );
29- XFS_CHECK_STRUCT_SIZE (struct xfs_agfl , 36 );
30- XFS_CHECK_STRUCT_SIZE (struct xfs_agi , 344 );
3132 XFS_CHECK_STRUCT_SIZE (struct xfs_bmbt_key , 8 );
3233 XFS_CHECK_STRUCT_SIZE (struct xfs_bmbt_rec , 16 );
3334 XFS_CHECK_STRUCT_SIZE (struct xfs_bmdr_block , 4 );
34- XFS_CHECK_STRUCT_SIZE (struct xfs_btree_block_shdr , 48 );
35- XFS_CHECK_STRUCT_SIZE (struct xfs_btree_block_lhdr , 64 );
36- XFS_CHECK_STRUCT_SIZE (struct xfs_btree_block , 72 );
3735 XFS_CHECK_STRUCT_SIZE (struct xfs_dinode , 176 );
3836 XFS_CHECK_STRUCT_SIZE (struct xfs_disk_dquot , 104 );
3937 XFS_CHECK_STRUCT_SIZE (struct xfs_dqblk , 136 );
40- XFS_CHECK_STRUCT_SIZE (struct xfs_dsb , 288 );
4138 XFS_CHECK_STRUCT_SIZE (struct xfs_dsymlink_hdr , 56 );
39+ XFS_CHECK_STRUCT_SIZE (xfs_timestamp_t , 8 );
40+ XFS_CHECK_STRUCT_SIZE (struct xfs_legacy_timestamp , 8 );
41+
42+ /* space btrees */
43+ XFS_CHECK_STRUCT_SIZE (struct xfs_agf , 224 );
44+ XFS_CHECK_STRUCT_SIZE (struct xfs_agfl , 36 );
45+ XFS_CHECK_STRUCT_SIZE (struct xfs_agi , 344 );
46+ XFS_CHECK_STRUCT_SIZE (struct xfs_alloc_rec , 8 );
47+ XFS_CHECK_STRUCT_SIZE (struct xfs_btree_block , 72 );
48+ XFS_CHECK_STRUCT_SIZE (struct xfs_btree_block_lhdr , 64 );
49+ XFS_CHECK_STRUCT_SIZE (struct xfs_btree_block_shdr , 48 );
4250 XFS_CHECK_STRUCT_SIZE (struct xfs_inobt_key , 4 );
4351 XFS_CHECK_STRUCT_SIZE (struct xfs_inobt_rec , 16 );
4452 XFS_CHECK_STRUCT_SIZE (struct xfs_refcount_key , 4 );
4553 XFS_CHECK_STRUCT_SIZE (struct xfs_refcount_rec , 12 );
4654 XFS_CHECK_STRUCT_SIZE (struct xfs_rmap_key , 20 );
4755 XFS_CHECK_STRUCT_SIZE (struct xfs_rmap_rec , 24 );
48- XFS_CHECK_STRUCT_SIZE (xfs_timestamp_t , 8 );
49- XFS_CHECK_STRUCT_SIZE (struct xfs_legacy_timestamp , 8 );
5056 XFS_CHECK_STRUCT_SIZE (xfs_alloc_key_t , 8 );
5157 XFS_CHECK_STRUCT_SIZE (xfs_alloc_ptr_t , 4 );
52- XFS_CHECK_STRUCT_SIZE (xfs_alloc_rec_t , 8 );
5358 XFS_CHECK_STRUCT_SIZE (xfs_inobt_ptr_t , 4 );
5459 XFS_CHECK_STRUCT_SIZE (xfs_refcount_ptr_t , 4 );
5560 XFS_CHECK_STRUCT_SIZE (xfs_rmap_ptr_t , 4 );
56- XFS_CHECK_STRUCT_SIZE (struct xfs_rtsb , 56 );
61+ XFS_CHECK_STRUCT_SIZE (xfs_bmdr_key_t , 8 );
5762
5863 /* dir/attr trees */
5964 XFS_CHECK_STRUCT_SIZE (struct xfs_attr3_leaf_hdr , 80 );
@@ -68,62 +73,76 @@ xfs_check_ondisk_structs(void)
6873 XFS_CHECK_STRUCT_SIZE (struct xfs_dir3_free_hdr , 64 );
6974 XFS_CHECK_STRUCT_SIZE (struct xfs_dir3_leaf , 64 );
7075 XFS_CHECK_STRUCT_SIZE (struct xfs_dir3_leaf_hdr , 64 );
71- XFS_CHECK_STRUCT_SIZE (xfs_attr_leaf_entry_t , 8 );
72- XFS_CHECK_STRUCT_SIZE (xfs_attr_leaf_hdr_t , 32 );
73- XFS_CHECK_STRUCT_SIZE (xfs_attr_leaf_map_t , 4 );
74- XFS_CHECK_STRUCT_SIZE (xfs_attr_leaf_name_local_t , 4 );
76+ XFS_CHECK_STRUCT_SIZE (struct xfs_attr_leaf_entry , 8 );
77+ XFS_CHECK_STRUCT_SIZE (struct xfs_attr_leaf_hdr , 32 );
78+ XFS_CHECK_STRUCT_SIZE (struct xfs_attr_leaf_map , 4 );
79+ XFS_CHECK_STRUCT_SIZE (struct xfs_attr_leaf_name_local , 4 );
7580
7681 /* realtime structures */
82+ XFS_CHECK_STRUCT_SIZE (struct xfs_rtsb , 56 );
7783 XFS_CHECK_STRUCT_SIZE (union xfs_rtword_raw , 4 );
7884 XFS_CHECK_STRUCT_SIZE (union xfs_suminfo_raw , 4 );
7985 XFS_CHECK_STRUCT_SIZE (struct xfs_rtbuf_blkinfo , 48 );
8086
8187 /*
82- * m68k has problems with xfs_attr_leaf_name_remote_t , but we pad it to
83- * 4 bytes anyway so it's not obviously a problem. Hence for the moment
84- * we don't check this structure. This can be re-instated when the attr
85- * definitions are updated to use c99 VLA definitions.
88+ * m68k has problems with struct xfs_attr_leaf_name_remote , but we pad
89+ * it to 4 bytes anyway so it's not obviously a problem. Hence for the
90+ * moment we don't check this structure. This can be re-instated when
91+ * the attr definitions are updated to use c99 VLA definitions.
8692 *
87- XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_name_remote_t , 12);
93+ XFS_CHECK_STRUCT_SIZE(struct xfs_attr_leaf_name_remote , 12);
8894 */
8995
90- XFS_CHECK_OFFSET (struct xfs_dsb , sb_crc , 224 );
91- XFS_CHECK_OFFSET (xfs_attr_leaf_name_local_t , valuelen , 0 );
92- XFS_CHECK_OFFSET (xfs_attr_leaf_name_local_t , namelen , 2 );
93- XFS_CHECK_OFFSET (xfs_attr_leaf_name_local_t , nameval , 3 );
94- XFS_CHECK_OFFSET (xfs_attr_leaf_name_remote_t , valueblk , 0 );
95- XFS_CHECK_OFFSET (xfs_attr_leaf_name_remote_t , valuelen , 4 );
96- XFS_CHECK_OFFSET (xfs_attr_leaf_name_remote_t , namelen , 8 );
97- XFS_CHECK_OFFSET (xfs_attr_leaf_name_remote_t , name , 9 );
98- XFS_CHECK_STRUCT_SIZE (xfs_attr_leafblock_t , 32 );
96+ XFS_CHECK_OFFSET (struct xfs_attr_leaf_name_local , valuelen , 0 );
97+ XFS_CHECK_OFFSET (struct xfs_attr_leaf_name_local , namelen , 2 );
98+ XFS_CHECK_OFFSET (struct xfs_attr_leaf_name_local , nameval , 3 );
99+ XFS_CHECK_OFFSET (struct xfs_attr_leaf_name_remote , valueblk , 0 );
100+ XFS_CHECK_OFFSET (struct xfs_attr_leaf_name_remote , valuelen , 4 );
101+ XFS_CHECK_OFFSET (struct xfs_attr_leaf_name_remote , namelen , 8 );
102+ XFS_CHECK_OFFSET (struct xfs_attr_leaf_name_remote , name , 9 );
103+ XFS_CHECK_STRUCT_SIZE (struct xfs_attr_leafblock , 32 );
99104 XFS_CHECK_STRUCT_SIZE (struct xfs_attr_sf_hdr , 4 );
100105 XFS_CHECK_OFFSET (struct xfs_attr_sf_hdr , totsize , 0 );
101106 XFS_CHECK_OFFSET (struct xfs_attr_sf_hdr , count , 2 );
102107 XFS_CHECK_OFFSET (struct xfs_attr_sf_entry , namelen , 0 );
103108 XFS_CHECK_OFFSET (struct xfs_attr_sf_entry , valuelen , 1 );
104109 XFS_CHECK_OFFSET (struct xfs_attr_sf_entry , flags , 2 );
105110 XFS_CHECK_OFFSET (struct xfs_attr_sf_entry , nameval , 3 );
106- XFS_CHECK_STRUCT_SIZE (xfs_da_blkinfo_t , 12 );
107- XFS_CHECK_STRUCT_SIZE (xfs_da_intnode_t , 16 );
108- XFS_CHECK_STRUCT_SIZE (xfs_da_node_entry_t , 8 );
109- XFS_CHECK_STRUCT_SIZE (xfs_da_node_hdr_t , 16 );
110- XFS_CHECK_STRUCT_SIZE (xfs_dir2_data_free_t , 4 );
111- XFS_CHECK_STRUCT_SIZE (xfs_dir2_data_hdr_t , 16 );
112- XFS_CHECK_OFFSET (xfs_dir2_data_unused_t , freetag , 0 );
113- XFS_CHECK_OFFSET (xfs_dir2_data_unused_t , length , 2 );
114- XFS_CHECK_STRUCT_SIZE (xfs_dir2_free_hdr_t , 16 );
115- XFS_CHECK_STRUCT_SIZE (xfs_dir2_free_t , 16 );
116- XFS_CHECK_STRUCT_SIZE (xfs_dir2_leaf_entry_t , 8 );
117- XFS_CHECK_STRUCT_SIZE (xfs_dir2_leaf_hdr_t , 16 );
118- XFS_CHECK_STRUCT_SIZE (xfs_dir2_leaf_t , 16 );
119- XFS_CHECK_STRUCT_SIZE (xfs_dir2_leaf_tail_t , 4 );
120- XFS_CHECK_STRUCT_SIZE (xfs_dir2_sf_entry_t , 3 );
121- XFS_CHECK_OFFSET (xfs_dir2_sf_entry_t , namelen , 0 );
122- XFS_CHECK_OFFSET (xfs_dir2_sf_entry_t , offset , 1 );
123- XFS_CHECK_OFFSET (xfs_dir2_sf_entry_t , name , 3 );
124- XFS_CHECK_STRUCT_SIZE (xfs_dir2_sf_hdr_t , 10 );
111+ XFS_CHECK_STRUCT_SIZE (struct xfs_da_blkinfo , 12 );
112+ XFS_CHECK_STRUCT_SIZE (struct xfs_da_intnode , 16 );
113+ XFS_CHECK_STRUCT_SIZE (struct xfs_da_node_entry , 8 );
114+ XFS_CHECK_STRUCT_SIZE (struct xfs_da_node_hdr , 16 );
115+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_data_free , 4 );
116+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_data_hdr , 16 );
117+ XFS_CHECK_OFFSET (struct xfs_dir2_data_unused , freetag , 0 );
118+ XFS_CHECK_OFFSET (struct xfs_dir2_data_unused , length , 2 );
119+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_free_hdr , 16 );
120+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_free , 16 );
121+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_leaf_entry , 8 );
122+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_leaf_hdr , 16 );
123+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_leaf , 16 );
124+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_leaf_tail , 4 );
125+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_sf_entry , 3 );
126+ XFS_CHECK_OFFSET (struct xfs_dir2_sf_entry , namelen , 0 );
127+ XFS_CHECK_OFFSET (struct xfs_dir2_sf_entry , offset , 1 );
128+ XFS_CHECK_OFFSET (struct xfs_dir2_sf_entry , name , 3 );
129+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_sf_hdr , 10 );
125130 XFS_CHECK_STRUCT_SIZE (struct xfs_parent_rec , 12 );
126131
132+ /* ondisk dir/attr structures from xfs/122 */
133+ XFS_CHECK_STRUCT_SIZE (struct xfs_attr_sf_entry , 3 );
134+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_data_free , 4 );
135+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_data_hdr , 16 );
136+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_data_unused , 6 );
137+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_free , 16 );
138+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_free_hdr , 16 );
139+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_leaf , 16 );
140+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_leaf_entry , 8 );
141+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_leaf_hdr , 16 );
142+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_leaf_tail , 4 );
143+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_sf_entry , 3 );
144+ XFS_CHECK_STRUCT_SIZE (struct xfs_dir2_sf_hdr , 10 );
145+
127146 /* log structures */
128147 XFS_CHECK_STRUCT_SIZE (struct xfs_buf_log_format , 88 );
129148 XFS_CHECK_STRUCT_SIZE (struct xfs_dq_logformat , 24 );
@@ -159,6 +178,11 @@ xfs_check_ondisk_structs(void)
159178 XFS_CHECK_OFFSET (struct xfs_efi_log_format_32 , efi_extents , 16 );
160179 XFS_CHECK_OFFSET (struct xfs_efi_log_format_64 , efi_extents , 16 );
161180
181+ /* ondisk log structures from xfs/122 */
182+ XFS_CHECK_STRUCT_SIZE (struct xfs_unmount_log_format , 8 );
183+ XFS_CHECK_STRUCT_SIZE (struct xfs_xmd_log_format , 16 );
184+ XFS_CHECK_STRUCT_SIZE (struct xfs_xmi_log_format , 88 );
185+
162186 /* parent pointer ioctls */
163187 XFS_CHECK_STRUCT_SIZE (struct xfs_getparents_rec , 32 );
164188 XFS_CHECK_STRUCT_SIZE (struct xfs_getparents , 40 );
@@ -203,6 +227,70 @@ xfs_check_ondisk_structs(void)
203227 XFS_CHECK_VALUE (XFS_DQ_BIGTIME_EXPIRY_MIN << XFS_DQ_BIGTIME_SHIFT , 4 );
204228 XFS_CHECK_VALUE (XFS_DQ_BIGTIME_EXPIRY_MAX << XFS_DQ_BIGTIME_SHIFT ,
205229 16299260424LL );
230+
231+ /* superblock field checks we got from xfs/122 */
232+ XFS_CHECK_STRUCT_SIZE (struct xfs_dsb , 288 );
233+ XFS_CHECK_STRUCT_SIZE (struct xfs_sb , 288 );
234+ XFS_CHECK_SB_OFFSET (sb_magicnum , 0 );
235+ XFS_CHECK_SB_OFFSET (sb_blocksize , 4 );
236+ XFS_CHECK_SB_OFFSET (sb_dblocks , 8 );
237+ XFS_CHECK_SB_OFFSET (sb_rblocks , 16 );
238+ XFS_CHECK_SB_OFFSET (sb_rextents , 24 );
239+ XFS_CHECK_SB_OFFSET (sb_uuid , 32 );
240+ XFS_CHECK_SB_OFFSET (sb_logstart , 48 );
241+ XFS_CHECK_SB_OFFSET (sb_rootino , 56 );
242+ XFS_CHECK_SB_OFFSET (sb_rbmino , 64 );
243+ XFS_CHECK_SB_OFFSET (sb_rsumino , 72 );
244+ XFS_CHECK_SB_OFFSET (sb_rextsize , 80 );
245+ XFS_CHECK_SB_OFFSET (sb_agblocks , 84 );
246+ XFS_CHECK_SB_OFFSET (sb_agcount , 88 );
247+ XFS_CHECK_SB_OFFSET (sb_rbmblocks , 92 );
248+ XFS_CHECK_SB_OFFSET (sb_logblocks , 96 );
249+ XFS_CHECK_SB_OFFSET (sb_versionnum , 100 );
250+ XFS_CHECK_SB_OFFSET (sb_sectsize , 102 );
251+ XFS_CHECK_SB_OFFSET (sb_inodesize , 104 );
252+ XFS_CHECK_SB_OFFSET (sb_inopblock , 106 );
253+ XFS_CHECK_SB_OFFSET (sb_blocklog , 120 );
254+ XFS_CHECK_SB_OFFSET (sb_fname [12 ], 120 );
255+ XFS_CHECK_SB_OFFSET (sb_sectlog , 121 );
256+ XFS_CHECK_SB_OFFSET (sb_inodelog , 122 );
257+ XFS_CHECK_SB_OFFSET (sb_inopblog , 123 );
258+ XFS_CHECK_SB_OFFSET (sb_agblklog , 124 );
259+ XFS_CHECK_SB_OFFSET (sb_rextslog , 125 );
260+ XFS_CHECK_SB_OFFSET (sb_inprogress , 126 );
261+ XFS_CHECK_SB_OFFSET (sb_imax_pct , 127 );
262+ XFS_CHECK_SB_OFFSET (sb_icount , 128 );
263+ XFS_CHECK_SB_OFFSET (sb_ifree , 136 );
264+ XFS_CHECK_SB_OFFSET (sb_fdblocks , 144 );
265+ XFS_CHECK_SB_OFFSET (sb_frextents , 152 );
266+ XFS_CHECK_SB_OFFSET (sb_uquotino , 160 );
267+ XFS_CHECK_SB_OFFSET (sb_gquotino , 168 );
268+ XFS_CHECK_SB_OFFSET (sb_qflags , 176 );
269+ XFS_CHECK_SB_OFFSET (sb_flags , 178 );
270+ XFS_CHECK_SB_OFFSET (sb_shared_vn , 179 );
271+ XFS_CHECK_SB_OFFSET (sb_inoalignmt , 180 );
272+ XFS_CHECK_SB_OFFSET (sb_unit , 184 );
273+ XFS_CHECK_SB_OFFSET (sb_width , 188 );
274+ XFS_CHECK_SB_OFFSET (sb_dirblklog , 192 );
275+ XFS_CHECK_SB_OFFSET (sb_logsectlog , 193 );
276+ XFS_CHECK_SB_OFFSET (sb_logsectsize , 194 );
277+ XFS_CHECK_SB_OFFSET (sb_logsunit , 196 );
278+ XFS_CHECK_SB_OFFSET (sb_features2 , 200 );
279+ XFS_CHECK_SB_OFFSET (sb_bad_features2 , 204 );
280+ XFS_CHECK_SB_OFFSET (sb_features_compat , 208 );
281+ XFS_CHECK_SB_OFFSET (sb_features_ro_compat , 212 );
282+ XFS_CHECK_SB_OFFSET (sb_features_incompat , 216 );
283+ XFS_CHECK_SB_OFFSET (sb_features_log_incompat , 220 );
284+ XFS_CHECK_SB_OFFSET (sb_crc , 224 );
285+ XFS_CHECK_SB_OFFSET (sb_spino_align , 228 );
286+ XFS_CHECK_SB_OFFSET (sb_pquotino , 232 );
287+ XFS_CHECK_SB_OFFSET (sb_lsn , 240 );
288+ XFS_CHECK_SB_OFFSET (sb_meta_uuid , 248 );
289+ XFS_CHECK_SB_OFFSET (sb_metadirino , 264 );
290+ XFS_CHECK_SB_OFFSET (sb_rgcount , 272 );
291+ XFS_CHECK_SB_OFFSET (sb_rgextents , 276 );
292+ XFS_CHECK_SB_OFFSET (sb_rgblklog , 280 );
293+ XFS_CHECK_SB_OFFSET (sb_pad , 281 );
206294}
207295
208296#endif /* __XFS_ONDISK_H */
0 commit comments