On Tue, Dec 06, 2011 at 04:58:18PM -0500, Christoph Hellwig wrote:
> Introduce a new XFS_DQ_FREEING flag that tells lookup and mplist walks
> to skip a dquot that is beeing freed, and use this avoid the trylock
> on the hash and mplist locks in xfs_qm_dqreclaim_one. Also simplify
> xfs_dqpurge by moving the inodes to a dispose list after marking them
> XFS_DQ_FREEING and avoid the locker ordering constraints.
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Wow. That was a tough review.
Reviewed-by: Ben Myers <bpm@xxxxxxx>
> Index: xfs/fs/xfs/xfs_qm.c
> @@ -1737,57 +1716,42 @@ again:
> goto dqunlock;
> + xfs_dqfunlock(dqp);
> - * We're trying to get the hashlock out of order. This races
> - * with dqlookup; so, we giveup and goto the next dquot if
> - * we couldn't get the hashlock. This way, we won't starve
> - * a dqlookup process that holds the hashlock that is
> - * waiting for the freelist lock.
> + * Prevent lookup now that we are going to reclaim the dquot.
> + * Once XFS_DQ_FREEING is set lookup won't touch the inode,