solaris10-ugly-avoid-ENODEV-hack-20051011
authorChas Williams <chas@cmf.nrl.navy.mil>
Wed, 12 Oct 2005 07:09:35 +0000 (07:09 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 12 Oct 2005 07:09:35 +0000 (07:09 +0000)
fix this a better way,  rolling bsack earlier change

src/afs/SOLARIS/osi_vnodeops.c
src/afs/VNOPS/afs_vnop_lookup.c

index 08ee7af..9adff60 100644 (file)
@@ -1673,6 +1673,24 @@ gafs_rename(aodp, aname1, andp, aname2, acred)
 
     AFS_GLOCK();
     code = afs_rename(aodp, aname1, andp, aname2, acred);
+#ifdef AFS_SUN510_ENV
+    if (code == 0) {
+       struct vcache *avcp = NULL;
+       
+       (void) afs_lookup(andp, aname2, &avcp, NULL, 0, NULL, acred);
+       if (avcp) {
+           struct vnode *vp = AFSTOV(avcp), *pvp = AFSTOV(andp);
+           
+           mutex_enter(&vp->v_lock);
+           kmem_free(vp->v_path, strlen(vp->v_path) + 1);
+           vp->v_path = NULL;
+           mutex_exit(&vp->v_lock);
+           VN_SETPATH(afs_globalVp, pvp, vp, aname2, strlen(aname2));
+           
+           AFS_RELE(avcp);
+       }
+    }
+#endif
     AFS_GUNLOCK();
     return (code);
 }
index 07e6877..be887e7 100644 (file)
@@ -1434,14 +1434,6 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, struct AFS_UCRED
                ReleaseWriteLock(&tvc->lock);
 
                if (code) {
-#if defined(AFS_SUN510_ENV)
-                   /* reset code and volumeError so afs_CheckCode will not change to ENODEV */
-                   /* Solaris 10 dogetcwd chokes on ENODEV, but not ENOENT */
-                   if (code == ENODEV && treq.volumeError == VOLMISSING ) {
-                       treq.volumeError = 0;
-                       code = ENOENT;
-                   }
-#endif
                    afs_PutVCache(tvc);
                    if (tvolp)
                        afs_PutVolume(tvolp, WRITE_LOCK);