aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/super.c
diff options
context:
space:
mode:
authorTao Ma <tao.ma@oracle.com>2009-08-23 23:13:37 -0400
committerJoel Becker <joel.becker@oracle.com>2009-09-22 23:09:29 -0400
commit374a263e790c4de85844283c098810a92985f623 (patch)
treea72b1f072b973723ea1cf7def27608717cf1c033 /fs/ocfs2/super.c
parentc732eb16bf07f9bfb7fa72b6868462471273bdbd (diff)
ocfs2: Add refcount tree lock mechanism.
Implement locking around struct ocfs2_refcount_tree. This protects all read/write operations on refcount trees. ocfs2_refcount_tree has its own lock and its own caching_info, protecting buffers among multiple nodes. User must call ocfs2_lock_refcount_tree before his operation on the tree and unlock it after that. ocfs2_refcount_trees are referenced by the block number of the refcount tree root block, So we create an rb-tree on the ocfs2_super to look them up. Signed-off-by: Tao Ma <tao.ma@oracle.com>
Diffstat (limited to 'fs/ocfs2/super.c')
-rw-r--r--fs/ocfs2/super.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index e35a5052ce3a..8b6062176970 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -69,6 +69,7 @@
69#include "ver.h" 69#include "ver.h"
70#include "xattr.h" 70#include "xattr.h"
71#include "quota.h" 71#include "quota.h"
72#include "refcounttree.h"
72 73
73#include "buffer_head_io.h" 74#include "buffer_head_io.h"
74 75
@@ -1858,6 +1859,8 @@ static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err)
1858 1859
1859 ocfs2_sync_blockdev(sb); 1860 ocfs2_sync_blockdev(sb);
1860 1861
1862 ocfs2_purge_refcount_trees(osb);
1863
1861 /* No cluster connection means we've failed during mount, so skip 1864 /* No cluster connection means we've failed during mount, so skip
1862 * all the steps which depended on that to complete. */ 1865 * all the steps which depended on that to complete. */
1863 if (osb->cconn) { 1866 if (osb->cconn) {
@@ -2064,6 +2067,8 @@ static int ocfs2_initialize_super(struct super_block *sb,
2064 goto bail; 2067 goto bail;
2065 } 2068 }
2066 2069
2070 osb->osb_rf_lock_tree = RB_ROOT;
2071
2067 osb->s_feature_compat = 2072 osb->s_feature_compat =
2068 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_compat); 2073 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_compat);
2069 osb->s_feature_ro_compat = 2074 osb->s_feature_ro_compat =