From: Derrick Brashear Date: Tue, 19 Jul 2005 15:44:53 +0000 (+0000) Subject: vnrehash-avoid-cachecheck-change-20050618 X-Git-Tag: openafs-devel-1_5_0~434 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=ea20d8d6c244521bd72a42a4aef1f92bd03800e8;p=packages%2Fo%2Fopenafs.git vnrehash-avoid-cachecheck-change-20050618 unlocking and locking lets us race and makes cacheCheck potentially go bad --- diff --git a/src/vol/vnode.c b/src/vol/vnode.c index ac922b595..3e4b45df4 100644 --- a/src/vol/vnode.c +++ b/src/vol/vnode.c @@ -321,6 +321,7 @@ VAllocVnode_r(Error * ec, Volume * vp, VnodeType type) return NULL; vnodeNumber = bitNumberToVnodeNumber(bitNumber, class); + vnrehash: VNLog(2, 1, vnodeNumber); /* Prepare to move it to the new hash chain */ newHash = VNODE_HASH(vp, vnodeNumber); @@ -349,6 +350,10 @@ VAllocVnode_r(Error * ec, Volume * vp, VnodeType type) VOL_UNLOCK; ObtainWriteLock(&vnp->lock); VOL_LOCK; + if (vnp->volumePtr->cacheCheck != vnp->cacheCheck) { + ReleaseWriteLock(&vnp->lock); + goto vnrehash; + } } #ifdef AFS_PTHREAD_ENV vnp->writer = pthread_self();