mirror of
https://git.openafs.org/openafs.git
synced 2025-01-31 05:27:44 +00:00
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 an infinite loop
This commit is contained in:
parent
df71f42b63
commit
9fa51694c6
@ -2020,16 +2020,9 @@ afs_GetVCache(register struct VenusFid *afid, struct vrequest *areq,
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (AFS_IS_DISCONNECTED) {
|
if (AFS_IS_DISCONNECTED) {
|
||||||
if (AFS_IS_DISCON_RW) {
|
/* Nothing to do otherwise...*/
|
||||||
if (vType(tvc) == VDIR)
|
code = ENETDOWN;
|
||||||
OutStatus.FileType = Directory;
|
printf("Network is down in afs_GetCache");
|
||||||
|
|
||||||
code = tvc?0:ENOENT;
|
|
||||||
} else {
|
|
||||||
/* Nothing to do otherwise...*/
|
|
||||||
code = ENETDOWN;
|
|
||||||
printf("Network is down in afs_GetCache");
|
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
code = afs_FetchStatus(tvc, afid, areq, &OutStatus);
|
code = afs_FetchStatus(tvc, afid, areq, &OutStatus);
|
||||||
|
|
||||||
@ -3288,10 +3281,8 @@ void afs_DisconGiveUpCallbacks() {
|
|||||||
for (i = 0; i < VCSIZE; i++) {
|
for (i = 0; i < VCSIZE; i++) {
|
||||||
for (tvc = afs_vhashT[i]; tvc; tvc = tvc->hnext) {
|
for (tvc = afs_vhashT[i]; tvc; tvc = tvc->hnext) {
|
||||||
if ((tvc->states & CRO) == 0 && tvc->callback) {
|
if ((tvc->states & CRO) == 0 && tvc->callback) {
|
||||||
/* XXX - should we check if the callback has expired here? */
|
|
||||||
afs_QueueVCB(tvc);
|
afs_QueueVCB(tvc);
|
||||||
tvc->callback = NULL;
|
tvc->callback = NULL;
|
||||||
tvc->states &- ~(CStatd | CUnique);
|
|
||||||
nq++;
|
nq++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user