[Ocfs2-devel] [PATCH 03/10] ocfs2: Make ocfs2_extent_tree get/put instead of alloc.
Joel Becker
Joel.Becker at oracle.com
Thu Aug 21 16:05:33 PDT 2008
On Thu, Aug 21, 2008 at 03:10:59PM -0700, Mark Fasheh wrote:
> On Wed, Aug 20, 2008 at 07:48:18PM -0700, Joel Becker wrote:
> > Rather than allocating a struct ocfs2_extent_tree, just put it on the
> > stack. Fill it with ocfs2_get_extent_tree() and drop it with
> > ocfs2_put_extent_tree(). Now the callers don't have to ENOMEM, yet
> > still safely ref the root_bh.
> >
> > Signed-off-by: Joel Becker <joel.becker at oracle.com>
> > ---
> > fs/ocfs2/alloc.c | 117 ++++++++++++++++-------------------------------------
> > 1 files changed, 36 insertions(+), 81 deletions(-)
> >
> > diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
> > index ab16b89..0abf11e 100644
> > --- a/fs/ocfs2/alloc.c
> > +++ b/fs/ocfs2/alloc.c
> > @@ -223,22 +223,17 @@ static struct ocfs2_extent_tree_operations ocfs2_xattr_tree_et_ops = {
> > .eo_sanity_check = ocfs2_xattr_tree_sanity_check,
> > };
> >
> > -static struct ocfs2_extent_tree*
> > - ocfs2_new_extent_tree(struct inode *inode,
> > - struct buffer_head *bh,
> > - enum ocfs2_extent_tree_type et_type,
> > - void *private)
> > +static void ocfs2_get_extent_tree(struct ocfs2_extent_tree *et,
> > + struct inode *inode,
> > + struct buffer_head *bh,
> > + enum ocfs2_extent_tree_type et_type,
> > + void *private)
>
> Actually, maybe "ocfs2_init_extent_tree()" would be more straightforward.
> I'm fine with this too though.
I originally had "fill", but I chose "get" because we get_bh()
and thus require a "put" to brelse(). I'm not tied to it, so if you
like "init" I'll change it.
> > @@ -257,16 +252,11 @@ static struct ocfs2_extent_tree*
> > et->et_max_leaf_clusters = ocfs2_clusters_for_bytes(inode->i_sb,
> > OCFS2_MAX_XATTR_TREE_LEAF_SIZE);
> > }
>
> Can you add a check, down here probably, that we got an 'et_type' value
> passed in which is valid? If not, then we might continue with on-the-stack
> versions of et_root_el, etc. This won't fail as nice as the kzalloc would
> have before.
The final patch removes the et_type completely. If you want, I
can have the intermediate patches do stricter et_type checking (I think
a later one BUG()s).
Joel
--
"When choosing between two evils, I always like to try the one
I've never tried before."
- Mae West
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
More information about the Ocfs2-devel
mailing list