extern int max_trans_res(unsigned long agsize, int crcs_enabled, int dirversion,
int sectorlog, int blocklog, int inodelog, int dirblocklog,
int logversion, int log_sunit, int finobt, int rmapbt,
- int reflink);
+ int reflink, int inode_align);
#endif /* __XFS_MULTIDISK_H__ */
mp->m_maxicount = 0;
mp->m_inode_cluster_size = XFS_INODE_BIG_CLUSTER_SIZE;
+ if (xfs_sb_version_hascrc(&mp->m_sb)) {
+ int new_size = mp->m_inode_cluster_size;
+
+ new_size *= mp->m_sb.sb_inodesize / XFS_DINODE_MIN_SIZE;
+ if (mp->m_sb.sb_inoalignmt >= XFS_B_TO_FSBT(mp, new_size))
+ mp->m_inode_cluster_size = new_size;
+ }
/*
* Set whether we're using stripe alignment.
int log_sunit,
int finobt,
int rmapbt,
- int reflink)
+ int reflink,
+ int inode_align)
{
xfs_sb_t *sbp;
xfs_mount_t mount;
sbp->sb_inopblock = 1 << (blocklog - inodelog);
sbp->sb_dirblklog = dirblocklog - blocklog;
+ if (inode_align) {
+ int cluster_size = XFS_INODE_BIG_CLUSTER_SIZE;
+ if (crcs_enabled)
+ cluster_size *= sbp->sb_inodesize / XFS_DINODE_MIN_SIZE;
+ sbp->sb_inoalignmt = cluster_size >> blocklog;
+ }
+
if (log_sunit > 0) {
log_sunit <<= blocklog;
logversion = 2;
sb_feat.crcs_enabled, sb_feat.dir_version,
sectorlog, blocklog, inodelog, dirblocklog,
sb_feat.log_version, lsunit, sb_feat.finobt,
- sb_feat.rmapbt, sb_feat.reflink);
+ sb_feat.rmapbt, sb_feat.reflink,
+ sb_feat.inode_align);
ASSERT(min_logblocks);
min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, min_logblocks);
if (!logsize && dblocks >= (1024*1024*1024) >> blocklog)