diff options
author | Christoph Hellwig <hch@infradead.org> | 2011-12-06 16:58:21 -0500 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2011-12-16 16:33:30 -0500 |
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 b8df0bda5a54..671f37eae1c7 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c | |||
@@ -449,7 +449,6 @@ xfs_qm_detach_gdquots( | |||
449 | { | 449 | { |
450 | struct xfs_quotainfo *q = mp->m_quotainfo; | 450 | struct xfs_quotainfo *q = mp->m_quotainfo; |
451 | struct xfs_dquot *dqp, *gdqp; | 451 | struct xfs_dquot *dqp, *gdqp; |
452 | int nrecl; | ||
453 | 452 | ||
454 | again: | 453 | again: |
455 | ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); | 454 | ASSERT(mutex_is_locked(&q->qi_dqlist_lock)); |
@@ -462,25 +461,14 @@ xfs_qm_detach_gdquots( | |||
462 | mutex_lock(&q->qi_dqlist_lock); | 461 | mutex_lock(&q->qi_dqlist_lock); |
463 | goto again; | 462 | goto again; |
464 | } | 463 | } |
465 | if ((gdqp = dqp->q_gdquot)) { | 464 | |
466 | xfs_dqlock(gdqp); | 465 | gdqp = dqp->q_gdquot; |
466 | if (gdqp) | ||
467 | dqp->q_gdquot = NULL; | 467 | dqp->q_gdquot = NULL; |
468 | } | ||
469 | xfs_dqunlock(dqp); | 468 | xfs_dqunlock(dqp); |
470 | 469 | ||
471 | if (gdqp) { | 470 | if (gdqp) |
472 | /* | 471 | xfs_qm_dqrele(gdqp); |
473 | * Can't hold the mplist lock across a dqput. | ||
474 | * XXXmust convert to marker based iterations here. | ||
475 | */ | ||
476 | nrecl = q->qi_dqreclaims; | ||
477 | mutex_unlock(&q->qi_dqlist_lock); | ||
478 | xfs_qm_dqput(gdqp); | ||
479 | |||
480 | mutex_lock(&q->qi_dqlist_lock); | ||
481 | if (nrecl != q->qi_dqreclaims) | ||
482 | goto again; | ||
483 | } | ||
484 | } | 472 | } |
485 | } | 473 | } |
486 | 474 | ||