]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
tru64 needs vrele when an error happens, rather than just returning. make
authorMattias Amnefelt <mattiasa@e.kth.se>
Sun, 21 Apr 2002 21:45:56 +0000 (21:45 +0000)
committerGarry Zacheiss <zacheiss@mit.edu>
Sun, 21 Apr 2002 21:45:56 +0000 (21:45 +0000)
sure we do so

(cherry picked from commit 7ffbc40b212a38de92da562d285e715150e9d771)

src/afs/VNOPS/afs_vnop_create.c
src/afs/VNOPS/afs_vnop_dirops.c
src/afs/VNOPS/afs_vnop_link.c
src/afs/VNOPS/afs_vnop_remove.c
src/afs/VNOPS/afs_vnop_symlink.c

index 32135b7696ac51f9fe476e6463964a28d0259368..37ca0ff15398ec4988d6b38055923812ea0a766c 100644 (file)
@@ -77,7 +77,9 @@ afs_create(OSI_VC_ARG(adp), aname, attrs, aexcl, amode, avcp, acred)
 
 
     AFS_STATCNT(afs_create);
-    if (code = afs_InitReq(&treq, acred)) return code;
+    if (code = afs_InitReq(&treq, acred)) 
+       goto done2;
+
     afs_Trace3(afs_iclSetp, CM_TRACE_CREATE, ICL_TYPE_POINTER, adp,
               ICL_TYPE_STRING, aname, ICL_TYPE_INT32, amode);
 
@@ -445,10 +447,15 @@ done:
 #ifdef AFS_OSF_ENV
     if (!code && !strcmp(aname, "core"))
        tvc->states |= CCore1;
+#endif
+
+    code = afs_CheckCode(code, &treq, 20);
+
+done2:
+#ifdef AFS_OSF_ENV
     afs_PutVCache(adp, 0);
 #endif /* AFS_OSF_ENV */
 
-    code = afs_CheckCode(code, &treq, 20);
     return code;
 }
 
index 6512b599af81cc490901e79635a588eafe2abe10..10ebcfaca51f73e8fb82ad91d931d455221b0ce6 100644 (file)
@@ -69,7 +69,8 @@ afs_mkdir(OSI_VC_ARG(adp), aname, attrs, avcp, acred)
     afs_Trace2(afs_iclSetp, CM_TRACE_MKDIR, ICL_TYPE_POINTER, adp,
               ICL_TYPE_STRING, aname);
 
-    if (code = afs_InitReq(&treq, acred)) return code;
+    if (code = afs_InitReq(&treq, acred)) 
+       goto done2;
 
     if (!afs_ENameOK(aname)) {
        code = EINVAL;
@@ -151,10 +152,11 @@ afs_mkdir(OSI_VC_ARG(adp), aname, attrs, avcp, acred)
     }
     else code = ENOENT;
 done:
+    code = afs_CheckCode(code, &treq, 26);
+done2:
 #ifdef AFS_OSF_ENV
     AFS_RELE(ndp->ni_dvp);
 #endif /* AFS_OSF_ENV */
-    code = afs_CheckCode(code, &treq, 26);
     return code;
 }
 
@@ -193,7 +195,9 @@ afs_rmdir(adp, aname, acred)
     afs_Trace2(afs_iclSetp, CM_TRACE_RMDIR, ICL_TYPE_POINTER, adp, 
               ICL_TYPE_STRING, aname);
 
-    if (code = afs_InitReq(&treq, acred)) return code;
+    if (code = afs_InitReq(&treq, acred)) 
+       goto done2;
+
     code = afs_VerifyVCache(adp, &treq);
     if (code) goto done;
 
@@ -292,10 +296,11 @@ afs_rmdir(adp, aname, acred)
     code = 0;
 
 done:
+    code = afs_CheckCode(code, &treq, 27); 
+done2:
 #ifdef AFS_OSF_ENV
     afs_PutVCache(adp, 0);
     afs_PutVCache(ndp->ni_vp, 0);
 #endif /* AFS_OSF_ENV */
-    code = afs_CheckCode(code, &treq, 27); 
     return code;
 }
index 2c652227ea91943eb52b25167dd3f6a4c30612a1..5c9de0676151d25dd3d692dc618a24748267ab6f 100644 (file)
@@ -63,7 +63,9 @@ afs_link(avc, OSI_VC_ARG(adp), aname, acred)
     afs_Trace3(afs_iclSetp, CM_TRACE_LINK, ICL_TYPE_POINTER, adp,
               ICL_TYPE_POINTER, avc, ICL_TYPE_STRING, aname);
     /* create a hard link; new entry is aname in dir adp */
