aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/xfs/quota/xfs_qm.c13
-rw-r--r--fs/xfs/quota/xfs_qm.h5
2 files changed, 6 insertions, 12 deletions
diff --git a/fs/xfs/quota/xfs_qm.c b/fs/xfs/quota/xfs_qm.c
index fd0b383d72a5..246790ad9589 100644
--- a/fs/xfs/quota/xfs_qm.c
+++ b/fs/xfs/quota/xfs_qm.c
@@ -219,7 +219,7 @@ xfs_qm_hold_quotafs_ref(
219 * the structure could disappear between the entry to this routine and 219 * the structure could disappear between the entry to this routine and
220 * a HOLD operation if not locked. 220 * a HOLD operation if not locked.
221 */ 221 */
222 XFS_QM_LOCK(xfs_Gqm); 222 mutex_lock(&xfs_Gqm_lock);
223 223
224 if (xfs_Gqm == NULL) 224 if (xfs_Gqm == NULL)
225 xfs_Gqm = xfs_Gqm_init(); 225 xfs_Gqm = xfs_Gqm_init();
@@ -228,8 +228,8 @@ xfs_qm_hold_quotafs_ref(
228 * debugging and statistical purposes, but ... 228 * debugging and statistical purposes, but ...
229 * Just take a reference and get out. 229 * Just take a reference and get out.
230 */ 230 */
231 XFS_QM_HOLD(xfs_Gqm); 231 xfs_Gqm->qm_nrefs++;
232 XFS_QM_UNLOCK(xfs_Gqm); 232 mutex_unlock(&xfs_Gqm_lock);
233 233
234 return 0; 234 return 0;
235} 235}
@@ -277,13 +277,12 @@ xfs_qm_rele_quotafs_ref(
277 * Destroy the entire XQM. If somebody mounts with quotaon, this'll 277 * Destroy the entire XQM. If somebody mounts with quotaon, this'll
278 * be restarted. 278 * be restarted.
279 */ 279 */
280 XFS_QM_LOCK(xfs_Gqm); 280 mutex_lock(&xfs_Gqm_lock);
281 XFS_QM_RELE(xfs_Gqm); 281 if (--xfs_Gqm->qm_nrefs == 0) {
282 if (xfs_Gqm->qm_nrefs == 0) {
283 xfs_qm_destroy(xfs_Gqm); 282 xfs_qm_destroy(xfs_Gqm);
284 xfs_Gqm = NULL; 283 xfs_Gqm = NULL;
285 } 284 }
286 XFS_QM_UNLOCK(xfs_Gqm); 285 mutex_unlock(&xfs_Gqm_lock);
287} 286}
288 287
289/* 288/*
diff --git a/fs/xfs/quota/xfs_qm.h b/fs/xfs/quota/xfs_qm.h
index ddf09166387c..d48c4dbe1428 100644
--- a/fs/xfs/quota/xfs_qm.h
+++ b/fs/xfs/quota/xfs_qm.h
@@ -158,11 +158,6 @@ typedef struct xfs_dquot_acct {
158#define XFS_QM_IWARNLIMIT 5 158#define XFS_QM_IWARNLIMIT 5
159#define XFS_QM_RTBWARNLIMIT 5 159#define XFS_QM_RTBWARNLIMIT 5
160 160
161#define XFS_QM_LOCK(xqm) (mutex_lock(&xqm##_lock))
162#define XFS_QM_UNLOCK(xqm) (mutex_unlock(&xqm##_lock))
163#define XFS_QM_HOLD(xqm) ((xqm)->qm_nrefs++)
164#define XFS_QM_RELE(xqm) ((xqm)->qm_nrefs--)
165
166extern void xfs_qm_destroy_quotainfo(xfs_mount_t *); 161extern void xfs_qm_destroy_quotainfo(xfs_mount_t *);
167extern void xfs_qm_mount_quotas(xfs_mount_t *); 162extern void xfs_qm_mount_quotas(xfs_mount_t *);
168extern int xfs_qm_quotacheck(xfs_mount_t *); 163extern int xfs_qm_quotacheck(xfs_mount_t *);