diff options
Diffstat (limited to 'fs/xfs/xfs_inode.c')
-rw-r--r-- | fs/xfs/xfs_inode.c | 23 |
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++) { |
2229 | retry: | 2222 | retry: |
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 */ |