diff options
Diffstat (limited to 'fs/xfs/xfs_qm.c')
| -rw-r--r-- | fs/xfs/xfs_qm.c | 22 | 
1 files changed, 12 insertions, 10 deletions
diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 2e86fa0cfc0..60eff476315 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -40,6 +40,7 @@  #include "xfs_utils.h"  #include "xfs_qm.h"  #include "xfs_trace.h" +#include "xfs_icache.h"  /*   * The global quota manager. There is only one of these for the entire @@ -891,7 +892,8 @@ xfs_qm_dqiter_bufs(  	while (blkcnt--) {  		error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp,  			      XFS_FSB_TO_DADDR(mp, bno), -			      mp->m_quotainfo->qi_dqchunklen, 0, &bp); +			      mp->m_quotainfo->qi_dqchunklen, 0, &bp, +			      &xfs_dquot_buf_ops);  		if (error)  			break; @@ -978,7 +980,8 @@ xfs_qm_dqiterate(  				while (rablkcnt--) {  					xfs_buf_readahead(mp->m_ddev_targp,  					       XFS_FSB_TO_DADDR(mp, rablkno), -					       mp->m_quotainfo->qi_dqchunklen); +					       mp->m_quotainfo->qi_dqchunklen, +					       NULL);  					rablkno++;  				}  			} @@ -1453,7 +1456,7 @@ xfs_qm_dqreclaim_one(  	int			error;  	if (!xfs_dqlock_nowait(dqp)) -		goto out_busy; +		goto out_move_tail;  	/*  	 * This dquot has acquired a reference in the meantime remove it from @@ -1476,7 +1479,7 @@ xfs_qm_dqreclaim_one(  	 * getting flushed to disk, we don't want to reclaim it.  	 */  	if (!xfs_dqflock_nowait(dqp)) -		goto out_busy; +		goto out_unlock_move_tail;  	if (XFS_DQ_IS_DIRTY(dqp)) {  		struct xfs_buf	*bp = NULL; @@ -1487,7 +1490,7 @@ xfs_qm_dqreclaim_one(  		if (error) {  			xfs_warn(mp, "%s: dquot %p flush failed",  				 __func__, dqp); -			goto out_busy; +			goto out_unlock_move_tail;  		}  		xfs_buf_delwri_queue(bp, buffer_list); @@ -1496,7 +1499,7 @@ xfs_qm_dqreclaim_one(  		 * Give the dquot another try on the freelist, as the  		 * flushing will take some time.  		 */ -		goto out_busy; +		goto out_unlock_move_tail;  	}  	xfs_dqfunlock(dqp); @@ -1515,14 +1518,13 @@ xfs_qm_dqreclaim_one(  	XFS_STATS_INC(xs_qm_dqreclaims);  	return; -out_busy: -	xfs_dqunlock(dqp); -  	/*  	 * Move the dquot to the tail of the list so that we don't spin on it.  	 */ +out_unlock_move_tail: +	xfs_dqunlock(dqp); +out_move_tail:  	list_move_tail(&dqp->q_lru, &qi->qi_lru_list); -  	trace_xfs_dqreclaim_busy(dqp);  	XFS_STATS_INC(xs_qm_dqreclaim_misses);  }  |