* file. Leave the entry alone.
*/
if (!(tvcp->f.states & CBulkFetching) || (tvcp->f.m.Length != statSeqNo)) {
+#ifdef AFS_DARWIN80_ENV
+ int isdead = (tvcp->f.states & CDeadVnode);
+#endif
flagIndex++;
ReleaseWriteLock(&tvcp->lock);
+#ifdef AFS_DARWIN80_ENV
+ if (!isdead)
+ /* re-acquire the usecount that the other finalizevnode disposed of */
+ vnode_ref(AFSTOV(tvcp));
+#endif
afs_PutVCache(tvcp);
continue;
}
*/
if (!(tvcp->f.states & CBulkFetching) || (tvcp->f.m.Length != statSeqNo)) {
flagIndex++;
+#ifdef AFS_DARWIN80_ENV
+ if ((tvcp->f.states & CDeadVnode) == 0)
+ /* re-acquire the usecount that the other finalizevnode disposed of */
+ vnode_ref(AFSTOV(tvcp));
+#endif
ReleaseWriteLock(&tvcp->lock);
ReleaseWriteLock(&afs_xcbhash);
afs_PutVCache(tvcp);
tvcp->f.states &= ~CBulkFetching;
}
if (tvcp != NULL) {
+#ifdef AFS_DARWIN80_ENV
+ if ((tvcp->f.states & CDeadVnode) == 0)
+ /* re-acquire the usecount that the other finalizevnode disposed of */
+ vnode_ref(AFSTOV(tvcp));
+#endif
afs_PutVCache(tvcp);
}
}
/* if the vcache isn't usable, release it */
if (tvc && !(tvc->f.states & CStatd)) {
#ifndef AFS_FBSD80_ENV
- afs_PutVCache(tvc);
+ afs_PutVCache(tvc);
#endif
tvc = NULL;
}