aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_inode.c')
-rw-r--r--fs/xfs/xfs_inode.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 001aa893ed59..833028cf205f 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -2141,8 +2141,8 @@ xfs_ifree_cluster(
2141{ 2141{
2142 xfs_mount_t *mp = free_ip->i_mount; 2142 xfs_mount_t *mp = free_ip->i_mount;
2143 int blks_per_cluster; 2143 int blks_per_cluster;
2144 int inodes_per_cluster;
2144 int nbufs; 2145 int nbufs;
2145 int ninodes;
2146 int i, j; 2146 int i, j;
2147 xfs_daddr_t blkno; 2147 xfs_daddr_t blkno;
2148 xfs_buf_t *bp; 2148 xfs_buf_t *bp;
@@ -2152,18 +2152,11 @@ xfs_ifree_cluster(
2152 struct xfs_perag *pag; 2152 struct xfs_perag *pag;
2153 2153
2154 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, inum)); 2154 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, inum));
2155 if (mp->m_sb.sb_blocksize >= XFS_INODE_CLUSTER_SIZE(mp)) { 2155 blks_per_cluster = xfs_icluster_size_fsb(mp);
2156 blks_per_cluster = 1; 2156 inodes_per_cluster = blks_per_cluster << mp->m_sb.sb_inopblog;
2157 ninodes = mp->m_sb.sb_inopblock; 2157 nbufs = mp->m_ialloc_blks / blks_per_cluster;
2158 nbufs = XFS_IALLOC_BLOCKS(mp);
2159 } else {
2160 blks_per_cluster = XFS_INODE_CLUSTER_SIZE(mp) /
2161 mp->m_sb.sb_blocksize;
2162 ninodes = blks_per_cluster * mp->m_sb.sb_inopblock;
2163 nbufs = XFS_IALLOC_BLOCKS(mp) / blks_per_cluster;
2164 }
2165 2158
2166 for (j = 0; j < nbufs; j++, inum += ninodes) { 2159 for (j = 0; j < nbufs; j++, inum += inodes_per_cluster) {
2167 blkno = XFS_AGB_TO_DADDR(mp, XFS_INO_TO_AGNO(mp, inum), 2160 blkno = XFS_AGB_TO_DADDR(mp, XFS_INO_TO_AGNO(mp, inum),
2168 XFS_INO_TO_AGBNO(mp, inum)); 2161 XFS_INO_TO_AGBNO(mp, inum));
2169 2162
@@ -2225,7 +2218,7 @@ xfs_ifree_cluster(
2225 * transaction stale above, which means there is no point in 2218 * transaction stale above, which means there is no point in
2226 * even trying to lock them. 2219 * even trying to lock them.
2227 */ 2220 */
2228 for (i = 0; i < ninodes; i++) { 2221 for (i = 0; i < inodes_per_cluster; i++) {
2229retry: 2222retry:
2230 rcu_read_lock(); 2223 rcu_read_lock();
2231 ip = radix_tree_lookup(&pag->pag_ici_root, 2224 ip = radix_tree_lookup(&pag->pag_ici_root,
@@ -2906,13 +2899,13 @@ xfs_iflush_cluster(
2906 2899
2907 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); 2900 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino));
2908 2901
2909 inodes_per_cluster = XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog; 2902 inodes_per_cluster = mp->m_inode_cluster_size >> mp->m_sb.sb_inodelog;
2910 ilist_size = inodes_per_cluster * sizeof(xfs_inode_t *); 2903 ilist_size = inodes_per_cluster * sizeof(xfs_inode_t *);
2911 ilist = kmem_alloc(ilist_size, KM_MAYFAIL|KM_NOFS); 2904 ilist = kmem_alloc(ilist_size, KM_MAYFAIL|KM_NOFS);
2912 if (!ilist) 2905 if (!ilist)
2913 goto out_put; 2906 goto out_put;
2914 2907
2915 mask = ~(((XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog)) - 1); 2908 mask = ~(((mp->m_inode_cluster_size >> mp->m_sb.sb_inodelog)) - 1);
2916 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino) & mask; 2909 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino) & mask;
2917 rcu_read_lock(); 2910 rcu_read_lock();
2918 /* really need a gang lookup range call here */ 2911 /* really need a gang lookup range call here */