Hold a reference on a vcache while attempting to evict the inode from
the dcache. Since the afs_xvcache lock is dropped, it could be possible
for the vcache to be flushed during this time, making it unsafe to use
the vcache after the eviction attempt.
Reviewed-on: https://gerrit.openafs.org/12206
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@dson.org>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit
961875cbedc2c91cdba6dc34a43c6136ea9797fb)
Change-Id: I5beea5798f6cb10a00db90e1ba18dbc7ab1e43cb
Reviewed-on: https://gerrit.openafs.org/12256
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
/* First, see if we can evict the inode from the dcache */
if (defersleep && avc != afs_globalVp && VREFCOUNT(avc) > 1 && avc->opens == 0) {
*slept = 1;
+ AFS_FAST_HOLD(avc);
ReleaseWriteLock(&afs_xvcache);
AFS_GUNLOCK();
inuse:
AFS_GLOCK();
ObtainWriteLock(&afs_xvcache, 733);
+ AFS_FAST_RELE(avc);
}
/* See if we can evict it from the VLRUQ */