From mboxrd@z Thu Jan 1 00:00:00 1970 From: TaoMa Date: Thu, 21 Aug 2008 12:13:15 +0800 Subject: [Ocfs2-devel] [PATCH 07/10] ocfs2: Determine an extent tree's max_leaf_clusters in an et_op. In-Reply-To: <1219286905-28104-8-git-send-email-joel.becker@oracle.com> References: <1219286905-28104-1-git-send-email-joel.becker@oracle.com> <1219286905-28104-8-git-send-email-joel.becker@oracle.com> Message-ID: <48ACEB5B.5030903@oracle.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ocfs2-devel@oss.oracle.com Joel Becker wrote: > Provide an optional extent_tree_operation to specify the > max_leaf_clusters of an ocfs2_extent_tree. If not provided, the value > is 0 (unlimited). > > Signed-off-by: Joel Becker > --- > fs/ocfs2/alloc.c | 18 +++++++++++++++--- > 1 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c > index 0b900f6..7c0721d 100644 > --- a/fs/ocfs2/alloc.c > +++ b/fs/ocfs2/alloc.c > @@ -76,6 +76,8 @@ struct ocfs2_extent_tree_operations { > /* These are internal to ocfs2_extent_tree and don't have > * accessor functions */ > void (*eo_fill_root_el)(struct ocfs2_extent_tree *et); > + void (*eo_fill_max_leaf_clusters)(struct inode *inode, > + struct ocfs2_extent_tree *et); > }; > > struct ocfs2_extent_tree { > @@ -205,6 +207,14 @@ static void ocfs2_xattr_tree_fill_root_el(struct ocfs2_extent_tree *et) > et->et_root_el = &xb->xb_attrs.xb_root.xt_list; > } > > +static void ocfs2_xattr_tree_fill_max_leaf_clusters(struct inode *inode, > + struct ocfs2_extent_tree *et) > +{ > + et->et_max_leaf_clusters = > + ocfs2_clusters_for_bytes(inode->i_sb, > + OCFS2_MAX_XATTR_TREE_LEAF_SIZE); > +} > + > static void ocfs2_xattr_tree_set_last_eb_blk(struct ocfs2_extent_tree *et, > u64 blkno) > { > @@ -243,6 +253,7 @@ static struct ocfs2_extent_tree_operations ocfs2_xattr_tree_et_ops = { > .eo_update_clusters = ocfs2_xattr_tree_update_clusters, > .eo_sanity_check = ocfs2_xattr_tree_sanity_check, > .eo_fill_root_el = ocfs2_xattr_tree_fill_root_el, > + .eo_fill_max_leaf_clusters = ocfs2_xattr_tree_fill_max_leaf_clusters, > }; > > static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et, > @@ -254,7 +265,6 @@ static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et, > et->et_type = et_type; > get_bh(bh); > et->et_root_bh = bh; > - et->et_max_leaf_clusters = 0; > if (!obj) > obj = (void *)bh->b_data; > et->et_object = obj; > @@ -265,11 +275,13 @@ static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et, > et->et_ops = &ocfs2_xattr_et_ops; > } else if (et_type == OCFS2_XATTR_TREE_EXTENT) { > et->et_ops = &ocfs2_xattr_tree_et_ops; > - et->et_max_leaf_clusters = ocfs2_clusters_for_bytes(inode->i_sb, > - OCFS2_MAX_XATTR_TREE_LEAF_SIZE); > } > > et->et_ops->eo_fill_root_el(et); > + if (!et->et_ops->eo_fill_max_leaf_clusters) > + et->et_max_leaf_clusters = 0; > + else > + et->et_ops->eo_fill_max_leaf_clusters(inode, et); > } > Like what you have done in patch 1/10, maybe we can add a small wrapper named ocfs2_et_fill_max_leaf_clusters for this? Regards, Tao