From: Jeffrey Altman Date: Mon, 13 Aug 2012 02:51:54 +0000 (-0400) Subject: Windows: reset volume NOEXIST flag X-Git-Tag: upstream/1.8.0_pre1^2~2101 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=165c9e7465378f26db546c5f78fc4eeca0ba094a;p=packages%2Fo%2Fopenafs.git Windows: reset volume NOEXIST flag In response to fs checkvolumes the NOEXIST flag should be reset. It should also be reset if the volume location update fails because of a commumicaton (or other) error with the VLDB server. The volume's lastUpdateTime is refreshed on error. Change-Id: I0bb5e61b9eb8a9613d47a32acda35b79aa71c293 Reviewed-on: http://gerrit.openafs.org/7969 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsd/cm_volume.c b/src/WINNT/afsd/cm_volume.c index 66692a4f3..644d07a31 100644 --- a/src/WINNT/afsd/cm_volume.c +++ b/src/WINNT/afsd/cm_volume.c @@ -677,6 +677,12 @@ long cm_UpdateVolumeLocation(struct cm_cell *cellp, cm_user_t *userp, cm_req_t * _InterlockedOr(&volp->flags, CM_VOLUMEFLAG_NOEXIST); } else { rwNewstate = roNewstate = bkNewstate = vl_alldown; + + /* + * we are updating lastUpdateTime but didn't get an answer + * so clear the no exist flag. + */ + _InterlockedAnd(&volp->flags, ~CM_VOLUMEFLAG_NOEXIST); } if (volp->vol[RWVOL].state != rwNewstate) { @@ -1226,8 +1232,13 @@ void cm_RefreshVolumes(int lifetime) InterlockedIncrement(&volp->refCount); lock_ReleaseRead(&cm_volumeLock); - if (!(volp->flags & CM_VOLUMEFLAG_RESET)) { + if (!(volp->flags & CM_VOLUMEFLAG_RESET) || + (volp->flags & CM_VOLUMEFLAG_NOEXIST)) { lock_ObtainWrite(&volp->rw); + if (volp->flags & CM_VOLUMEFLAG_NOEXIST) { + _InterlockedAnd(&volp->flags, ~CM_VOLUMEFLAG_NOEXIST); + } + if (volp->flags & CM_VOLUMEFLAG_RO_MIXED) { if (volp->lastUpdateTime + 300 <= now) { _InterlockedOr(&volp->flags, CM_VOLUMEFLAG_RESET);