1 From: Joel Becker <joel.becker@oracle.com>
2 Subject: ocfs2: Determine an extent tree's max_leaf_clusters in an et_op.
3 Patch-mainline: 2.6.28?
6 Provide an optional extent_tree_operation to specify the
7 max_leaf_clusters of an ocfs2_extent_tree. If not provided, the value
10 Signed-off-by: Joel Becker <joel.becker@oracle.com>
11 Acked-by: Mark Fasheh <mark.fasheh@suse.com>
13 fs/ocfs2/alloc.c | 18 +++++++++++++++---
14 1 files changed, 15 insertions(+), 3 deletions(-)
16 diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
17 index 0b900f6..7c0721d 100644
18 --- a/fs/ocfs2/alloc.c
19 +++ b/fs/ocfs2/alloc.c
20 @@ -76,6 +76,8 @@ struct ocfs2_extent_tree_operations {
21 /* These are internal to ocfs2_extent_tree and don't have
22 * accessor functions */
23 void (*eo_fill_root_el)(struct ocfs2_extent_tree *et);
24 + void (*eo_fill_max_leaf_clusters)(struct inode *inode,
25 + struct ocfs2_extent_tree *et);
28 struct ocfs2_extent_tree {
29 @@ -205,6 +207,14 @@ static void ocfs2_xattr_tree_fill_root_el(struct ocfs2_extent_tree *et)
30 et->et_root_el = &xb->xb_attrs.xb_root.xt_list;
33 +static void ocfs2_xattr_tree_fill_max_leaf_clusters(struct inode *inode,
34 + struct ocfs2_extent_tree *et)
36 + et->et_max_leaf_clusters =
37 + ocfs2_clusters_for_bytes(inode->i_sb,
38 + OCFS2_MAX_XATTR_TREE_LEAF_SIZE);
41 static void ocfs2_xattr_tree_set_last_eb_blk(struct ocfs2_extent_tree *et,
44 @@ -243,6 +253,7 @@ static struct ocfs2_extent_tree_operations ocfs2_xattr_tree_et_ops = {
45 .eo_update_clusters = ocfs2_xattr_tree_update_clusters,
46 .eo_sanity_check = ocfs2_xattr_tree_sanity_check,
47 .eo_fill_root_el = ocfs2_xattr_tree_fill_root_el,
48 + .eo_fill_max_leaf_clusters = ocfs2_xattr_tree_fill_max_leaf_clusters,
51 static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et,
52 @@ -254,7 +265,6 @@ static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et,
53 et->et_type = et_type;
56 - et->et_max_leaf_clusters = 0;
58 obj = (void *)bh->b_data;
60 @@ -265,11 +275,13 @@ static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et,
61 et->et_ops = &ocfs2_xattr_et_ops;
62 } else if (et_type == OCFS2_XATTR_TREE_EXTENT) {
63 et->et_ops = &ocfs2_xattr_tree_et_ops;
64 - et->et_max_leaf_clusters = ocfs2_clusters_for_bytes(inode->i_sb,
65 - OCFS2_MAX_XATTR_TREE_LEAF_SIZE);
68 et->et_ops->eo_fill_root_el(et);
69 + if (!et->et_ops->eo_fill_max_leaf_clusters)
70 + et->et_max_leaf_clusters = 0;
72 + et->et_ops->eo_fill_max_leaf_clusters(inode, et);
75 static void ocfs2_put_extent_tree(struct ocfs2_extent_tree *et)