[patch-2.3.40-pre6] kzalloc() (ala kmem_zalloc() of SVR4)

From: Tigran Aivazian (tigran@sco.COM)
Date: Thu Jan 20 2000 - 10:54:02 EST


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/



This archive was generated by hypermail 2b29 : Sun Jan 23 2000 - 21:00:22 EST