]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-windows-dir-new-pages-20080911
authorAsanka Herath <asanka@secure-endpoints.com>
Fri, 12 Sep 2008 05:09:44 +0000 (05:09 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 12 Sep 2008 05:09:44 +0000 (05:09 +0000)
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

index 6a1db665bf6b1270571c9691fe04db1384bc4f13..d6f34395dc7999166fabc11845c40bf8f8508e8b 100644 (file)
@@ -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);