]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: don't use the incore struct xfs_sb for offsets into struct xfs_dsb
authorDarrick J. Wong <djwong@kernel.org>
Tue, 2 Jul 2024 18:22:49 +0000 (11:22 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 2 Jul 2024 18:37:00 +0000 (11:37 -0700)
Currently, the XFS_SB_CRC_OFF macro uses the incore superblock struct
(xfs_sb) to compute the address of sb_crc within the ondisk superblock
struct (xfs_dsb).  This is a landmine if we ever change the layout of
the incore superblock (as we're about to do), so redefine the macro
to use xfs_dsb to compute the layout of xfs_dsb.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_format.h
fs/xfs/libxfs/xfs_ondisk.h

index 61f51becff4f768198d8bb70a27cb69c66c96109..e1bfee0c3b1a8c735bc18c698fb45ccc7ce110bd 100644 (file)
@@ -90,8 +90,7 @@ struct xfs_ifork;
 #define XFSLABEL_MAX                   12
 
 /*
- * Superblock - in core version.  Must match the ondisk version below.
- * Must be padded to 64 bit alignment.
+ * Superblock - in core version.  Must be padded to 64 bit alignment.
  */
 typedef struct xfs_sb {
        uint32_t        sb_magicnum;    /* magic number == XFS_SB_MAGIC */
@@ -178,10 +177,8 @@ typedef struct xfs_sb {
        /* must be padded to 64 bit alignment */
 } xfs_sb_t;
 
-#define XFS_SB_CRC_OFF         offsetof(struct xfs_sb, sb_crc)
-
 /*
- * Superblock - on disk version.  Must match the in core version above.
+ * Superblock - on disk version.
  * Must be padded to 64 bit alignment.
  */
 struct xfs_dsb {
@@ -265,6 +262,8 @@ struct xfs_dsb {
        /* must be padded to 64 bit alignment */
 };
 
+#define XFS_SB_CRC_OFF         offsetof(struct xfs_dsb, sb_crc)
+
 /*
  * Misc. Flags - warning - these will be cleared by xfs_repair unless
  * a feature bit is set when the flag is used.
index e8cdd77d03fa83efa34bc04e012aeed38dac09f9..23c133fd36f5bb10a3f867224c028a8ba1de4178 100644 (file)
@@ -85,6 +85,7 @@ xfs_check_ondisk_structs(void)
        XFS_CHECK_STRUCT_SIZE(xfs_attr_leaf_name_remote_t,      12);
         */
 
+       XFS_CHECK_OFFSET(struct xfs_dsb, sb_crc,                224);
        XFS_CHECK_OFFSET(xfs_attr_leaf_name_local_t, valuelen,  0);
        XFS_CHECK_OFFSET(xfs_attr_leaf_name_local_t, namelen,   2);
        XFS_CHECK_OFFSET(xfs_attr_leaf_name_local_t, nameval,   3);