diff -upr orig/linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.c linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.c --- orig/linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.c 2011-05-10 01:03:02.000000000 +0200 +++ linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.c 2011-06-08 10:24:50.074080844 +0200 @@ -711,16 +711,24 @@ xfs_inode_set_reclaim_tag( } void -__xfs_inode_clear_reclaim_tag( - xfs_mount_t *mp, +__xfs_inode_clear_reclaim( xfs_perag_t *pag, xfs_inode_t *ip) { - radix_tree_tag_clear(&pag->pag_ici_root, - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); pag->pag_ici_reclaimable--; } +void +__xfs_inode_clear_reclaim_tag( + xfs_mount_t *mp, + xfs_perag_t *pag, + xfs_inode_t *ip) +{ + radix_tree_tag_clear(&pag->pag_ici_root, + XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); + __xfs_inode_clear_reclaim(pag, ip); +} + STATIC int xfs_reclaim_inode( struct xfs_inode *ip, diff -upr orig/linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.h linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.h --- orig/linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.h 2011-05-10 01:03:02.000000000 +0200 +++ linux-2.6.32.40/fs/xfs/linux-2.6/xfs_sync.h 2011-06-08 09:44:09.468747065 +0200 @@ -48,6 +48,7 @@ int xfs_reclaim_inodes(struct xfs_mount void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); void __xfs_inode_set_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); +void __xfs_inode_clear_reclaim(struct xfs_perag *pag, struct xfs_inode *ip); void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag, struct xfs_inode *ip); diff -upr orig/linux-2.6.32.40/fs/xfs/xfs_iget.c linux-2.6.32.40/fs/xfs/xfs_iget.c --- orig/linux-2.6.32.40/fs/xfs/xfs_iget.c 2011-05-10 01:03:02.000000000 +0200 +++ linux-2.6.32.40/fs/xfs/xfs_iget.c 2011-06-08 09:44:09.471746918 +0200 @@ -529,6 +529,7 @@ xfs_ireclaim( write_lock(&pag->pag_ici_lock); if (!radix_tree_delete(&pag->pag_ici_root, agino)) ASSERT(0); + __xfs_inode_clear_reclaim(pag, ip); write_unlock(&pag->pag_ici_lock); xfs_put_perag(mp, pag);