From e42e0912d774cbfc309250052631c6e60c83164d Mon Sep 17 00:00:00 2001 From: Ben Kaduk Date: Tue, 16 Mar 2010 17:07:04 -0400 Subject: [PATCH] Avoid panic on shutdown with memcache and INVARIANTS When running with memcache, the filesystem cache is not initialized, so the file-local struct vnode *volumeVnode is never set to non-NULL. However, shutdown_cache() unconditionally calls vrele(volumeVnode), which triggers a KASSERT that the argument to vrele() is non-NULL. For certain kernel configurations, this results in a panic. Change this so that vrele() is only conditionally called if the volumeVnode is non-NULL. Change-Id: I80235f0d45ae11f26e9a09854bb34439f89bbb40 Reviewed-on: http://gerrit.openafs.org/1576 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_init.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/afs/afs_init.c b/src/afs/afs_init.c index 374be7c..76d294d 100644 --- a/src/afs/afs_init.c +++ b/src/afs/afs_init.c @@ -694,8 +694,11 @@ shutdown_cache(void) pag_epoch = 0; pagCounter = 0; #if defined(AFS_XBSD_ENV) - vrele(volumeVnode); /* let it go, finally. */ - volumeVnode = NULL; + /* memcache never sets this, so don't panic on shutdown */ + if (volumeVnode != NULL) { + vrele(volumeVnode); /* let it go, finally. */ + volumeVnode = NULL; + } if (cacheDev.held_vnode) { vrele(cacheDev.held_vnode); cacheDev.held_vnode = NULL; -- 1.9.4