From 91eeff62e75327d5e2f12c152d1455581a61d778 Mon Sep 17 00:00:00 2001 From: Asanka Herath Date: Fri, 12 Sep 2008 05:09:44 +0000 Subject: [PATCH] DEVEL15-windows-dir-new-pages-20080911 LICENSE MIT A small patch to permit the directory package to allocate additional directory pages when adding new entries that do not fit in the pages that were obtained from the file server. (cherry picked from commit 7ae4174d95a9d90e16f0ddc66648741a119339d2) --- src/WINNT/afsd/cm_dir.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/WINNT/afsd/cm_dir.c b/src/WINNT/afsd/cm_dir.c index 6a1db665b..d6f34395d 100644 --- a/src/WINNT/afsd/cm_dir.c +++ b/src/WINNT/afsd/cm_dir.c @@ -1270,16 +1270,22 @@ cm_DirOpAddBuffer(cm_dirOp_t * op, cm_buf_t * bufferp) (op->lockType == CM_DIRLOCK_WRITE ? CM_SCACHESYNC_WRITE : CM_SCACHESYNC_READ) | CM_SCACHESYNC_BUFLOCKED); - if (code == 0 && bufferp->dataVersion != op->dataVersion) { - osi_Log2(afsd_logp, "cm_DirOpAddBuffer: buffer data version mismatch. buf dv = %d. needs %d", - bufferp->dataVersion, op->dataVersion); - - cm_SyncOpDone(op->scp, bufferp, - CM_SCACHESYNC_NEEDCALLBACK | - (op->lockType == CM_DIRLOCK_WRITE ? CM_SCACHESYNC_WRITE : CM_SCACHESYNC_READ) | - CM_SCACHESYNC_BUFLOCKED); - - code = CM_ERROR_INVAL; + if (code == 0) { + if (bufferp->dataVersion == CM_BUF_VERSION_BAD) { + /* This is a new buffer */ + bufferp->dataVersion = op->dataVersion; + } else if (bufferp->dataVersion != op->dataVersion) { + osi_Log2(afsd_logp, + "cm_DirOpAddBuffer: buffer data version mismatch. buf dv = %d. needs %d", + bufferp->dataVersion, op->dataVersion); + + cm_SyncOpDone(op->scp, bufferp, + CM_SCACHESYNC_NEEDCALLBACK | + (op->lockType == CM_DIRLOCK_WRITE ? CM_SCACHESYNC_WRITE : CM_SCACHESYNC_READ) | + CM_SCACHESYNC_BUFLOCKED); + + code = CM_ERROR_INVAL; + } } lock_ReleaseWrite(&op->scp->rw); -- 2.39.5