From 7ae4174d95a9d90e16f0ddc66648741a119339d2 Mon Sep 17 00:00:00 2001 From: Asanka Herath Date: Fri, 12 Sep 2008 05:08:00 +0000 Subject: [PATCH] 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. --- 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