From 339189c88ba9c6bc7e4ea6434acef0b96da24dae Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 3 Feb 2012 11:35:33 -0500 Subject: [PATCH] Windows: add buf_InvalidateBuffers Add a utility function that invalidates all buffers for a cm_scache_t object. Change-Id: Ib10139fb2aefa03d597d5afd494652fade40432e Reviewed-on: http://gerrit.openafs.org/6651 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsd/cm_buf.c | 27 +++++++++++++++++++++++++++ src/WINNT/afsd/cm_buf.h | 2 ++ 2 files changed, 29 insertions(+) diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index 4d8833e9f..e64b1f446 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -2130,6 +2130,33 @@ long buf_FlushCleanPages(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp) return code; } +/* Must be called with scp->rw held */ +long buf_InvalidateBuffers(cm_scache_t * scp) +{ + cm_buf_t * bp; + afs_uint32 i; + int found = 0; + + lock_AssertAny(&scp->rw); + + i = BUF_FILEHASH(&scp->fid); + + lock_ObtainRead(&buf_globalLock); + + for (bp = cm_data.buf_fileHashTablepp[i]; bp; bp = bp->fileHashp) { + if (cm_FidCmp(&bp->fid, &scp->fid) == 0) { + bp->dataVersion = CM_BUF_VERSION_BAD; + found = 1; + } + } + lock_ReleaseRead(&buf_globalLock); + + if (found) + return 0; + else + return ENOENT; +} + /* Must be called with scp->rw held */ long buf_ForceDataVersion(cm_scache_t * scp, afs_uint64 fromVersion, afs_uint64 toVersion) { diff --git a/src/WINNT/afsd/cm_buf.h b/src/WINNT/afsd/cm_buf.h index eaedf1250..0184d6efb 100644 --- a/src/WINNT/afsd/cm_buf.h +++ b/src/WINNT/afsd/cm_buf.h @@ -218,6 +218,8 @@ extern long buf_DirtyBuffersExist(cm_fid_t * fidp); extern long buf_CleanDirtyBuffers(cm_scache_t *scp); +extern long buf_InvalidateBuffers(cm_scache_t * scp); + extern long buf_RDRBuffersExist(cm_fid_t *fidp); extern long buf_ClearRDRFlag(cm_scache_t *scp, char * reason); -- 2.39.5