diff options
Diffstat (limited to 'fs/xfs/xfs_vnodeops.c')
| -rw-r--r-- | fs/xfs/xfs_vnodeops.c | 9 | 
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index bde4a1ad90f..15bc01b2d6a 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -3876,7 +3876,7 @@ xfs_finish_reclaim(  	int		locked,  	int		sync_mode)  { -	xfs_ihash_t	*ih = ip->i_hash; +	xfs_perag_t	*pag = xfs_get_perag(ip->i_mount, ip->i_ino);  	bhv_vnode_t	*vp = XFS_ITOV_NULL(ip);  	int		error; @@ -3888,12 +3888,12 @@ xfs_finish_reclaim(  	 * Once we have the XFS_IRECLAIM flag set it will not touch  	 * us.  	 */ -	write_lock(&ih->ih_lock); +	write_lock(&pag->pag_ici_lock);  	spin_lock(&ip->i_flags_lock);  	if (__xfs_iflags_test(ip, XFS_IRECLAIM) ||  	    (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) && vp == NULL)) {  		spin_unlock(&ip->i_flags_lock); -		write_unlock(&ih->ih_lock); +		write_unlock(&pag->pag_ici_lock);  		if (locked) {  			xfs_ifunlock(ip);  			xfs_iunlock(ip, XFS_ILOCK_EXCL); @@ -3902,7 +3902,8 @@ xfs_finish_reclaim(  	}  	__xfs_iflags_set(ip, XFS_IRECLAIM);  	spin_unlock(&ip->i_flags_lock); -	write_unlock(&ih->ih_lock); +	write_unlock(&pag->pag_ici_lock); +	xfs_put_perag(ip->i_mount, pag);  	/*  	 * If the inode is still dirty, then flush it out.  If the inode  |