diff options
author | Christoph Hellwig <hch@infradead.org> | 2011-12-06 21:58:21 +0000 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2011-12-16 15:33:30 -0600 |
commit | 28fb588c9bd810dec273d96e80591392f6ce1e1c (patch) | |
tree | a45ca1155de23900b194d7406ea772f48d328894 /fs/xfs | |
parent | 093019cf1b18dd31b2c3b77acce4e000e2cbc9ce (diff) |
xfs: simplify xfs_qm_detach_gdquots
There is no reason to drop qi_dqlist_lock around calls to xfs_qm_dqrele
because the free list lock now nests inside qi_dqlist_lock and the
dquot lock.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/xfs_qm.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index b8df0bda5a5..671f37eae1c 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c @@ -449,7 +449,6 @@ xfs_qm_detach_gdquots( { struct xfs_quotainfo *q = mp->m_quotainfo; struct xfs_dquot *dqp, *gdqp; - int nrecl; again: ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); @@ -462,25 +461,14 @@ xfs_qm_detach_gdquots( mutex_lock(&q->qi_dqlist_lock); goto again; } - if ((gdqp = dqp->q_gdquot)) { - xfs_dqlock(gdqp); + + gdqp = dqp->q_gdquot; + if (gdqp) dqp->q_gdquot = NULL; - } xfs_dqunlock(dqp); - if (gdqp) { - /* - * Can't hold the mplist lock across a dqput. - * XXXmust convert to marker based iterations here. - */ - nrecl = q->qi_dqreclaims; - mutex_unlock(&q->qi_dqlist_lock); - xfs_qm_dqput(gdqp); - - mutex_lock(&q->qi_dqlist_lock); - if (nrecl != q->qi_dqreclaims) - goto again; - } + if (gdqp) + xfs_qm_dqrele(gdqp); } } |