aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_mount.h
diff options
context:
space:
mode:
authorDave Chinner <david@fromorbit.com>2010-01-11 06:47:46 -0500
committerAlex Elder <aelder@sgi.com>2010-01-15 16:34:12 -0500
commit0fa800fbd549736dfdc1d7761f87e33dc8cd973b (patch)
tree3940f2f5bc4bb3bec888f7ef9ed8a8c875e02695 /fs/xfs/xfs_mount.h
parentaed3bb90abaf0b42e8c8747e192f7bb97f445279 (diff)
xfs: Add trace points for per-ag refcount debugging.
Uninline xfs_perag_{get,put} so that tracepoints can be inserted into them to speed debugging of reference count problems. Signed-off-by: Dave Chinner <david@fromorbit.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_mount.h')
-rw-r--r--fs/xfs/xfs_mount.h25
1 files changed, 2 insertions, 23 deletions
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index 16b22120b98f..e62fd1cde464 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -386,29 +386,8 @@ xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d)
386/* 386/*
387 * perag get/put wrappers for ref counting 387 * perag get/put wrappers for ref counting
388 */ 388 */
389static inline struct xfs_perag * 389struct xfs_perag *xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno);
390xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno) 390void xfs_perag_put(struct xfs_perag *pag);
391{
392 struct xfs_perag *pag;
393
394 spin_lock(&mp->m_perag_lock);
395 pag = radix_tree_lookup(&mp->m_perag_tree, agno);
396 if (pag) {
397 ASSERT(atomic_read(&pag->pag_ref) >= 0);
398 /* catch leaks in the positive direction during testing */
399 ASSERT(atomic_read(&pag->pag_ref) < 1000);
400 atomic_inc(&pag->pag_ref);
401 }
402 spin_unlock(&mp->m_perag_lock);
403 return pag;
404}
405
406static inline void
407xfs_perag_put(struct xfs_perag *pag)
408{
409 ASSERT(atomic_read(&pag->pag_ref) > 0);
410 atomic_dec(&pag->pag_ref);
411}
412 391
413/* 392/*
414 * Per-cpu superblock locking functions 393 * Per-cpu superblock locking functions