For FreeBSD, osi_TryEvictVCache was calling vgone() without dropping
afs_xvcache. Prior to
aad83a30a82407bfa6ac15b49fd31d69b563e898, this
is what osi_TryEvictVCache did, and since the 'slept' pointer
represents whether we dropped xvcache (not whether we dropped glock),
it seems like this is the intention of the code.
Change-Id: Icb8cc86d972d7ca717bd91e250771d90931e1ba7
Reviewed-on: http://gerrit.openafs.org/7434
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
/* must hold the vnode before calling vgone()
* This code largely copied from vfs_subr.c:vlrureclaim() */
vholdl(vp);
+
+ ReleaseWriteLock(&afs_xvcache);
AFS_GUNLOCK();
+
*slept = 1;
/* use the interlock while locking, so no one else can DOOM this */
vn_lock(vp, LK_INTERLOCK|LK_EXCLUSIVE|LK_RETRY);
vdrop(vp);
AFS_GLOCK();
+ ObtainWriteLock(&afs_xvcache, 340);
return 1;
}