From: Simon Wilkinson Date: Mon, 19 Jan 2009 17:29:32 +0000 (+0000) Subject: DEVEL15-linux-disconnected-avoid-ls-hang-20090119 X-Git-Tag: openafs-devel-1_5_57~34 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=af919780f47de482136b3248c4ef7e79f0ecfcb1;p=packages%2Fo%2Fopenafs.git DEVEL15-linux-disconnected-avoid-ls-hang-20090119 LICENSE IPL10 FIXES 124152 avoid allowing a non-CStatd vcache to make its way into a readdir which causes a n infinite loop (cherry picked from commit 9fa51694c6a41323cfeb7b41bb4dff9e8dac77be) --- diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index 42efc2d17..68d9145de 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -2020,16 +2020,9 @@ afs_GetVCache(register struct VenusFid *afid, struct vrequest *areq, } else { if (AFS_IS_DISCONNECTED) { - if (AFS_IS_DISCON_RW) { - if (vType(tvc) == VDIR) - OutStatus.FileType = Directory; - - code = tvc?0:ENOENT; - } else { - /* Nothing to do otherwise...*/ - code = ENETDOWN; - printf("Network is down in afs_GetCache"); - } + /* Nothing to do otherwise...*/ + code = ENETDOWN; + printf("Network is down in afs_GetCache"); } else code = afs_FetchStatus(tvc, afid, areq, &OutStatus); @@ -3288,10 +3281,8 @@ void afs_DisconGiveUpCallbacks() { for (i = 0; i < VCSIZE; i++) { for (tvc = afs_vhashT[i]; tvc; tvc = tvc->hnext) { if ((tvc->states & CRO) == 0 && tvc->callback) { - /* XXX - should we check if the callback has expired here? */ afs_QueueVCB(tvc); tvc->callback = NULL; - tvc->states &- ~(CStatd | CUnique); nq++; } }