]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
viced: Do not swallow errors on StoreData recovery
authorAndrew Deason <adeason@sinenomine.net>
Thu, 20 Oct 2011 21:57:14 +0000 (16:57 -0500)
committerDerrick Brashear <shadow@dementix.org>
Sun, 23 Oct 2011 23:19:02 +0000 (16:19 -0700)
When we encounter any error in the StoreData fetch/store loop, we
reset the disk usage to ensure it remains correct, even in the face of
unexpected errors. However, when we do so, we use the errorCode from
VAdjustDiskUsage as our return value; if it is 0, we return success,
ignoring the error that got us in this code path in the first place.

Instead, keep track of a temporary errorCode for the disk usage
adjustment, and do not override our return value if there was no error
in the disk usage numbers.

Change-Id: Ifbe2377f2750b508d48e535215be3583d1d78e65
Reviewed-on: http://gerrit.openafs.org/5645
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>
src/viced/afsfileprocs.c

index 00ec9c3d56b9a85a1c5235ab20346aac5b15f239..8bfb4c6b5e782dc44b194b9fc2c0cd68ac13436a 100644 (file)
@@ -6586,6 +6586,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
        FDH_SYNC(fdP);
     }
     if (errorCode) {
+       Error tmp_errorCode = 0;
        afs_sfsize_t nfSize = FDH_SIZE(fdP);
        osi_Assert(nfSize >= 0);
        /* something went wrong: adjust size and return */
@@ -6599,9 +6600,12 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
        if (origfdP) FDH_REALLYCLOSE(origfdP);
        FDH_CLOSE(fdP);
        /* set disk usage to be correct */
-       VAdjustDiskUsage(&errorCode, volptr,
+       VAdjustDiskUsage(&tmp_errorCode, volptr,
                         (afs_sfsize_t) (nBlocks(nfSize) -
                                         nBlocks(NewLength)), 0);
+       if (tmp_errorCode) {
+           errorCode = tmp_errorCode;
+       }
        return errorCode;
     }
     if (origfdP) {                                     /* finish CopyOnWrite */