diff options
author | Dave Chinner <david@fromorbit.com> | 2010-01-11 06:47:45 -0500 |
---|---|---|
committer | Alex Elder <aelder@sgi.com> | 2010-01-15 16:34:04 -0500 |
commit | aed3bb90abaf0b42e8c8747e192f7bb97f445279 (patch) | |
tree | 4619214ed42821792b05f4417cb95bde90abb562 /fs/xfs/xfs_mount.c | |
parent | 1c1c6ebcf5284aee4910f3b906ac90c20e510c82 (diff) |
xfs: Reference count per-ag structures
Reference count the per-ag structures to ensure that we keep get/put
pairs balanced. Assert that the reference counts are zero at unmount
time to catch leaks. In future, reference counts will enable us to
safely remove perag structures by allowing us to detect when they
are no longer in use.
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.c')
-rw-r--r-- | fs/xfs/xfs_mount.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index c04dd83cb57c..f241fec26070 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c | |||
@@ -215,6 +215,7 @@ xfs_free_perag( | |||
215 | for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { | 215 | for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { |
216 | spin_lock(&mp->m_perag_lock); | 216 | spin_lock(&mp->m_perag_lock); |
217 | pag = radix_tree_delete(&mp->m_perag_tree, agno); | 217 | pag = radix_tree_delete(&mp->m_perag_tree, agno); |
218 | ASSERT(atomic_read(&pag->pag_ref) == 0); | ||
218 | spin_unlock(&mp->m_perag_lock); | 219 | spin_unlock(&mp->m_perag_lock); |
219 | ASSERT(pag); | 220 | ASSERT(pag); |
220 | kmem_free(pag->pagb_list); | 221 | kmem_free(pag->pagb_list); |