Module Name: src Committed By: rmind Date: Mon Apr 30 22:51:28 UTC 2012
Modified Files: src/sys/fs/union: union_vfsops.c src/sys/kern: kern_malloc.c src/sys/miscfs/nullfs: null_vfsops.c src/sys/miscfs/overlay: overlay_vfsops.c src/sys/miscfs/procfs: procfs_vfsops.c src/sys/miscfs/umapfs: umap_vfsops.c src/sys/netinet: ip_mroute.c ip_output.c src/sys/sys: malloc.h src/sys/ufs/chfs: chfs_vfsops.c src/sys/ufs/ext2fs: ext2fs_vfsops.c src/sys/ufs/lfs: lfs_vfsops.c Log Message: - Replace some malloc(9) uses with kmem(9). - G/C M_IPMOPTS, M_IPMADDR and M_BWMETER. To generate a diff of this commit: cvs rdiff -u -r1.67 -r1.68 src/sys/fs/union/union_vfsops.c cvs rdiff -u -r1.141 -r1.142 src/sys/kern/kern_malloc.c cvs rdiff -u -r1.83 -r1.84 src/sys/miscfs/nullfs/null_vfsops.c cvs rdiff -u -r1.56 -r1.57 src/sys/miscfs/overlay/overlay_vfsops.c cvs rdiff -u -r1.86 -r1.87 src/sys/miscfs/procfs/procfs_vfsops.c cvs rdiff -u -r1.87 -r1.88 src/sys/miscfs/umapfs/umap_vfsops.c cvs rdiff -u -r1.123 -r1.124 src/sys/netinet/ip_mroute.c cvs rdiff -u -r1.214 -r1.215 src/sys/netinet/ip_output.c cvs rdiff -u -r1.113 -r1.114 src/sys/sys/malloc.h cvs rdiff -u -r1.3 -r1.4 src/sys/ufs/chfs/chfs_vfsops.c cvs rdiff -u -r1.163 -r1.164 src/sys/ufs/ext2fs/ext2fs_vfsops.c cvs rdiff -u -r1.295 -r1.296 src/sys/ufs/lfs/lfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/fs/union/union_vfsops.c diff -u src/sys/fs/union/union_vfsops.c:1.67 src/sys/fs/union/union_vfsops.c:1.68 --- src/sys/fs/union/union_vfsops.c:1.67 Mon Dec 5 11:12:10 2011 +++ src/sys/fs/union/union_vfsops.c Mon Apr 30 22:51:27 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: union_vfsops.c,v 1.67 2011/12/05 11:12:10 hannken Exp $ */ +/* $NetBSD: union_vfsops.c,v 1.68 2012/04/30 22:51:27 rmind Exp $ */ /* * Copyright (c) 1994 The Regents of the University of California. @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: union_vfsops.c,v 1.67 2011/12/05 11:12:10 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: union_vfsops.c,v 1.68 2012/04/30 22:51:27 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -164,8 +164,7 @@ union_mount(struct mount *mp, const char goto bad; } - um = (struct union_mount *) malloc(sizeof(struct union_mount), - M_UFSMNT, M_WAITOK); /* XXX */ + um = kmem_zalloc(sizeof(struct union_mount), KM_SLEEP); /* * Keep a held reference to the target vnodes. @@ -291,7 +290,7 @@ union_mount(struct mount *mp, const char bad: if (um) - free(um, M_UFSMNT); + kmem_free(um, sizeof(struct union_mount)); if (upperrootvp) vrele(upperrootvp); if (lowerrootvp) @@ -372,9 +371,9 @@ union_unmount(struct mount *mp, int mntf /* * Finally, throw away the union_mount structure */ - free(mp->mnt_data, M_UFSMNT); /* XXX */ + kmem_free(um, sizeof(struct union_mount)); mp->mnt_data = NULL; - return (0); + return 0; } int Index: src/sys/kern/kern_malloc.c diff -u src/sys/kern/kern_malloc.c:1.141 src/sys/kern/kern_malloc.c:1.142 --- src/sys/kern/kern_malloc.c:1.141 Sun Apr 29 20:27:31 2012 +++ src/sys/kern/kern_malloc.c Mon Apr 30 22:51:27 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_malloc.c,v 1.141 2012/04/29 20:27:31 dsl Exp $ */ +/* $NetBSD: kern_malloc.c,v 1.142 2012/04/30 22:51:27 rmind Exp $ */ /* * Copyright (c) 1987, 1991, 1993 @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_malloc.c,v 1.141 2012/04/29 20:27:31 dsl Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_malloc.c,v 1.142 2012/04/30 22:51:27 rmind Exp $"); #include <sys/param.h> #include <sys/malloc.h> @@ -90,10 +90,7 @@ MALLOC_DEFINE(M_RTABLE, "routetbl", "rou MALLOC_DEFINE(M_FTABLE, "fragtbl", "fragment reassembly header"); MALLOC_DEFINE(M_UFSMNT, "UFS mount", "UFS mount structure"); MALLOC_DEFINE(M_NETADDR, "Export Host", "Export host address structure"); -MALLOC_DEFINE(M_IPMOPTS, "ip_moptions", "internet multicast options"); -MALLOC_DEFINE(M_IPMADDR, "in_multi", "internet multicast address"); MALLOC_DEFINE(M_MRTABLE, "mrt", "multicast routing tables"); -MALLOC_DEFINE(M_BWMETER, "bwmeter", "multicast upcall bw meters"); /* * Header contains total size, including the header itself. Index: src/sys/miscfs/nullfs/null_vfsops.c diff -u src/sys/miscfs/nullfs/null_vfsops.c:1.83 src/sys/miscfs/nullfs/null_vfsops.c:1.84 --- src/sys/miscfs/nullfs/null_vfsops.c:1.83 Fri Nov 19 06:44:46 2010 +++ src/sys/miscfs/nullfs/null_vfsops.c Mon Apr 30 22:51:27 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: null_vfsops.c,v 1.83 2010/11/19 06:44:46 dholland Exp $ */ +/* $NetBSD: null_vfsops.c,v 1.84 2012/04/30 22:51:27 rmind Exp $ */ /* * Copyright (c) 1999 National Aeronautics & Space Administration @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: null_vfsops.c,v 1.83 2010/11/19 06:44:46 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: null_vfsops.c,v 1.84 2012/04/30 22:51:27 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -137,7 +137,7 @@ nullfs_mount(struct mount *mp, const cha pathbuf_destroy(pb); /* Create the mount point. */ - nmp = malloc(sizeof(struct null_mount), M_UFSMNT, M_WAITOK | M_ZERO); + nmp = kmem_zalloc(sizeof(struct null_mount), KM_SLEEP); mp->mnt_data = nmp; nmp->nullm_vfs = lowerrootvp->v_mount; if (nmp->nullm_vfs->mnt_flag & MNT_LOCAL) @@ -164,7 +164,7 @@ nullfs_mount(struct mount *mp, const cha vput(lowerrootvp); hashdone(nmp->nullm_node_hashtbl, HASH_LIST, nmp->nullm_node_hash); - free(nmp, M_UFSMNT); + kmem_free(nmp, sizeof(struct null_mount)); return error; } /* @@ -203,7 +203,7 @@ nullfs_unmount(struct mount *mp, int mnt /* Finally, destroy the mount point structures. */ hashdone(nmp->nullm_node_hashtbl, HASH_LIST, nmp->nullm_node_hash); mutex_destroy(&nmp->nullm_hashlock); - free(mp->mnt_data, M_UFSMNT); + kmem_free(mp->mnt_data, sizeof(struct null_mount)); mp->mnt_data = NULL; return 0; } Index: src/sys/miscfs/overlay/overlay_vfsops.c diff -u src/sys/miscfs/overlay/overlay_vfsops.c:1.56 src/sys/miscfs/overlay/overlay_vfsops.c:1.57 --- src/sys/miscfs/overlay/overlay_vfsops.c:1.56 Fri Jul 9 08:14:26 2010 +++ src/sys/miscfs/overlay/overlay_vfsops.c Mon Apr 30 22:51:27 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: overlay_vfsops.c,v 1.56 2010/07/09 08:14:26 hannken Exp $ */ +/* $NetBSD: overlay_vfsops.c,v 1.57 2012/04/30 22:51:27 rmind Exp $ */ /* * Copyright (c) 1999, 2000 National Aeronautics & Space Administration @@ -74,7 +74,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: overlay_vfsops.c,v 1.56 2010/07/09 08:14:26 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: overlay_vfsops.c,v 1.57 2012/04/30 22:51:27 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -145,9 +145,7 @@ ov_mount(struct mount *mp, const char *p /* * First cut at fixing up upper mount point */ - nmp = (struct overlay_mount *) malloc(sizeof(struct overlay_mount), - M_UFSMNT, M_WAITOK); /* XXX */ - memset(nmp, 0, sizeof(struct overlay_mount)); + nmp = kmem_zalloc(sizeof(struct overlay_mount), KM_SLEEP); mp->mnt_data = nmp; nmp->ovm_vfs = lowerrootvp->v_mount; @@ -179,8 +177,8 @@ ov_mount(struct mount *mp, const char *p if (error) { vput(lowerrootvp); hashdone(nmp->ovm_node_hashtbl, HASH_LIST, nmp->ovm_node_hash); - free(nmp, M_UFSMNT); /* XXX */ - return (error); + kmem_free(nmp, sizeof(struct overlay_mount)); + return error; } /* * Unlock the node @@ -239,7 +237,7 @@ ov_unmount(struct mount *mp, int mntflag omp = mp->mnt_data; mutex_destroy(&omp->ovm_hashlock); hashdone(omp->ovm_node_hashtbl, HASH_LIST, omp->ovm_node_hash); - free(omp, M_UFSMNT); /* XXX */ + kmem_free(omp, sizeof(struct overlay_mount)); mp->mnt_data = NULL; return 0; } Index: src/sys/miscfs/procfs/procfs_vfsops.c diff -u src/sys/miscfs/procfs/procfs_vfsops.c:1.86 src/sys/miscfs/procfs/procfs_vfsops.c:1.87 --- src/sys/miscfs/procfs/procfs_vfsops.c:1.86 Tue Sep 27 01:23:59 2011 +++ src/sys/miscfs/procfs/procfs_vfsops.c Mon Apr 30 22:51:28 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: procfs_vfsops.c,v 1.86 2011/09/27 01:23:59 christos Exp $ */ +/* $NetBSD: procfs_vfsops.c,v 1.87 2012/04/30 22:51:28 rmind Exp $ */ /* * Copyright (c) 1993 @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: procfs_vfsops.c,v 1.86 2011/09/27 01:23:59 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: procfs_vfsops.c,v 1.87 2012/04/30 22:51:28 rmind Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -154,8 +154,7 @@ procfs_mount( if (*data_len >= sizeof *args && args->version != PROCFS_ARGSVERSION) return EINVAL; - pmnt = (struct procfsmount *) malloc(sizeof(struct procfsmount), - M_UFSMNT, M_WAITOK); /* XXX need new malloc type */ + pmnt = kmem_zalloc(sizeof(struct procfsmount), KM_SLEEP); mp->mnt_stat.f_namemax = PROCFS_MAXNAMLEN; mp->mnt_flag |= MNT_LOCAL; @@ -191,10 +190,10 @@ procfs_unmount(struct mount *mp, int mnt exechook_disestablish(VFSTOPROC(mp)->pmnt_exechook); - free(mp->mnt_data, M_UFSMNT); + kmem_free(mp->mnt_data, sizeof(struct procfsmount)); mp->mnt_data = NULL; - return (0); + return 0; } int Index: src/sys/miscfs/umapfs/umap_vfsops.c diff -u src/sys/miscfs/umapfs/umap_vfsops.c:1.87 src/sys/miscfs/umapfs/umap_vfsops.c:1.88 --- src/sys/miscfs/umapfs/umap_vfsops.c:1.87 Tue Mar 13 18:40:58 2012 +++ src/sys/miscfs/umapfs/umap_vfsops.c Mon Apr 30 22:51:28 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: umap_vfsops.c,v 1.87 2012/03/13 18:40:58 elad Exp $ */ +/* $NetBSD: umap_vfsops.c,v 1.88 2012/04/30 22:51:28 rmind Exp $ */ /* * Copyright (c) 1992, 1993 @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: umap_vfsops.c,v 1.87 2012/03/13 18:40:58 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: umap_vfsops.c,v 1.88 2012/04/30 22:51:28 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -142,10 +142,7 @@ umapfs_mount(struct mount *mp, const cha printf("mp = %p\n", mp); #endif - amp = (struct umap_mount *) malloc(sizeof(struct umap_mount), - M_UFSMNT, M_WAITOK); /* XXX */ - memset(amp, 0, sizeof(struct umap_mount)); - + amp = kmem_zalloc(sizeof(struct umap_mount), KM_SLEEP); mp->mnt_data = amp; amp->umapm_vfs = lowerrootvp->v_mount; if (amp->umapm_vfs->mnt_flag & MNT_LOCAL) @@ -216,8 +213,8 @@ umapfs_mount(struct mount *mp, const cha vput(lowerrootvp); hashdone(amp->umapm_node_hashtbl, HASH_LIST, amp->umapm_node_hash); - free(amp, M_UFSMNT); /* XXX */ - return (error); + kmem_free(amp, sizeof(struct umap_mount)); + return error; } /* * Unlock the node (either the lower or the alias) @@ -275,9 +272,9 @@ umapfs_unmount(struct mount *mp, int mnt */ mutex_destroy(&->umapm_hashlock); hashdone(amp->umapm_node_hashtbl, HASH_LIST, amp->umapm_node_hash); - free(amp, M_UFSMNT); /* XXX */ + kmem_free(amp, sizeof(struct umap_mount)); mp->mnt_data = NULL; - return (0); + return 0; } extern const struct vnodeopv_desc umapfs_vnodeop_opv_desc; Index: src/sys/netinet/ip_mroute.c diff -u src/sys/netinet/ip_mroute.c:1.123 src/sys/netinet/ip_mroute.c:1.124 --- src/sys/netinet/ip_mroute.c:1.123 Thu Mar 22 20:34:39 2012 +++ src/sys/netinet/ip_mroute.c Mon Apr 30 22:51:28 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_mroute.c,v 1.123 2012/03/22 20:34:39 drochner Exp $ */ +/* $NetBSD: ip_mroute.c,v 1.124 2012/04/30 22:51:28 rmind Exp $ */ /* * Copyright (c) 1992, 1993 @@ -93,7 +93,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.123 2012/03/22 20:34:39 drochner Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.124 2012/04/30 22:51:28 rmind Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -1571,7 +1571,7 @@ expire_upcalls(void *v) struct bw_meter *x = rt->mfc_bw_meter; rt->mfc_bw_meter = x->bm_mfc_next; - free(x, M_BWMETER); + kmem_free(x, sizeof(*x)); } ++mrtstat.mrts_cache_cleanups; @@ -2511,7 +2511,7 @@ add_bw_upcall(struct bw_upcall *req) } /* Allocate the new bw_meter entry */ - x = (struct bw_meter *)malloc(sizeof(*x), M_BWMETER, M_NOWAIT); + x = kmem_intr_alloc(sizeof(*x), KM_NOSLEEP); if (x == NULL) { splx(s); return ENOBUFS; @@ -2547,7 +2547,7 @@ free_bw_list(struct bw_meter *list) list = list->bm_mfc_next; unschedule_bw_meter(x); - free(x, M_BWMETER); + kmem_free(x, sizeof(*x)); } } @@ -2606,7 +2606,7 @@ del_bw_upcall(struct bw_upcall *req) unschedule_bw_meter(x); splx(s); /* Free the bw_meter entry */ - free(x, M_BWMETER); + kmem_free(x, sizeof(*x)); return 0; } else { splx(s); Index: src/sys/netinet/ip_output.c diff -u src/sys/netinet/ip_output.c:1.214 src/sys/netinet/ip_output.c:1.215 --- src/sys/netinet/ip_output.c:1.214 Thu Mar 22 20:34:39 2012 +++ src/sys/netinet/ip_output.c Mon Apr 30 22:51:28 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_output.c,v 1.214 2012/03/22 20:34:39 drochner Exp $ */ +/* $NetBSD: ip_output.c,v 1.215 2012/04/30 22:51:28 rmind Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.214 2012/03/22 20:34:39 drochner Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.215 2012/04/30 22:51:28 rmind Exp $"); #include "opt_pfil_hooks.h" #include "opt_inet.h" @@ -100,6 +100,7 @@ __KERNEL_RCSID(0, "$NetBSD: ip_output.c, #include <sys/param.h> #include <sys/malloc.h> +#include <sys/kmem.h> #include <sys/mbuf.h> #include <sys/errno.h> #include <sys/protosw.h> @@ -1455,29 +1456,27 @@ ip_getoptval(const struct sockopt *sopt, int ip_setmoptions(struct ip_moptions **imop, const struct sockopt *sopt) { - int error = 0; - int i; struct in_addr addr; struct ip_mreq lmreq, *mreq; struct ifnet *ifp; struct ip_moptions *imo = *imop; - int ifindex; + int i, ifindex, error = 0; if (imo == NULL) { /* * No multicast option buffer attached to the pcb; * allocate one and initialize to default values. */ - imo = malloc(sizeof(*imo), M_IPMOPTS, M_NOWAIT); + imo = kmem_intr_alloc(sizeof(*imo), KM_NOSLEEP); if (imo == NULL) - return (ENOBUFS); + return ENOBUFS; - *imop = imo; imo->imo_multicast_ifp = NULL; imo->imo_multicast_addr.s_addr = INADDR_ANY; imo->imo_multicast_ttl = IP_DEFAULT_MULTICAST_TTL; imo->imo_multicast_loop = IP_DEFAULT_MULTICAST_LOOP; imo->imo_num_memberships = 0; + *imop = imo; } switch (sopt->sopt_name) { @@ -1672,11 +1671,11 @@ ip_setmoptions(struct ip_moptions **imop imo->imo_multicast_ttl == IP_DEFAULT_MULTICAST_TTL && imo->imo_multicast_loop == IP_DEFAULT_MULTICAST_LOOP && imo->imo_num_memberships == 0) { - free(*imop, M_IPMOPTS); + kmem_free(imo, sizeof(*imo)); *imop = NULL; } - return (error); + return error; } /* @@ -1738,7 +1737,7 @@ ip_freemoptions(struct ip_moptions *imo) if (imo != NULL) { for (i = 0; i < imo->imo_num_memberships; ++i) in_delmulti(imo->imo_membership[i]); - free(imo, M_IPMOPTS); + kmem_free(imo, sizeof(*imo)); } } Index: src/sys/sys/malloc.h diff -u src/sys/sys/malloc.h:1.113 src/sys/sys/malloc.h:1.114 --- src/sys/sys/malloc.h:1.113 Sun Apr 29 20:27:32 2012 +++ src/sys/sys/malloc.h Mon Apr 30 22:51:27 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: malloc.h,v 1.113 2012/04/29 20:27:32 dsl Exp $ */ +/* $NetBSD: malloc.h,v 1.114 2012/04/30 22:51:27 rmind Exp $ */ /* * Copyright (c) 1987, 1993 @@ -62,10 +62,7 @@ MALLOC_DECLARE(M_RTABLE); MALLOC_DECLARE(M_FTABLE); MALLOC_DECLARE(M_UFSMNT); MALLOC_DECLARE(M_NETADDR); -MALLOC_DECLARE(M_IPMOPTS); -MALLOC_DECLARE(M_IPMADDR); MALLOC_DECLARE(M_MRTABLE); -MALLOC_DECLARE(M_BWMETER); #endif void *kern_malloc(unsigned long, int); Index: src/sys/ufs/chfs/chfs_vfsops.c diff -u src/sys/ufs/chfs/chfs_vfsops.c:1.3 src/sys/ufs/chfs/chfs_vfsops.c:1.4 --- src/sys/ufs/chfs/chfs_vfsops.c:1.3 Thu Apr 12 15:31:01 2012 +++ src/sys/ufs/chfs/chfs_vfsops.c Mon Apr 30 22:51:28 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: chfs_vfsops.c,v 1.3 2012/04/12 15:31:01 ttoth Exp $ */ +/* $NetBSD: chfs_vfsops.c,v 1.4 2012/04/30 22:51:28 rmind Exp $ */ /*- * Copyright (c) 2010 Department of Software Engineering, @@ -255,20 +255,15 @@ chfs_mountfs(struct vnode *devvp, struct return (err); } - ump = malloc(sizeof(*ump), M_UFSMNT, M_WAITOK); - memset(ump, 0, sizeof(*ump)); + ump = kmem_zalloc(sizeof(struct ufsmount), KM_SLEEP); + ump->um_fstype = UFS1; //ump->um_ops = &chfs_ufsops; - ump->um_chfs = malloc(sizeof(struct chfs_mount), - M_UFSMNT, M_WAITOK); - memset(ump->um_chfs, 0, sizeof(struct chfs_mount)); - + ump->um_chfs = kmem_zalloc(sizeof(struct chfs_mount), KM_SLEEP); mutex_init(&ump->um_lock, MUTEX_DEFAULT, IPL_NONE); /* Get superblock and set flash device number */ chmp = ump->um_chfs; - if (!chmp) - return ENOMEM; chmp->chm_ebh = kmem_alloc(sizeof(struct chfs_ebh), KM_SLEEP); @@ -276,9 +271,7 @@ chfs_mountfs(struct vnode *devvp, struct err = ebh_open(chmp->chm_ebh, devvp->v_rdev); if (err) { dbg("error while opening flash\n"); - kmem_free(chmp->chm_ebh, sizeof(struct chfs_ebh)); - free(chmp, M_UFSMNT); - return err; + goto fail; } //TODO check flash sizes @@ -289,14 +282,6 @@ chfs_mountfs(struct vnode *devvp, struct chmp->chm_blocks = kmem_zalloc(chmp->chm_ebh->peb_nr * sizeof(struct chfs_eraseblock), KM_SLEEP); - if (!chmp->chm_blocks) { - kmem_free(chmp->chm_ebh, chmp->chm_ebh->peb_nr * - sizeof(struct chfs_eraseblock)); - ebh_close(chmp->chm_ebh); - free(chmp, M_UFSMNT); - return ENOMEM; - } - mutex_init(&chmp->chm_lock_mountfields, MUTEX_DEFAULT, IPL_NONE); mutex_init(&chmp->chm_lock_sizes, MUTEX_DEFAULT, IPL_NONE); mutex_init(&chmp->chm_lock_vnocache, MUTEX_DEFAULT, IPL_NONE); @@ -337,11 +322,9 @@ chfs_mountfs(struct vnode *devvp, struct if (err) { chfs_vnocache_hash_destroy(chmp->chm_vnocache_hash); - kmem_free(chmp->chm_ebh, chmp->chm_ebh->peb_nr * - sizeof(struct chfs_eraseblock)); ebh_close(chmp->chm_ebh); - free(chmp, M_UFSMNT); - return EIO; + err = EIO; + goto fail; } mp->mnt_data = ump; @@ -385,6 +368,11 @@ chfs_mountfs(struct vnode *devvp, struct devvp->v_specmountpoint = mp; return 0; +fail: + kmem_free(chmp->chm_ebh, sizeof(struct chfs_ebh)); + kmem_free(chmp, sizeof(struct chfs_mount)); + kmem_free(ump, sizeof(struct ufsmount)); + return err; } /* --------------------------------------------------------------------- */ @@ -438,8 +426,8 @@ chfs_unmount(struct mount *mp, int mntfl mutex_destroy(&ump->um_lock); - //free(ump->um_chfs, M_UFSMNT); - free(ump, M_UFSMNT); + //kmem_free(ump->um_chfs, sizeof(struct chfs_mount)); + kmem_free(ump, sizeof(struct ufsmount)); mp->mnt_data = NULL; mp->mnt_flag &= ~MNT_LOCAL; dbg("[END]\n"); Index: src/sys/ufs/ext2fs/ext2fs_vfsops.c diff -u src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.163 src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.164 --- src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.163 Tue Mar 13 18:41:04 2012 +++ src/sys/ufs/ext2fs/ext2fs_vfsops.c Mon Apr 30 22:51:28 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: ext2fs_vfsops.c,v 1.163 2012/03/13 18:41:04 elad Exp $ */ +/* $NetBSD: ext2fs_vfsops.c,v 1.164 2012/04/30 22:51:28 rmind Exp $ */ /* * Copyright (c) 1989, 1991, 1993, 1994 @@ -60,7 +60,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.163 2012/03/13 18:41:04 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.164 2012/04/30 22:51:28 rmind Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -694,12 +694,10 @@ ext2fs_mountfs(struct vnode *devvp, stru error = ext2fs_checksb(fs, ronly); if (error) goto out; - ump = malloc(sizeof(*ump), M_UFSMNT, M_WAITOK); - memset(ump, 0, sizeof(*ump)); + ump = kmem_zalloc(sizeof(*ump), KM_SLEEP); ump->um_fstype = UFS1; ump->um_ops = &ext2fs_ufsops; - ump->um_e2fs = malloc(sizeof(struct m_ext2fs), M_UFSMNT, M_WAITOK); - memset(ump->um_e2fs, 0, sizeof(struct m_ext2fs)); + ump->um_e2fs = kmem_zalloc(sizeof(struct m_ext2fs), KM_SLEEP); e2fs_sbload((struct ext2fs *)bp->b_data, &ump->um_e2fs->e2fs); brelse(bp, 0); bp = NULL; @@ -731,15 +729,15 @@ ext2fs_mountfs(struct vnode *devvp, stru m_fs->e2fs_ipb = m_fs->e2fs_bsize / EXT2_DINODE_SIZE(m_fs); m_fs->e2fs_itpg = m_fs->e2fs.e2fs_ipg / m_fs->e2fs_ipb; - m_fs->e2fs_gd = malloc(m_fs->e2fs_ngdb * m_fs->e2fs_bsize, - M_UFSMNT, M_WAITOK); + m_fs->e2fs_gd = kmem_alloc(m_fs->e2fs_ngdb * m_fs->e2fs_bsize, KM_SLEEP); for (i = 0; i < m_fs->e2fs_ngdb; i++) { error = bread(devvp , fsbtodb(m_fs, m_fs->e2fs.e2fs_first_dblock + 1 /* superblock */ + i), m_fs->e2fs_bsize, NOCRED, 0, &bp); if (error) { - free(m_fs->e2fs_gd, M_UFSMNT); + kmem_free(m_fs->e2fs_gd, + m_fs->e2fs_ngdb * m_fs->e2fs_bsize); goto out; } e2fs_cgload((struct ext2_gd *)bp->b_data, @@ -777,8 +775,8 @@ out: KASSERT(bp != NULL); brelse(bp, 0); if (ump) { - free(ump->um_e2fs, M_UFSMNT); - free(ump, M_UFSMNT); + kmem_free(ump->um_e2fs, sizeof(struct m_ext2fs)); + kmem_free(ump, sizeof(*ump)); mp->mnt_data = NULL; } return (error); @@ -813,9 +811,9 @@ ext2fs_unmount(struct mount *mp, int mnt error = VOP_CLOSE(ump->um_devvp, fs->e2fs_ronly ? FREAD : FREAD|FWRITE, NOCRED); vput(ump->um_devvp); - free(fs->e2fs_gd, M_UFSMNT); - free(fs, M_UFSMNT); - free(ump, M_UFSMNT); + kmem_free(fs->e2fs_gd, fs->e2fs_ngdb * fs->e2fs_bsize); + kmem_free(fs, sizeof(*fs)); + kmem_free(ump, sizeof(*ump)); mp->mnt_data = NULL; mp->mnt_flag &= ~MNT_LOCAL; return (error); Index: src/sys/ufs/lfs/lfs_vfsops.c diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.295 src/sys/ufs/lfs/lfs_vfsops.c:1.296 --- src/sys/ufs/lfs/lfs_vfsops.c:1.295 Tue Mar 13 18:41:13 2012 +++ src/sys/ufs/lfs/lfs_vfsops.c Mon Apr 30 22:51:28 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs_vfsops.c,v 1.295 2012/03/13 18:41:13 elad Exp $ */ +/* $NetBSD: lfs_vfsops.c,v 1.296 2012/04/30 22:51:28 rmind Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007 @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.295 2012/03/13 18:41:13 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.296 2012/04/30 22:51:28 rmind Exp $"); #if defined(_KERNEL_OPT) #include "opt_lfs.h" @@ -927,7 +927,7 @@ lfs_mountfs(struct vnode *devvp, struct } /* Allocate the mount structure, copy the superblock into it. */ - fs = malloc(sizeof(struct lfs), M_UFSMNT, M_WAITOK | M_ZERO); + fs = kmem_zalloc(sizeof(struct lfs), KM_SLEEP); memcpy(&fs->lfs_dlfs, tdfs, sizeof(struct dlfs)); /* Compatibility */ @@ -952,7 +952,7 @@ lfs_mountfs(struct vnode *devvp, struct (long long)((bufmem_hiwater / bufmem_lowater) * LFS_INVERSE_MAX_BYTES( fsbtob(fs, LFS_NRESERVE(fs))) >> PAGE_SHIFT))); - free(fs, M_UFSMNT); + kmem_free(fs, sizeof(struct lfs)); error = EFBIG; /* XXX needs translation */ goto out; } @@ -963,7 +963,7 @@ lfs_mountfs(struct vnode *devvp, struct fs->lfs_rfpid = l->l_proc->p_pid; } - ump = malloc(sizeof *ump, M_UFSMNT, M_WAITOK | M_ZERO); + ump = kmem_zalloc(sizeof(*ump), KM_SLEEP); ump->um_lfs = fs; ump->um_ops = &lfs_ufsops; ump->um_fstype = UFS1; @@ -1151,8 +1151,8 @@ out: if (abp) brelse(abp, 0); if (ump) { - free(ump->um_lfs, M_UFSMNT); - free(ump, M_UFSMNT); + kmem_free(ump->um_lfs, sizeof(struct lfs)); + kmem_free(ump, sizeof(*ump)); mp->mnt_data = NULL; } @@ -1239,8 +1239,9 @@ lfs_unmount(struct mount *mp, int mntfla cv_destroy(&fs->lfs_stopcv); rw_destroy(&fs->lfs_fraglock); rw_destroy(&fs->lfs_iflock); - free(fs, M_UFSMNT); - free(ump, M_UFSMNT); + + kmem_free(fs, sizeof(struct lfs)); + kmem_free(ump, sizeof(*ump)); mp->mnt_data = NULL; mp->mnt_flag &= ~MNT_LOCAL;