On Wed, Aug 28, 2013 at 10:45:58AM +0300, Andriy Gapon wrote: > on 28/08/2013 03:39 Xin LI said the following: > > @@ -6250,8 +6250,11 @@ zfs_freebsd_rename(ap) > > ASSERT(ap->a_fcnp->cn_flags & (SAVENAME|SAVESTART)); > > ASSERT(ap->a_tcnp->cn_flags & (SAVENAME|SAVESTART)); > > > > - error = zfs_rename(fdvp, ap->a_fcnp->cn_nameptr, tdvp, > > - ap->a_tcnp->cn_nameptr, ap->a_fcnp->cn_cred, NULL, 0); > > + if (fdvp->v_mount == tdvp->v_mount) > > + 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); > > So, I am still not sure if that is important or not, but this change still > misses > (tvp && (fvp->v_mount != tvp->v_mount)) > check as found in ufs_rename.
Yes, it is important. This is the case where 'fvp' represents a directory and 'tvp' also represents an existing directory. It is then possible that tdvp and tvp belong to different mount points. -- Pawel Jakub Dawidek http://www.wheelsystems.com FreeBSD committer http://www.FreeBSD.org Am I Evil? Yes, I Am! http://mobter.com
pgpQZAO6E97ZH.pgp
Description: PGP signature