xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_SPINODES);
}
+static inline bool xfs_sb_version_hasmetadir(struct xfs_sb *sbp)
+{
+ return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
+ xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_METADIR);
+}
+
+static inline bool xfs_sb_version_hasrtgroups(struct xfs_sb *sbp)
+{
+ return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
+ xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_RTGROUPS);
+}
+
#endif /* __LIBXFS_H__ */
*
* size is the size of data which is valid for this sb.
*/
- if (xfs_sb_version_hasmetauuid(sb))
+ if (xfs_sb_version_hasrtgroups(sb))
+ size = offsetof(struct xfs_dsb, sb_rgblocks)
+ + sizeof(sb->sb_rgblocks);
+ else if (xfs_sb_version_hasmetadir(sb))
+ size = offsetof(struct xfs_dsb, sb_metadirino)
+ + sizeof(sb->sb_metadirino);
+ else if (xfs_sb_version_hasmetauuid(sb))
size = offsetof(struct xfs_dsb, sb_meta_uuid)
+ sizeof(sb->sb_meta_uuid);
else if (xfs_sb_version_hascrc(sb))
mp->m_sb.sb_sectsize - size);
/* Preserve meta_uuid so we don't fail uuid checks */
memcpy(&sb->sb_meta_uuid, &tmpuuid, sizeof(uuid_t));
-
- /*
- * Preserve the parts of the incore super that extend
- * beyond the part that's supposed to match the ondisk
- * super byte for byte.
- */
- sb->sb_metadirino = mp->m_sb.sb_metadirino;
- sb->sb_rgblocks = mp->m_sb.sb_rgblocks;
- sb->sb_rgcount = mp->m_sb.sb_rgcount;
} else
do_warn(
_("would zero unused portion of %s superblock (AG #%u)\n"),