viced: avoid bogus handle in rename
[openafs.git] / src / viced / afsfileprocs.c
index 7e422c0..5848f89 100644 (file)
@@ -69,7 +69,6 @@
 
 #include <rx/xdr.h>
 #include <afs/nfs.h>
-#include <afs/afs_assert.h>
 #include <lwp.h>
 #include <lock.h>
 #include <afs/afsint.h>
@@ -2288,7 +2287,7 @@ common_FetchData64(struct rx_call *acall, struct AFSFid *Fid,
        parentwhentargetnotdir = NULL;
     }
 
-    fsstats_StartXfer(&fsstats);
+    fsstats_StartXfer(&fsstats, FS_STATS_XFERIDX_FETCHDATA);
 
     /* actually do the data transfer */
     errorCode =
@@ -2901,7 +2900,7 @@ common_StoreData64(struct rx_call *acall, struct AFSFid *Fid,
        parentwhentargetnotdir = NULL;
     }
 
-    fsstats_StartXfer(&fsstats);
+    fsstats_StartXfer(&fsstats, FS_STATS_XFERIDX_STOREDATA);
 
     errorCode =
        StoreData_RXStyle(volptr, targetptr, Fid, client, acall, Pos, Length,
@@ -3768,6 +3767,9 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
        ViceLog(25, ("Rename : calling CopyOnWrite on  target dir\n"));
        if ((errorCode = CopyOnWrite(fileptr, volptr, 0, MAXFSIZE)))
            goto Bad_Rename;
+       /* since copyonwrite would mean fileptr has a new handle, do it here */
+       FidZap(&filedir);
+       SetDirHandle(&filedir, fileptr);
     }
 
     /* If the new name exists already, delete it and the file it points to */
@@ -6587,6 +6589,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 */
@@ -6600,9 +6603,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 */