dcache-dont-erroneously-fail-to-fill-in-tsmall-20011225
authorNickolai Zeldovich <kolya@mit.edu>
Tue, 25 Dec 2001 18:04:52 +0000 (18:04 +0000)
committerDerrick Brashear <shadow@dementia.org>
Tue, 25 Dec 2001 18:04:52 +0000 (18:04 +0000)
"The particular problem seems to be, when size
  is computed to be zero, tsmall is not filled in with valid data,
  and ProcessFS is called with a zeroed out OutStatus.  This causes
  the file to magically turn into a directory (VDIR), among other
  things"

"The second part of the patch doesn't fix any bug that I've ran into
  thus far, but seemed like a good idea while I was reading the code
  to find the former bug."

src/afs/afs_dcache.c

index 12ccd88..b6177af 100644 (file)
@@ -2141,7 +2141,7 @@ RetryLookup:
        /*
         * Not a dynamic vnode:  do the real fetch.
         */
-       if (size) do {
+       do {
            /*
             * Locks held:
             * avc->lock(R) if setLocks && !slowPass
@@ -2548,7 +2548,7 @@ done:
     /* Check if we need to perform any last-minute fixes with a write-lock */
     if (!setLocks || doVcacheUpdate) {
        if (setNewCallback) avc->callback = newCallback;
-       if (tsmall) afs_ProcessFS(avc, &tsmall->OutStatus, areq);
+       if (tsmall && setVcacheStatus) afs_ProcessFS(avc, &tsmall->OutStatus, areq);
        if (setLocks) ReleaseWriteLock(&avc->lock);
     }