From 7556326e012c74a21c2459c19cdf8317b5156f2a Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Wed, 4 Aug 2010 09:04:34 -0400 Subject: [PATCH] discon remove dirty vcaches from queue when discarding the discardall loop was not dequeueing vcaches, meaning we would loop. caught by Simon Wilkinson Change-Id: I80256ef5f91d7030e0cb11e78a79f137a217a29a Reviewed-on: http://gerrit.openafs.org/2513 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_disconnected.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/afs/afs_disconnected.c b/src/afs/afs_disconnected.c index ff5e978aa9..2097761bbc 100644 --- a/src/afs/afs_disconnected.c +++ b/src/afs/afs_disconnected.c @@ -1338,14 +1338,15 @@ afs_DisconDiscardAll(afs_ucred_t *acred) ObtainWriteLock(&afs_disconDirtyLock, 717); while (!QEmpty(&afs_disconDirty)) { tvc = QEntry(QPrev(&afs_disconDirty), struct vcache, dirtyq); + QRemove(&tvc->dirtyq); ReleaseWriteLock(&afs_disconDirtyLock); ObtainWriteLock(&tvc->lock, 718); afs_ResetVCache(tvc, acred); tvc->f.truncPos = AFS_NOTRUNC; ReleaseWriteLock(&tvc->lock); - afs_PutVCache(tvc); ObtainWriteLock(&afs_disconDirtyLock, 719); + afs_PutVCache(tvc); } afs_DisconDiscardAllShadows(1, acred);