diff options
Diffstat (limited to 'fs/xfs/xfs_qm.c')
-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( | |||
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 | ||