On Mon, Nov 1, 2010 at 9:23 PM, Pekka Enberg <penberg@xxxxxxxxxx> wrote: > On Mon, Nov 1, 2010 at 9:19 PM, Charles Manning <manningc2@xxxxxxxxxxxxx> wrote: >> On Tuesday 02 November 2010 07:58:49 Pekka Enberg wrote: >>> On Mon, Nov 1, 2010 at 8:40 PM, Tracey Dent <tdent48227@xxxxxxxxx> wrote: >>> > Adding files to yaffs2 directory. >>> > >>> > Signed-off-by: Tracey Dent <tdent48227@xxxxxxxxx> >>> > --- >>> > 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@xxxxxxxxxxxx> >>> > + * >>> > + * 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. > > Either way, your home-grown slab allocator is not going to be merged > this way. You should be using kmem_cache_alloc() and propose proper > patches on top of mm/sl?b.c. Btw, just to clarify: Greg might not mind taking it in as-is but it'll never be promoted to mainline proper this way. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html