-    if (code = afs_InitReq(&treq, acred)) return code;
+    if (code = afs_InitReq(&treq, acred)) 
+       goto done2;
+
     if (avc->fid.Cell != adp->fid.Cell || avc->fid.Fid.Volume != adp->fid.Fid.Volume) {
        code = EXDEV;
        goto done;
@@ -144,9 +146,11 @@ afs_link(avc, OSI_VC_ARG(adp), aname, acred)
     ReleaseWriteLock(&avc->lock);
     code = 0;
 done:
+    code = afs_CheckCode(code, &treq, 24);
+done2:
 #ifdef AFS_OSF_ENV
     afs_PutVCache(adp, WRITE_LOCK);
 #endif /* AFS_OSF_ENV */
-    return afs_CheckCode(code, &treq);
+    return code;
 }
 
index d7aa1555219aeb36df625bbd13e9b14023dafcc0..93fd43c85c0cef3ff36ce2cfec345e76cf7fddd9 100644 (file)
@@ -234,11 +234,21 @@ afs_remove(OSI_VC_ARG(adp), aname, acred)
               ICL_TYPE_STRING, aname);
 
     /* Check if this is dynroot */
-    if (afs_IsDynroot(adp))
+    if (afs_IsDynroot(adp)) {
+#ifdef  AFS_OSF_ENV
+        afs_PutVCache(adp, 0);
+        afs_PutVCache(tvc, 0);
+#endif
        return afs_DynrootVOPRemove(adp, acred, aname);
+    }
 
-    if (code = afs_InitReq(&treq, acred))
+    if (code = afs_InitReq(&treq, acred)) {
+#ifdef  AFS_OSF_ENV
+        afs_PutVCache(adp, 0);
+        afs_PutVCache(tvc, 0);
+#endif
       return code;
+    }
 tagain:
     code = afs_VerifyVCache(adp, &treq);
 #ifdef AFS_OSF_ENV
@@ -260,6 +270,10 @@ tagain:
       * fileserver
       */
     if ( adp->states & CRO ) {
+#ifdef  AFS_OSF_ENV
+        afs_PutVCache(adp, 0);
+        afs_PutVCache(tvc, 0);
+#endif
         code = EROFS;
        return code;
     }
index 3fe6c993bdbdb8a25f992919d2c11a39c61d6fde..5a0cf7e383a9ecead2e60b8bddb7fc196ba5900f 100644 (file)
@@ -78,16 +78,18 @@ afs_symlink
     afs_Trace2(afs_iclSetp, CM_TRACE_SYMLINK, ICL_TYPE_POINTER, adp,
                 ICL_TYPE_STRING, aname);
 
-    if (afs_IsDynroot(adp))
-       return afs_DynrootVOPSymlink(adp, acred, aname, atargetName);
+    if (afs_IsDynroot(adp)) {
+       code = afs_DynrootVOPSymlink(adp, acred, aname, atargetName);
+       goto done2;
+    }
 
     if (code = afs_InitReq(&treq, acred))
-       return code;
+       goto done2;
 
     code = afs_VerifyVCache(adp, &treq);
     if (code) { 
       code = afs_CheckCode(code, &treq, 30);
-      return code;
+      goto done2;
     }
 
     /** If the volume is read-only, return error without making an RPC to the
@@ -95,7 +97,7 @@ afs_symlink
       */
     if ( adp->states & CRO ) {
         code = EROFS;
-       return code;
+       goto done2;
     }
 
     InStatus.Mask = AFS_SETMODTIME | AFS_SETMODE;
@@ -210,12 +212,13 @@ afs_symlink
     afs_PutVCache(tvc, WRITE_LOCK);
     code = 0;
 done:
-#ifdef  AFS_OSF_ENV
-    AFS_RELE(ndp->ni_dvp);
-#endif  /* AFS_OSF_ENV */
     if ( volp ) 
        afs_PutVolume(volp, READ_LOCK);
     code = afs_CheckCode(code, &treq, 31);
+done2:
+#ifdef  AFS_OSF_ENV
+    AFS_RELE(ndp->ni_dvp);
+#endif  /* AFS_OSF_ENV */
     return code;
 }