summaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_mount.c
diff options
context:
space:
mode:
authorDarrick J. Wong2019-06-05 20:19:35 +0200
committerDarrick J. Wong2019-06-12 17:37:40 +0200
commit494dba7b276e12bc3f6ff2b9b584b6e9f693af45 (patch)
tree77b3aaafda4a18bc74fef64845c6daa4cb218a4b /fs/xfs/xfs_mount.c
parentxfs: separate inode geometry (diff)
downloadkernel-qcow2-linux-494dba7b276e12bc3f6ff2b9b584b6e9f693af45.tar.gz
kernel-qcow2-linux-494dba7b276e12bc3f6ff2b9b584b6e9f693af45.tar.xz
kernel-qcow2-linux-494dba7b276e12bc3f6ff2b9b584b6e9f693af45.zip
xfs: refactor inode geometry setup routines
Migrate all of the inode geometry setup code from xfs_mount.c into a single libxfs function that we can share with xfsprogs. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
Diffstat (limited to 'fs/xfs/xfs_mount.c')
-rw-r--r--fs/xfs/xfs_mount.c83
1 files changed, 1 insertions, 82 deletions
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
index 73e5cfc4d0ec..81d6535b24b4 100644
--- a/fs/xfs/xfs_mount.c
+++ b/fs/xfs/xfs_mount.c
@@ -430,32 +430,6 @@ xfs_update_alignment(xfs_mount_t *mp)
}
/*
- * Set the maximum inode count for this filesystem
- */
-STATIC void
-xfs_set_maxicount(
- struct xfs_mount *mp)
-{
- struct xfs_sb *sbp = &(mp->m_sb);
- struct xfs_ino_geometry *igeo = M_IGEO(mp);
- uint64_t icount;
-
- if (sbp->sb_imax_pct) {
- /*
- * Make sure the maximum inode count is a multiple
- * of the units we allocate inodes in.
- */
- icount = sbp->sb_dblocks * sbp->sb_imax_pct;
- do_div(icount, 100);
- do_div(icount, igeo->ialloc_blks);
- igeo->maxicount = XFS_FSB_TO_INO(mp,
- icount * igeo->ialloc_blks);
- } else {
- igeo->maxicount = 0;
- }
-}
-
-/*
* Set the default minimum read and write sizes unless
* already specified in a mount option.
* We use smaller I/O sizes when the file system
@@ -511,29 +485,6 @@ xfs_set_low_space_thresholds(
}
}
-
-/*
- * Set whether we're using inode alignment.
- */
-STATIC void
-xfs_set_inoalignment(xfs_mount_t *mp)
-{
- if (xfs_sb_version_hasalign(&mp->m_sb) &&
- mp->m_sb.sb_inoalignmt >= xfs_icluster_size_fsb(mp))
- M_IGEO(mp)->inoalign_mask = mp->m_sb.sb_inoalignmt - 1;
- else
- M_IGEO(mp)->inoalign_mask = 0;
- /*
- * If we are using stripe alignment, check whether
- * the stripe unit is a multiple of the inode alignment
- */
- if (mp->m_dalign && M_IGEO(mp)->inoalign_mask &&
- !(mp->m_dalign & M_IGEO(mp)->inoalign_mask))
- M_IGEO(mp)->ialloc_align = mp->m_dalign;
- else
- M_IGEO(mp)->ialloc_align = 0;
-}
-
/*
* Check that the data (and log if separate) is an ok size.
*/
@@ -752,12 +703,10 @@ xfs_mountfs(
xfs_alloc_compute_maxlevels(mp);
xfs_bmap_compute_maxlevels(mp, XFS_DATA_FORK);
xfs_bmap_compute_maxlevels(mp, XFS_ATTR_FORK);
- xfs_ialloc_compute_maxlevels(mp);
+ xfs_ialloc_setup_geometry(mp);
xfs_rmapbt_compute_maxlevels(mp);
xfs_refcountbt_compute_maxlevels(mp);
- xfs_set_maxicount(mp);
-
/* enable fail_at_unmount as default */
mp->m_fail_unmount = true;
@@ -791,31 +740,6 @@ xfs_mountfs(
xfs_set_low_space_thresholds(mp);
/*
- * Set the inode cluster size.
- * This may still be overridden by the file system
- * block size if it is larger than the chosen cluster size.
- *
- * For v5 filesystems, scale the cluster size with the inode size to
- * keep a constant ratio of inode per cluster buffer, but only if mkfs
- * has set the inode alignment value appropriately for larger cluster
- * sizes.
- */
- igeo->inode_cluster_size = XFS_INODE_BIG_CLUSTER_SIZE;
- if (xfs_sb_version_hascrc(&mp->m_sb)) {
- int new_size = igeo->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))
- igeo->inode_cluster_size = new_size;
- }
- igeo->blocks_per_cluster = xfs_icluster_size_fsb(mp);
- igeo->inodes_per_cluster = XFS_FSB_TO_INO(mp,
- igeo->blocks_per_cluster);
- igeo->cluster_align = xfs_ialloc_cluster_alignment(mp);
- igeo->cluster_align_inodes = XFS_FSB_TO_INO(mp,
- igeo->cluster_align);
-
- /*
* If enabled, sparse inode chunk alignment is expected to match the
* cluster size. Full inode chunk alignment must match the chunk size,
* but that is checked on sb read verification...
@@ -832,11 +756,6 @@ xfs_mountfs(
}
/*
- * Set inode alignment fields
- */
- xfs_set_inoalignment(mp);
-
- /*
* Check that the data (and log if separate) is an ok size.
*/
error = xfs_check_sizes(mp);