Author: davide
Date: Fri Sep 20 23:22:00 2013
New Revision: 255748
URL: http://svnweb.freebsd.org/changeset/base/255748

Log:
  Fixup cross-device rename checks in ZFS. Add a check for the case
  where 'fdvp' is a directory, 'tvp' is an already existing directory
  and they have different mount points.
  
  Reported by:  avg, pjd
  Reviewed by:  pjd
  Approved by:  re (rodrigc)

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Fri Sep 
20 23:16:15 2013        (r255747)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Fri Sep 
20 23:22:00 2013        (r255748)
@@ -6250,12 +6250,15 @@ zfs_freebsd_rename(ap)
        ASSERT(ap->a_fcnp->cn_flags & (SAVENAME|SAVESTART));
        ASSERT(ap->a_tcnp->cn_flags & (SAVENAME|SAVESTART));
 
-       if (fdvp->v_mount == tdvp->v_mount)
+       /*
+        * Check for cross-device rename.
+        */
+       if ((fdvp->v_mount != tdvp->v_mount) ||
+           (tvp && (fdvp->v_mount != tvp->v_mount)))
+               error = EXDEV;
+       else
                error = zfs_rename(fdvp, ap->a_fcnp->cn_nameptr, tdvp,
                    ap->a_tcnp->cn_nameptr, ap->a_fcnp->cn_cred, NULL, 0);
-       else
-               error = EXDEV;
-
        if (tdvp == tvp)
                VN_RELE(tdvp);
        else
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to