diff options
| -rw-r--r-- | fs/ocfs2/refcounttree.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index a923535d9c37..eb0f4a047938 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c | |||
| @@ -26,6 +26,13 @@ | |||
| 26 | #include "super.h" | 26 | #include "super.h" |
| 27 | #include "buffer_head_io.h" | 27 | #include "buffer_head_io.h" |
| 28 | #include "blockcheck.h" | 28 | #include "blockcheck.h" |
| 29 | #include "refcounttree.h" | ||
| 30 | |||
| 31 | static inline struct ocfs2_refcount_tree * | ||
| 32 | cache_info_to_refcount(struct ocfs2_caching_info *ci) | ||
| 33 | { | ||
| 34 | return container_of(ci, struct ocfs2_refcount_tree, rf_ci); | ||
| 35 | } | ||
| 29 | 36 | ||
| 30 | static int ocfs2_validate_refcount_block(struct super_block *sb, | 37 | static int ocfs2_validate_refcount_block(struct super_block *sb, |
| 31 | struct buffer_head *bh) | 38 | struct buffer_head *bh) |
| @@ -97,3 +104,55 @@ static int ocfs2_read_refcount_block(struct ocfs2_caching_info *ci, | |||
| 97 | 104 | ||
| 98 | return rc; | 105 | return rc; |
| 99 | } | 106 | } |
| 107 | |||
| 108 | static u64 ocfs2_refcount_cache_owner(struct ocfs2_caching_info *ci) | ||
| 109 | { | ||
| 110 | struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci); | ||
| 111 | |||
| 112 | return rf->rf_blkno; | ||
| 113 | } | ||
| 114 | |||
| 115 | static struct super_block * | ||
| 116 | ocfs2_refcount_cache_get_super(struct ocfs2_caching_info *ci) | ||
| 117 | { | ||
| 118 | struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci); | ||
| 119 | |||
| 120 | return rf->rf_sb; | ||
| 121 | } | ||
| 122 | |||
| 123 | static void ocfs2_refcount_cache_lock(struct ocfs2_caching_info *ci) | ||
| 124 | { | ||
| 125 | struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci); | ||
| 126 | |||
| 127 | spin_lock(&rf->rf_lock); | ||
| 128 | } | ||
| 129 | |||
| 130 | static void ocfs2_refcount_cache_unlock(struct ocfs2_caching_info *ci) | ||
| 131 | { | ||
| 132 | struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci); | ||
| 133 | |||
| 134 | spin_unlock(&rf->rf_lock); | ||
| 135 | } | ||
| 136 | |||
| 137 | static void ocfs2_refcount_cache_io_lock(struct ocfs2_caching_info *ci) | ||
| 138 | { | ||
| 139 | struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci); | ||
| 140 | |||
| 141 | mutex_lock(&rf->rf_io_mutex); | ||
| 142 | } | ||
| 143 | |||
| 144 | static void ocfs2_refcount_cache_io_unlock(struct ocfs2_caching_info *ci) | ||
| 145 | { | ||
| 146 | struct ocfs2_refcount_tree *rf = cache_info_to_refcount(ci); | ||
| 147 | |||
| 148 | mutex_unlock(&rf->rf_io_mutex); | ||
| 149 | } | ||
| 150 | |||
| 151 | static const struct ocfs2_caching_operations ocfs2_refcount_caching_ops = { | ||
| 152 | .co_owner = ocfs2_refcount_cache_owner, | ||
| 153 | .co_get_super = ocfs2_refcount_cache_get_super, | ||
| 154 | .co_cache_lock = ocfs2_refcount_cache_lock, | ||
| 155 | .co_cache_unlock = ocfs2_refcount_cache_unlock, | ||
| 156 | .co_io_lock = ocfs2_refcount_cache_io_lock, | ||
| 157 | .co_io_unlock = ocfs2_refcount_cache_io_unlock, | ||
| 158 | }; | ||
