diff options
author | Joel Becker <joel.becker@oracle.com> | 2008-12-09 17:24:33 -0500 |
---|---|---|
committer | Mark Fasheh <mfasheh@suse.com> | 2009-01-05 11:40:32 -0500 |
commit | 2a50a743bdaab104155bd9e988d2ba3bb4177263 (patch) | |
tree | a330bfffe09dfca4340075bd9c44f632a3284469 /fs/ocfs2/alloc.c | |
parent | 4d0e214ee83185fcaa2cb97cd026d32bdc5c994a (diff) |
ocfs2: Create ocfs2_xattr_value_buf.
When an ocfs2 extended attribute is large enough to require its own
allocation tree, we root it with an ocfs2_xattr_value_root. However,
these roots can be a part of inodes, xattr blocks, or xattr buckets.
Thus, they need a different journal access function for each container.
We wrap the bh, its journal access function, and the value root (xv) in
a structure called ocfs2_xattr_valu_buf. This is a package that can
be passed around. In this first pass, we simply pass it to the
extent tree code.
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/alloc.c')
-rw-r--r-- | fs/ocfs2/alloc.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c index 6e58fd557e5b..874c0bd9e1cc 100644 --- a/fs/ocfs2/alloc.c +++ b/fs/ocfs2/alloc.c | |||
@@ -48,6 +48,7 @@ | |||
48 | #include "file.h" | 48 | #include "file.h" |
49 | #include "super.h" | 49 | #include "super.h" |
50 | #include "uptodate.h" | 50 | #include "uptodate.h" |
51 | #include "xattr.h" | ||
51 | 52 | ||
52 | #include "buffer_head_io.h" | 53 | #include "buffer_head_io.h" |
53 | 54 | ||
@@ -207,36 +208,33 @@ static void ocfs2_dinode_fill_root_el(struct ocfs2_extent_tree *et) | |||
207 | 208 | ||
208 | static void ocfs2_xattr_value_fill_root_el(struct ocfs2_extent_tree *et) | 209 | static void ocfs2_xattr_value_fill_root_el(struct ocfs2_extent_tree *et) |
209 | { | 210 | { |
210 | struct ocfs2_xattr_value_root *xv = et->et_object; | 211 | struct ocfs2_xattr_value_buf *vb = et->et_object; |
211 | 212 | ||
212 | et->et_root_el = &xv->xr_list; | 213 | et->et_root_el = &vb->vb_xv->xr_list; |
213 | } | 214 | } |
214 | 215 | ||
215 | static void ocfs2_xattr_value_set_last_eb_blk(struct ocfs2_extent_tree *et, | 216 | static void ocfs2_xattr_value_set_last_eb_blk(struct ocfs2_extent_tree *et, |
216 | u64 blkno) | 217 | u64 blkno) |
217 | { | 218 | { |
218 | struct ocfs2_xattr_value_root *xv = | 219 | struct ocfs2_xattr_value_buf *vb = et->et_object; |
219 | (struct ocfs2_xattr_value_root *)et->et_object; | ||
220 | 220 | ||
221 | xv->xr_last_eb_blk = cpu_to_le64(blkno); | 221 | vb->vb_xv->xr_last_eb_blk = cpu_to_le64(blkno); |
222 | } | 222 | } |
223 | 223 | ||
224 | static u64 ocfs2_xattr_value_get_last_eb_blk(struct ocfs2_extent_tree *et) | 224 | static u64 ocfs2_xattr_value_get_last_eb_blk(struct ocfs2_extent_tree *et) |
225 | { | 225 | { |
226 | struct ocfs2_xattr_value_root *xv = | 226 | struct ocfs2_xattr_value_buf *vb = et->et_object; |
227 | (struct ocfs2_xattr_value_root *) et->et_object; | ||
228 | 227 | ||
229 | return le64_to_cpu(xv->xr_last_eb_blk); | 228 | return le64_to_cpu(vb->vb_xv->xr_last_eb_blk); |
230 | } | 229 | } |
231 | 230 | ||
232 | static void ocfs2_xattr_value_update_clusters(struct inode *inode, | 231 | static void ocfs2_xattr_value_update_clusters(struct inode *inode, |
233 | struct ocfs2_extent_tree *et, | 232 | struct ocfs2_extent_tree *et, |
234 | u32 clusters) | 233 | u32 clusters) |
235 | { | 234 | { |
236 | struct ocfs2_xattr_value_root *xv = | 235 | struct ocfs2_xattr_value_buf *vb = et->et_object; |
237 | (struct ocfs2_xattr_value_root *)et->et_object; | ||
238 | 236 | ||
239 | le32_add_cpu(&xv->xr_clusters, clusters); | 237 | le32_add_cpu(&vb->vb_xv->xr_clusters, clusters); |
240 | } | 238 | } |
241 | 239 | ||
242 | static struct ocfs2_extent_tree_operations ocfs2_xattr_value_et_ops = { | 240 | static struct ocfs2_extent_tree_operations ocfs2_xattr_value_et_ops = { |
@@ -334,10 +332,9 @@ void ocfs2_init_xattr_tree_extent_tree(struct ocfs2_extent_tree *et, | |||
334 | 332 | ||
335 | void ocfs2_init_xattr_value_extent_tree(struct ocfs2_extent_tree *et, | 333 | void ocfs2_init_xattr_value_extent_tree(struct ocfs2_extent_tree *et, |
336 | struct inode *inode, | 334 | struct inode *inode, |
337 | struct buffer_head *bh, | 335 | struct ocfs2_xattr_value_buf *vb) |
338 | struct ocfs2_xattr_value_root *xv) | ||
339 | { | 336 | { |
340 | __ocfs2_init_extent_tree(et, inode, bh, ocfs2_journal_access, xv, | 337 | __ocfs2_init_extent_tree(et, inode, vb->vb_bh, vb->vb_access, vb, |
341 | &ocfs2_xattr_value_et_ops); | 338 | &ocfs2_xattr_value_et_ops); |
342 | } | 339 | } |
343 | 340 | ||