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

Attachment: pgpQZAO6E97ZH.pgp
Description: PGP signature

Reply via email to