Module Name: src Committed By: rmind Date: Mon May 4 20:54:25 UTC 2009
Modified Files: src/sys/ufs/ufs: ufs_dirhash.c Log Message: ufsdirhash_recycle(): - Fix ufs_dirhashmem modification (do it atomically). - Fix a memory leak. OK by <ad>. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/ufs/ufs/ufs_dirhash.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/ufs/ufs/ufs_dirhash.c diff -u src/sys/ufs/ufs/ufs_dirhash.c:1.30 src/sys/ufs/ufs/ufs_dirhash.c:1.31 --- src/sys/ufs/ufs/ufs_dirhash.c:1.30 Wed Mar 18 15:14:32 2009 +++ src/sys/ufs/ufs/ufs_dirhash.c Mon May 4 20:54:25 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_dirhash.c,v 1.30 2009/03/18 15:14:32 cegger Exp $ */ +/* $NetBSD: ufs_dirhash.c,v 1.31 2009/05/04 20:54:25 rmind Exp $ */ /* * Copyright (c) 2001, 2002 Ian Dowse. All rights reserved. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_dirhash.c,v 1.30 2009/03/18 15:14:32 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_dirhash.c,v 1.31 2009/05/04 20:54:25 rmind Exp $"); /* * This implements a hash-based lookup scheme for UFS directories. @@ -1083,10 +1083,11 @@ DIRHASH_BLKFREE(hash[i]); kmem_free(hash, hashsz); kmem_free(blkfree, blkfreesz); + pool_cache_put(ufsdirhash_cache, dh); /* Account for the returned memory, and repeat if necessary. */ DIRHASHLIST_LOCK(); - ufs_dirhashmem -= mem; + atomic_add_int(&ufs_dirhashmem, -mem); } /* Success. */ return (0);