Re: [PATCH, RFC] libxfs: check the size of on-disk data structures

Christoph Hellwig
2023-12-04T04:37:21Z

On Thu, Nov 30, 2023 at 06:06:58PM -0800, Darrick J. Wong wrote:
> I copy-pasta'd the whole mess from compiler_types.h and build_bug.h into
> include/xfs.h. It works, but it might be kinda egregious though.

Oh. I actually have a local patch to simply switch to static_assert
as that completly relies on the compiler and gives better output. I
haven't even written a proper commit log, but this is it:

diff --git a/fs/xfs/xfs_ondisk.h b/fs/xfs/xfs_ondisk.h
index 2f24bd42ac1dd7..3a5581ecb36d4c 100644
--- a/fs/xfs/xfs_ondisk.h
+++ b/fs/xfs/xfs_ondisk.h
@@ -7,16 +7,16 @@
#define __XFS_ONDISK_H

#define XFS_CHECK_STRUCT_SIZE(structname, size) \
- BUILD_BUG_ON_MSG(sizeof(structname) != (size), "XFS: sizeof(" \
- #structname ") is wrong, expected " #size)
+ static_assert(sizeof(structname) == (size), \
+ "XFS: sizeof(" #structname ") is wrong, expected " #size)

#define XFS_CHECK_OFFSET(structname, member, off) \
- BUILD_BUG_ON_MSG(offsetof(structname, member) != (off), \
+ static_assert(offsetof(structname, member) == (off), \
"XFS: offsetof(" #structname ", " #member ") is wrong, " \
"expected " #off)

#define XFS_CHECK_VALUE(value, expected) \
- BUILD_BUG_ON_MSG((value) != (expected), \
+ static_assert((value) == (expected), \
"XFS: value of " #value " is wrong, expected " #expected)

static inline void __init