Messages in this thread Patch in this message | | | Date | Thu, 20 Jan 2000 15:54:02 +0000 (GMT) | From | Tigran Aivazian <> | Subject | [patch-2.3.40-pre6] kzalloc() (ala kmem_zalloc() of SVR4) |
| |
Hi Linus,
a common code sequence of calling kmalloc() and then memset(p,0,size) can be optimized into a single exported interface called kzalloc() like it is done on other systems (kmem_zalloc()). This is a simple and harmless optimization - please consider it:
http://www.ocston.org/~tigran/patches/kzalloc-2.3.40-p6.patch
I only converted a couple of places (including BFS) to use kzallo() - there is surely plenty more cases that can be improved.
Regards, ------ Tigran A. Aivazian | http://www.sco.com Escalations Research Group | tel: +44-(0)1923-813796 Santa Cruz Operation Ltd | http://www.ocston.org/~tigran
diff -urN -X dontdiff linux/fs/bfs/inode.c linux-kzalloc/fs/bfs/inode.c --- linux/fs/bfs/inode.c Tue Nov 9 18:02:33 1999 +++ linux-kzalloc/fs/bfs/inode.c Thu Jan 20 15:34:27 2000 @@ -296,17 +296,15 @@ + BFS_ROOT_INO - 1; bmap_len = sizeof(struct bfs_bmap) * s->su_lasti; - s->su_bmap = kmalloc(bmap_len, GFP_KERNEL); + s->su_bmap = kzalloc(bmap_len, GFP_KERNEL); if (!s->su_bmap) goto out; - memset(s->su_bmap, 0, bmap_len); imap_len = s->su_lasti/8 + 1; - s->su_imap = kmalloc(imap_len, GFP_KERNEL); + s->su_imap = kzalloc(imap_len, GFP_KERNEL); if (!s->su_imap) { kfree(s->su_bmap); goto out; } - memset(s->su_imap, 0, imap_len); for (i=0; i<BFS_ROOT_INO; i++) { s->su_bmap[i].start = s->su_bmap[i].end = 0; set_bit(i, s->su_imap); diff -urN -X dontdiff linux/fs/super.c linux-kzalloc/fs/super.c --- linux/fs/super.c Wed Jan 19 07:41:04 2000 +++ linux-kzalloc/fs/super.c Thu Jan 20 15:36:39 2000 @@ -89,10 +89,9 @@ struct vfsmount *lptr; char *tmp, *name; - lptr = (struct vfsmount *)kmalloc(sizeof(struct vfsmount), GFP_KERNEL); + lptr = (struct vfsmount *)kzalloc(sizeof(struct vfsmount), GFP_KERNEL); if (!lptr) goto out; - memset(lptr, 0, sizeof(struct vfsmount)); lptr->mnt_sb = sb; lptr->mnt_dev = sb->s_dev; @@ -517,10 +516,9 @@ /* Need a new one... */ if (nr_super_blocks >= max_super_blocks) return NULL; - s = kmalloc(sizeof(struct super_block), GFP_USER); + s = kzalloc(sizeof(struct super_block), GFP_USER); if (s) { nr_super_blocks++; - memset(s, 0, sizeof(struct super_block)); INIT_LIST_HEAD(&s->s_dirty); list_add (&s->s_list, super_blocks.prev); init_waitqueue_head(&s->s_wait); diff -urN -X dontdiff linux/kernel/ksyms.c linux-kzalloc/kernel/ksyms.c --- linux/kernel/ksyms.c Wed Jan 19 07:41:06 2000 +++ linux-kzalloc/kernel/ksyms.c Thu Jan 20 15:34:02 2000 @@ -106,6 +106,7 @@ EXPORT_SYMBOL(kmem_cache_alloc); EXPORT_SYMBOL(kmem_cache_free); EXPORT_SYMBOL(kmalloc); +EXPORT_SYMBOL(kzalloc); EXPORT_SYMBOL(kfree); EXPORT_SYMBOL(kfree_s); EXPORT_SYMBOL(vmalloc); diff -urN -X dontdiff linux/mm/slab.c linux-kzalloc/mm/slab.c --- linux/mm/slab.c Wed Jan 19 07:41:07 2000 +++ linux-kzalloc/mm/slab.c Thu Jan 20 15:33:21 2000 @@ -1683,6 +1683,17 @@ return NULL; } +void * +kzalloc(size_t size, int flags) +{ + void * mem; + + mem = kmalloc(size, flags); + if (mem) + memset(mem, 0, size); + return mem; +} + void kfree(const void *objp) {
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |