From c683b6561f2021ea101b238f1161ffbff3aa5b39 Mon Sep 17 00:00:00 2001 From: yamt Date: Sat, 18 Nov 2006 07:51:34 +0000 Subject: [PATCH] vmem_destroy: don't forget to clean up qcache_t. --- sys/kern/subr_vmem.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/sys/kern/subr_vmem.c b/sys/kern/subr_vmem.c index 58fa6df470ea..81701b2b5372 100644 --- a/sys/kern/subr_vmem.c +++ b/sys/kern/subr_vmem.c @@ -1,4 +1,4 @@ -/* $NetBSD: subr_vmem.c,v 1.22 2006/11/18 07:51:06 yamt Exp $ */ +/* $NetBSD: subr_vmem.c,v 1.23 2006/11/18 07:51:34 yamt Exp $ */ /*- * Copyright (c)2006 YAMAMOTO Takashi, @@ -38,7 +38,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,v 1.22 2006/11/18 07:51:06 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,v 1.23 2006/11/18 07:51:34 yamt Exp $"); #define VMEM_DEBUG #if defined(_KERNEL) @@ -504,6 +504,27 @@ qc_init(vmem_t *vm, size_t qcache_max) } } +static void +qc_destroy(vmem_t *vm) +{ + const qcache_t *prevqc; + int i; + int qcache_idx_max; + + qcache_idx_max = vm->vm_qcache_max >> vm->vm_quantum_shift; + prevqc = NULL; + for (i = 1; i <= qcache_idx_max; i++) { + qcache_t *qc = vm->vm_qcache[i - 1]; + + if (prevqc == qc) { + continue; + } + pool_cache_destroy(&qc->qc_cache); + pool_destroy(&qc->qc_pool); + prevqc = qc; + } +} + static boolean_t qc_reap(vmem_t *vm) { @@ -768,6 +789,9 @@ vmem_destroy(vmem_t *vm) VMEM_ASSERT_UNLOCKED(vm); +#if defined(QCACHE) + qc_destroy(vm); +#endif /* defined(QCACHE) */ if (vm->vm_hashlist != NULL) { int i;