Module Name: src Committed By: dholland Date: Mon Jun 20 01:53:38 UTC 2016
Modified Files: src/sys/ufs/lfs: ulfs_dirhash.c Log Message: Merge -r1.37 of ufs_dirhash.c: clear i_dirhash sooner, but what lock protects it? To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/ufs/lfs/ulfs_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/lfs/ulfs_dirhash.c diff -u src/sys/ufs/lfs/ulfs_dirhash.c:1.16 src/sys/ufs/lfs/ulfs_dirhash.c:1.17 --- src/sys/ufs/lfs/ulfs_dirhash.c:1.16 Mon Jun 20 00:00:47 2016 +++ src/sys/ufs/lfs/ulfs_dirhash.c Mon Jun 20 01:53:38 2016 @@ -1,5 +1,5 @@ -/* $NetBSD: ulfs_dirhash.c,v 1.16 2016/06/20 00:00:47 dholland Exp $ */ -/* from NetBSD: ufs_dirhash.c,v 1.36 2014/02/25 18:30:13 pooka Exp */ +/* $NetBSD: ulfs_dirhash.c,v 1.17 2016/06/20 01:53:38 dholland Exp $ */ +/* from NetBSD: ufs_dirhash.c,v 1.37 2014/12/20 00:28:05 christos Exp */ /* * Copyright (c) 2001, 2002 Ian Dowse. All rights reserved. @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ulfs_dirhash.c,v 1.16 2016/06/20 00:00:47 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ulfs_dirhash.c,v 1.17 2016/06/20 01:53:38 dholland Exp $"); /* * This implements a hash-based lookup scheme for ULFS directories. @@ -258,6 +258,7 @@ ulfsdirhash_build(struct inode *ip) return (0); fail: + ip->i_dirhash = NULL; DIRHASH_UNLOCK(dh); if (dh->dh_hash != NULL) { for (i = 0; i < narrays; i++) @@ -269,7 +270,6 @@ fail: kmem_free(dh->dh_blkfree, dh->dh_blkfreesz); mutex_destroy(&dh->dh_lock); pool_cache_put(ulfsdirhash_cache, dh); - ip->i_dirhash = NULL; atomic_add_int(&ulfs_dirhashmem, -memreqd); return (-1); } @@ -286,6 +286,8 @@ ulfsdirhash_free(struct inode *ip) if ((dh = ip->i_dirhash) == NULL) return; + ip->i_dirhash = NULL; + if (dh->dh_onlist) { DIRHASHLIST_LOCK(); if (dh->dh_onlist) @@ -306,7 +308,6 @@ ulfsdirhash_free(struct inode *ip) } mutex_destroy(&dh->dh_lock); pool_cache_put(ulfsdirhash_cache, dh); - ip->i_dirhash = NULL; atomic_add_int(&ulfs_dirhashmem, -mem); }