xfs: separate inode geometry
Separate the inode geometry information into a distinct structure. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
@@ -2537,13 +2537,14 @@ xfs_ifree_cluster(
|
||||
xfs_inode_log_item_t *iip;
|
||||
struct xfs_log_item *lip;
|
||||
struct xfs_perag *pag;
|
||||
struct xfs_ino_geometry *igeo = M_IGEO(mp);
|
||||
xfs_ino_t inum;
|
||||
|
||||
inum = xic->first_ino;
|
||||
pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, inum));
|
||||
nbufs = mp->m_ialloc_blks / mp->m_blocks_per_cluster;
|
||||
nbufs = igeo->ialloc_blks / igeo->blocks_per_cluster;
|
||||
|
||||
for (j = 0; j < nbufs; j++, inum += mp->m_inodes_per_cluster) {
|
||||
for (j = 0; j < nbufs; j++, inum += igeo->inodes_per_cluster) {
|
||||
/*
|
||||
* The allocation bitmap tells us which inodes of the chunk were
|
||||
* physically allocated. Skip the cluster if an inode falls into
|
||||
@@ -2551,7 +2552,7 @@ xfs_ifree_cluster(
|
||||
*/
|
||||
ioffset = inum - xic->first_ino;
|
||||
if ((xic->alloc & XFS_INOBT_MASK(ioffset)) == 0) {
|
||||
ASSERT(ioffset % mp->m_inodes_per_cluster == 0);
|
||||
ASSERT(ioffset % igeo->inodes_per_cluster == 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -2567,7 +2568,7 @@ xfs_ifree_cluster(
|
||||
* to mark all the active inodes on the buffer stale.
|
||||
*/
|
||||
bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, blkno,
|
||||
mp->m_bsize * mp->m_blocks_per_cluster,
|
||||
mp->m_bsize * igeo->blocks_per_cluster,
|
||||
XBF_UNMAPPED);
|
||||
|
||||
if (!bp)
|
||||
@@ -2614,7 +2615,7 @@ xfs_ifree_cluster(
|
||||
* transaction stale above, which means there is no point in
|
||||
* even trying to lock them.
|
||||
*/
|
||||
for (i = 0; i < mp->m_inodes_per_cluster; i++) {
|
||||
for (i = 0; i < igeo->inodes_per_cluster; i++) {
|
||||
retry:
|
||||
rcu_read_lock();
|
||||
ip = radix_tree_lookup(&pag->pag_ici_root,
|
||||
@@ -3476,19 +3477,20 @@ xfs_iflush_cluster(
|
||||
int cilist_size;
|
||||
struct xfs_inode **cilist;
|
||||
struct xfs_inode *cip;
|
||||
struct xfs_ino_geometry *igeo = M_IGEO(mp);
|
||||
int nr_found;
|
||||
int clcount = 0;
|
||||
int i;
|
||||
|
||||
pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino));
|
||||
|
||||
inodes_per_cluster = mp->m_inode_cluster_size >> mp->m_sb.sb_inodelog;
|
||||
inodes_per_cluster = igeo->inode_cluster_size >> mp->m_sb.sb_inodelog;
|
||||
cilist_size = inodes_per_cluster * sizeof(xfs_inode_t *);
|
||||
cilist = kmem_alloc(cilist_size, KM_MAYFAIL|KM_NOFS);
|
||||
if (!cilist)
|
||||
goto out_put;
|
||||
|
||||
mask = ~(((mp->m_inode_cluster_size >> mp->m_sb.sb_inodelog)) - 1);
|
||||
mask = ~(((igeo->inode_cluster_size >> mp->m_sb.sb_inodelog)) - 1);
|
||||
first_index = XFS_INO_TO_AGINO(mp, ip->i_ino) & mask;
|
||||
rcu_read_lock();
|
||||
/* really need a gang lookup range call here */
|
||||
|
Reference in New Issue
Block a user