Skip to content

Commit 5877dc2

Browse files
committed
Merge tag 'better-ondisk-6.13_2024-11-05' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into staging-merge
xfs: improve ondisk structure checks [v5.5 10/10] Reorganize xfs_ondisk.h to group the build checks by type, then add a bunch of missing checks that were in xfs/122 but not the build system. With this, we can get rid of xfs/122. With a bit of luck, this should all go splendidly. Signed-off-by: Darrick J. Wong <djwong@kernel.org>
2 parents 052378a + 13877bc commit 5877dc2

File tree

1 file changed

+137
-49
lines changed

1 file changed

+137
-49
lines changed

fs/xfs/libxfs/xfs_ondisk.h

Lines changed: 137 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,46 @@
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+
2226
static inline void __init
2327
xfs_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

Comments
 (0)