lkml.org 
[lkml]   [2010]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 05/29] Staging: yaffs2: yaffs_allocator: Add files
    Date
    On Tuesday 02 November 2010 07:58:49 Pekka Enberg wrote:
    > On Mon, Nov 1, 2010 at 8:40 PM, Tracey Dent <tdent48227@gmail.com> wrote:
    > > Adding files to yaffs2 directory.
    > >
    > > Signed-off-by: Tracey Dent <tdent48227@gmail.com>
    > > ---
    > >  drivers/staging/yaffs2/yaffs_allocator.c |  408
    > > ++++++++++++++++++++++++++++++ drivers/staging/yaffs2/yaffs_allocator.h |
    > >   30 +++
    > >  2 files changed, 438 insertions(+), 0 deletions(-)
    > >  create mode 100644 drivers/staging/yaffs2/yaffs_allocator.c
    > >  create mode 100644 drivers/staging/yaffs2/yaffs_allocator.h
    > >
    > > diff --git a/drivers/staging/yaffs2/yaffs_allocator.c
    > > b/drivers/staging/yaffs2/yaffs_allocator.c new file mode 100644
    > > index 0000000..024ee2a
    > > --- /dev/null
    > > +++ b/drivers/staging/yaffs2/yaffs_allocator.c
    > > @@ -0,0 +1,408 @@
    > > +/*
    > > + * YAFFS: Yet Another Flash File System. A NAND-flash specific file
    > > system. + *
    > > + * Copyright (C) 2002-2010 Aleph One Ltd.
    > > + *   for Toby Churchill Ltd and Brightstar Engineering
    > > + *
    > > + * Created by Charles Manning <charles@aleph1.co.uk>
    > > + *
    > > + * This program is free software; you can redistribute it and/or modify
    > > + * it under the terms of the GNU General Public License version 2 as
    > > + * published by the Free Software Foundation.
    > > + */
    > > +
    > > +
    > > +
    > > +#include "yaffs_allocator.h"
    > > +#include "yaffs_guts.h"
    > > +#include "yaffs_trace.h"
    > > +#include "yportenv.h"
    > > +
    > > +#ifdef CONFIG_YAFFS_YMALLOC_ALLOCATOR
    > > +
    > > +void yaffs_deinit_raw_tnodes_and_objs(yaffs_dev_t *dev)
    > > +{
    > > +       dev = dev;
    > > +}
    > > +
    > > +void yaffs_init_raw_tnodes_and_objs(yaffs_dev_t *dev)
    > > +{
    > > +       dev = dev;
    > > +}
    > > +
    > > +yaffs_tnode_t *yaffs_alloc_raw_tnode(yaffs_dev_t *dev)
    > > +{
    > > +       return (yaffs_tnode_t *)YMALLOC(dev->tnode_size);
    > > +}
    > > +
    > > +void yaffs_free_raw_tnode(yaffs_dev_t *dev, yaffs_tnode_t *tn)
    > > +{
    > > +       dev = dev;
    > > +       YFREE(tn);
    > > +}
    >
    > So you have your own dynamic memory allocator? What's wrong with kmalloc()?

    No. YMALLOC() wraps kmalloc() to keep the code portable.

    This code does a home-grown slab allocator. The reason for doing this is that
    Linux slab does not allow slab caches to be destroyed while objects exist.

    While that might sound like a dangerous practice, it does mean that when yaffs
    unmounts it can drop all the data structures without having to walk all the
    trees freeing the objects.



    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2010-11-01 20:21    [from the cache]
    ©2003-2014 Jasper Spaans. hosted at Digital Ocean