]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE12-darwin-avoid-hang-on-rename-20040202
authorShantonu Sen <ssen@apple.com>
Mon, 18 Oct 2004 06:00:50 +0000 (06:00 +0000)
committerDerrick Brashear <shadow@dementia.org>
Mon, 18 Oct 2004 06:00:50 +0000 (06:00 +0000)
FIXES 2967

this version deals with afs being multiply mounted.
return EXDEV on cross device rename attempts as upper layer doesn't deal for us

(cherry picked from commit 43118d9396d26adf107530d49b60245b756d7455)

src/afs/DARWIN/osi_vnodeops.c

index c14fddfac3ddaee4d2180c1338c94915997c8685..8d23b7df51b7421f194b58647e4a43944c37412f 100644 (file)
@@ -887,6 +887,15 @@ afs_vop_rename(ap)
     register struct vnode *fdvp = ap->a_fdvp;
     struct proc *p=fcnp->cn_proc;
 
+    /* Check for cross-device rename.
+     * For AFS, this means anything not in AFS-space
+     */
+    if ((0 != strcmp(tdvp->v_mount->mnt_stat.f_fstypename, "afs")) ||
+       (tvp && (0 != strcmp(tvp->v_mount->mnt_stat.f_fstypename, "afs")))) {
+       error = EXDEV;
+       goto abortit;
+    }
     /*
      * if fvp == tvp, we're just removing one name of a pair of
      * directory entries for the same element.  convert call into rename.