Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/fs/v7fs v7fs: replace malloc(9) with kmem(9), fix a memo...
details: https://anonhg.NetBSD.org/src/rev/6e75e8444a7d
branches: trunk
changeset: 791489:6e75e8444a7d
user: rmind <rmind%NetBSD.org@localhost>
date: Wed Nov 20 23:44:23 2013 +0000
description:
v7fs: replace malloc(9) with kmem(9), fix a memory leak and few missing
mutex destruction cases in the error path.
diffstat:
sys/fs/v7fs/v7fs_io_kern.c | 57 +++++++++++++++++++--------------------------
sys/fs/v7fs/v7fs_vfsops.c | 23 ++++-------------
sys/fs/v7fs/v7fs_vnops.c | 13 ++++------
3 files changed, 35 insertions(+), 58 deletions(-)
diffs (273 lines):
diff -r 2b7154a0ad72 -r 6e75e8444a7d sys/fs/v7fs/v7fs_io_kern.c
--- a/sys/fs/v7fs/v7fs_io_kern.c Wed Nov 20 22:22:20 2013 +0000
+++ b/sys/fs/v7fs/v7fs_io_kern.c Wed Nov 20 23:44:23 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: v7fs_io_kern.c,v 1.1 2011/06/27 11:52:25 uch Exp $ */
+/* $NetBSD: v7fs_io_kern.c,v 1.2 2013/11/20 23:44:23 rmind Exp $ */
/*-
* Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,19 +30,19 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_io_kern.c,v 1.1 2011/06/27 11:52:25 uch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_io_kern.c,v 1.2 2013/11/20 23:44:23 rmind Exp $");
#if defined _KERNEL_OPT
#include "opt_v7fs.h"
#endif
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_io_kern.c,v 1.1 2011/06/27 11:52:25 uch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_io_kern.c,v 1.2 2013/11/20 23:44:23 rmind Exp $");
#include <sys/param.h>
#include <sys/types.h>
#include <sys/systm.h>
#include <sys/buf.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
#include <sys/kauth.h>
#include <sys/mutex.h>
@@ -69,8 +69,6 @@
static void v7fs_os_unlock(void *);
static bool lock_init(struct lock_ops *);
-MALLOC_JUSTDEFINE(M_V7FS, "v7fs core", "v7fs internal structures");
-
int
v7fs_io_init(struct v7fs_self **fs,
const struct v7fs_mount_device *mount_device, size_t block_size)
@@ -80,11 +78,8 @@
struct local_io *local;
int error = 0;
- /* Allocate myself */
- if (!(p = (struct v7fs_self *)malloc(sizeof(*p), M_TEMP, M_WAITOK |
- M_ZERO)))
+ if ((p = kmem_zalloc(sizeof(*p), KM_SLEEP)) == NULL)
return ENOMEM;
- memset(p, 0, sizeof(*p));
p->scratch_free = -1;
p->scratch_remain = V7FS_SELF_NSCRATCH;
@@ -95,8 +90,7 @@
v7fs_endian_init(p);
#endif
/* IO */
- if (!(local = (struct local_io *)malloc(sizeof(*local), M_TEMP,
- M_WAITOK | M_ZERO))) {
+ if ((local = kmem_zalloc(sizeof(*local), KM_SLEEP)) == NULL) {
error = ENOMEM;
goto errexit;
}
@@ -124,44 +118,41 @@
return 0;
errexit:
- if (p->io.cookie)
- free(p->io.cookie, M_TEMP);
- if (p->sb_lock.cookie)
- free(p->sb_lock.cookie, M_TEMP);
- if (p->ilist_lock.cookie)
- free(p->ilist_lock.cookie, M_TEMP);
- if (p->mem_lock.cookie)
- free(p->mem_lock.cookie, M_TEMP);
- free(p, M_TEMP);
-
+ v7fs_io_fini(p);
return error;
}
static bool
lock_init(struct lock_ops *ops)
{
- if (!(ops->cookie = (kmutex_t *)malloc(sizeof(kmutex_t), M_TEMP,
- M_WAITOK | M_ZERO))) {
+ if ((ops->cookie = kmem_zalloc(sizeof(kmutex_t), KM_SLEEP)) == NULL) {
return false;
}
mutex_init(ops->cookie, MUTEX_DEFAULT, IPL_NONE);
ops->lock = v7fs_os_lock;
ops->unlock = v7fs_os_unlock;
-
return true;
}
void
v7fs_io_fini(struct v7fs_self *fs)
{
- mutex_destroy(fs->sb_lock.cookie);
- mutex_destroy(fs->ilist_lock.cookie);
- mutex_destroy(fs->mem_lock.cookie);
-
- free(fs->io.cookie, M_TEMP);
- free(fs->sb_lock.cookie, M_TEMP);
- free(fs->ilist_lock.cookie, M_TEMP);
- free(fs, M_TEMP);
+ if (fs->io.cookie) {
+ kmem_free(fs->io.cookie, sizeof(struct local_io));
+ }
+ if (fs->sb_lock.cookie) {
+ mutex_destroy(fs->sb_lock.cookie);
+ kmem_free(fs->sb_lock.cookie, sizeof(kmutex_t));
+ }
+ if (fs->ilist_lock.cookie) {
+ mutex_destroy(fs->ilist_lock.cookie);
+ kmem_free(fs->ilist_lock.cookie, sizeof(kmutex_t));
+ }
+ if (fs->mem_lock.cookie) {
+ mutex_destroy(fs->mem_lock.cookie);
+ kmem_free(fs->mem_lock.cookie, sizeof(kmutex_t));
+ }
+ kmem_free(fs, sizeof(*fs));
}
static bool
diff -r 2b7154a0ad72 -r 6e75e8444a7d sys/fs/v7fs/v7fs_vfsops.c
--- a/sys/fs/v7fs/v7fs_vfsops.c Wed Nov 20 22:22:20 2013 +0000
+++ b/sys/fs/v7fs/v7fs_vfsops.c Wed Nov 20 23:44:23 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: v7fs_vfsops.c,v 1.7 2012/06/13 22:56:51 joerg Exp $ */
+/* $NetBSD: v7fs_vfsops.c,v 1.8 2013/11/20 23:44:23 rmind Exp $ */
/*-
* Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_vfsops.c,v 1.7 2012/06/13 22:56:51 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_vfsops.c,v 1.8 2013/11/20 23:44:23 rmind Exp $");
#if defined _KERNEL_OPT
#include "opt_v7fs.h"
#endif
@@ -45,7 +45,7 @@
#include <sys/disk.h>
#include <sys/device.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
#include <sys/kauth.h>
#include <sys/proc.h>
@@ -67,8 +67,6 @@
#define DPRINTF(arg...) ((void)0)
#endif
-MALLOC_JUSTDEFINE(M_V7FS_VFS, "v7fs vfs", "v7fs vfs structures");
-
struct pool v7fs_node_pool;
static int v7fs_mountfs(struct vnode *, struct mount *, int);
@@ -254,7 +252,7 @@
DPRINTF("%d\n",endian);
- v7fsmount = malloc(sizeof(*v7fsmount), M_V7FS_VFS, M_WAITOK);
+ v7fsmount = kmem_zalloc(sizeof(*v7fsmount), KM_SLEEP);
if (v7fsmount == NULL) {
return ENOMEM;
}
@@ -288,7 +286,7 @@
return 0;
err_exit:
- free(v7fsmount, M_V7FS_VFS);
+ kmem_free(v7fsmount, sizeof(*v7fsmount));
return error;
}
@@ -319,7 +317,7 @@
v7fs_io_fini(v7fsmount->core);
- free(v7fsmount, M_V7FS_VFS);
+ kmem_free(v7fsmount, sizeof(*v7fsmount));
mp->mnt_data = NULL;
mp->mnt_flag &= ~MNT_LOCAL;
@@ -522,17 +520,11 @@
return EOPNOTSUPP;
}
-MALLOC_DECLARE(M_V7FS);
-MALLOC_DECLARE(M_V7FS_VNODE);
-
void
v7fs_init(void)
{
DPRINTF("\n");
- malloc_type_attach(M_V7FS_VFS);
- malloc_type_attach(M_V7FS);
- malloc_type_attach(M_V7FS_VNODE);
pool_init(&v7fs_node_pool, sizeof(struct v7fs_node), 0, 0, 0,
"v7fs_node_pool", &pool_allocator_nointr, IPL_NONE);
}
@@ -551,9 +543,6 @@
DPRINTF("\n");
pool_destroy(&v7fs_node_pool);
- malloc_type_detach(M_V7FS);
- malloc_type_detach(M_V7FS_VFS);
- malloc_type_detach(M_V7FS_VNODE);
}
int
diff -r 2b7154a0ad72 -r 6e75e8444a7d sys/fs/v7fs/v7fs_vnops.c
--- a/sys/fs/v7fs/v7fs_vnops.c Wed Nov 20 22:22:20 2013 +0000
+++ b/sys/fs/v7fs/v7fs_vnops.c Wed Nov 20 23:44:23 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: v7fs_vnops.c,v 1.12 2013/03/18 19:35:42 plunky Exp $ */
+/* $NetBSD: v7fs_vnops.c,v 1.13 2013/11/20 23:44:23 rmind Exp $ */
/*-
* Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.12 2013/03/18 19:35:42 plunky Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.13 2013/11/20 23:44:23 rmind Exp $");
#if defined _KERNEL_OPT
#include "opt_v7fs.h"
#endif
@@ -41,7 +41,7 @@
#include <sys/vnode.h>
#include <sys/namei.h>
#include <sys/dirent.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
#include <sys/lockf.h>
#include <sys/unistd.h>
#include <sys/fcntl.h>
@@ -64,9 +64,6 @@
#define DPRINTF(arg...) ((void)0)
#endif
-MALLOC_JUSTDEFINE(M_V7FS_VNODE, "v7fs vnode", "v7fs vnode structures");
-MALLOC_DECLARE(M_V7FS);
-
int v7fs_vnode_reload(struct mount *, struct vnode *);
static v7fs_mode_t vtype_to_v7fs_mode(enum vtype);
@@ -983,7 +980,7 @@
DPRINTF("uio buffer too small\n");
return ENOMEM;
}
- dp = malloc(sizeof(*dp), M_V7FS, M_WAITOK | M_ZERO);
+ dp = kmem_zalloc(sizeof(*dp), KM_SLEEP);
arg.cnt = 0;
arg.dp = dp;
arg.uio = uio;
@@ -996,7 +993,7 @@
if (error < 0)
error = 0;
- free(dp, M_V7FS);
+ kmem_free(dp, sizeof(*dp));
return error;
}
Home |
Main Index |
Thread Index |
Old Index