diff options
Diffstat (limited to 'fs/xfs/xfs_mount.h')
-rw-r--r-- | fs/xfs/xfs_mount.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index cfa7a5d22e72..16b22120b98f 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h | |||
@@ -384,7 +384,7 @@ xfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d) | |||
384 | } | 384 | } |
385 | 385 | ||
386 | /* | 386 | /* |
387 | * perag get/put wrappers for eventual ref counting | 387 | * perag get/put wrappers for ref counting |
388 | */ | 388 | */ |
389 | static inline struct xfs_perag * | 389 | static inline struct xfs_perag * |
390 | xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno) | 390 | xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno) |
@@ -393,6 +393,12 @@ xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno) | |||
393 | 393 | ||
394 | spin_lock(&mp->m_perag_lock); | 394 | spin_lock(&mp->m_perag_lock); |
395 | pag = radix_tree_lookup(&mp->m_perag_tree, agno); | 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 | } | ||
396 | spin_unlock(&mp->m_perag_lock); | 402 | spin_unlock(&mp->m_perag_lock); |
397 | return pag; | 403 | return pag; |
398 | } | 404 | } |
@@ -400,7 +406,8 @@ xfs_perag_get(struct xfs_mount *mp, xfs_agnumber_t agno) | |||
400 | static inline void | 406 | static inline void |
401 | xfs_perag_put(struct xfs_perag *pag) | 407 | xfs_perag_put(struct xfs_perag *pag) |
402 | { | 408 | { |
403 | /* nothing to see here, move along */ | 409 | ASSERT(atomic_read(&pag->pag_ref) > 0); |
410 | atomic_dec(&pag->pag_ref); | ||
404 | } | 411 | } |
405 | 412 | ||
406 | /* | 413 | /* |