X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fjffs2%2Fmalloc.c;h=036cbd11c00449d6755481b8a51e53bbf0f7fb4f;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=33f291005012bedf622daaaaa4ebf5f77655d2a1;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/fs/jffs2/malloc.c b/fs/jffs2/malloc.c index 33f291005..036cbd11c 100644 --- a/fs/jffs2/malloc.c +++ b/fs/jffs2/malloc.c @@ -26,10 +26,6 @@ static kmem_cache_t *tmp_dnode_info_slab; static kmem_cache_t *raw_node_ref_slab; static kmem_cache_t *node_frag_slab; static kmem_cache_t *inode_cache_slab; -#ifdef CONFIG_JFFS2_FS_XATTR -static kmem_cache_t *xattr_datum_cache; -static kmem_cache_t *xattr_ref_cache; -#endif int __init jffs2_create_slab_caches(void) { @@ -57,8 +53,8 @@ int __init jffs2_create_slab_caches(void) if (!tmp_dnode_info_slab) goto err; - raw_node_ref_slab = kmem_cache_create("jffs2_refblock", - sizeof(struct jffs2_raw_node_ref) * (REFS_PER_BLOCK + 1), + raw_node_ref_slab = kmem_cache_create("jffs2_raw_node_ref", + sizeof(struct jffs2_raw_node_ref), 0, 0, NULL, NULL); if (!raw_node_ref_slab) goto err; @@ -72,24 +68,8 @@ int __init jffs2_create_slab_caches(void) inode_cache_slab = kmem_cache_create("jffs2_inode_cache", sizeof(struct jffs2_inode_cache), 0, 0, NULL, NULL); - if (!inode_cache_slab) - goto err; - -#ifdef CONFIG_JFFS2_FS_XATTR - xattr_datum_cache = kmem_cache_create("jffs2_xattr_datum", - sizeof(struct jffs2_xattr_datum), - 0, 0, NULL, NULL); - if (!xattr_datum_cache) - goto err; - - xattr_ref_cache = kmem_cache_create("jffs2_xattr_ref", - sizeof(struct jffs2_xattr_ref), - 0, 0, NULL, NULL); - if (!xattr_ref_cache) - goto err; -#endif - - return 0; + if (inode_cache_slab) + return 0; err: jffs2_destroy_slab_caches(); return -ENOMEM; @@ -111,12 +91,6 @@ void jffs2_destroy_slab_caches(void) kmem_cache_destroy(node_frag_slab); if(inode_cache_slab) kmem_cache_destroy(inode_cache_slab); -#ifdef CONFIG_JFFS2_FS_XATTR - if (xattr_datum_cache) - kmem_cache_destroy(xattr_datum_cache); - if (xattr_ref_cache) - kmem_cache_destroy(xattr_ref_cache); -#endif } struct jffs2_full_dirent *jffs2_alloc_full_dirent(int namesize) @@ -190,65 +164,15 @@ void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *x) kmem_cache_free(tmp_dnode_info_slab, x); } -static struct jffs2_raw_node_ref *jffs2_alloc_refblock(void) +struct jffs2_raw_node_ref *jffs2_alloc_raw_node_ref(void) { struct jffs2_raw_node_ref *ret; - ret = kmem_cache_alloc(raw_node_ref_slab, GFP_KERNEL); - if (ret) { - int i = 0; - for (i=0; i < REFS_PER_BLOCK; i++) { - ret[i].flash_offset = REF_EMPTY_NODE; - ret[i].next_in_ino = NULL; - } - ret[i].flash_offset = REF_LINK_NODE; - ret[i].next_in_ino = NULL; - } + dbg_memalloc("%p\n", ret); return ret; } -int jffs2_prealloc_raw_node_refs(struct jffs2_sb_info *c, - struct jffs2_eraseblock *jeb, int nr) -{ - struct jffs2_raw_node_ref **p, *ref; - int i = nr; - - dbg_memalloc("%d\n", nr); - - p = &jeb->last_node; - ref = *p; - - dbg_memalloc("Reserving %d refs for block @0x%08x\n", nr, jeb->offset); - - /* If jeb->last_node is really a valid node then skip over it */ - if (ref && ref->flash_offset != REF_EMPTY_NODE) - ref++; - - while (i) { - if (!ref) { - dbg_memalloc("Allocating new refblock linked from %p\n", p); - ref = *p = jffs2_alloc_refblock(); - if (!ref) - return -ENOMEM; - } - if (ref->flash_offset == REF_LINK_NODE) { - p = &ref->next_in_ino; - ref = *p; - continue; - } - i--; - ref++; - } - jeb->allocated_refs = nr; - - dbg_memalloc("Reserved %d refs for block @0x%08x, last_node is %p (%08x,%p)\n", - nr, jeb->offset, jeb->last_node, jeb->last_node->flash_offset, - jeb->last_node->next_in_ino); - - return 0; -} - -void jffs2_free_refblock(struct jffs2_raw_node_ref *x) +void jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *x) { dbg_memalloc("%p\n", x); kmem_cache_free(raw_node_ref_slab, x); @@ -281,42 +205,3 @@ void jffs2_free_inode_cache(struct jffs2_inode_cache *x) dbg_memalloc("%p\n", x); kmem_cache_free(inode_cache_slab, x); } - -#ifdef CONFIG_JFFS2_FS_XATTR -struct jffs2_xattr_datum *jffs2_alloc_xattr_datum(void) -{ - struct jffs2_xattr_datum *xd; - xd = kmem_cache_alloc(xattr_datum_cache, GFP_KERNEL); - dbg_memalloc("%p\n", xd); - - memset(xd, 0, sizeof(struct jffs2_xattr_datum)); - xd->class = RAWNODE_CLASS_XATTR_DATUM; - xd->node = (void *)xd; - INIT_LIST_HEAD(&xd->xindex); - return xd; -} - -void jffs2_free_xattr_datum(struct jffs2_xattr_datum *xd) -{ - dbg_memalloc("%p\n", xd); - kmem_cache_free(xattr_datum_cache, xd); -} - -struct jffs2_xattr_ref *jffs2_alloc_xattr_ref(void) -{ - struct jffs2_xattr_ref *ref; - ref = kmem_cache_alloc(xattr_ref_cache, GFP_KERNEL); - dbg_memalloc("%p\n", ref); - - memset(ref, 0, sizeof(struct jffs2_xattr_ref)); - ref->class = RAWNODE_CLASS_XATTR_REF; - ref->node = (void *)ref; - return ref; -} - -void jffs2_free_xattr_ref(struct jffs2_xattr_ref *ref) -{ - dbg_memalloc("%p\n", ref); - kmem_cache_free(xattr_ref_cache, ref); -} -#endif