|
@@ -1758,10 +1758,6 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen,
|
|
|
tdentry = tfhp->fh_dentry;
|
|
|
tdir = tdentry->d_inode;
|
|
|
|
|
|
- err = (rqstp->rq_vers == 2) ? nfserr_acces : nfserr_xdev;
|
|
|
- if (ffhp->fh_export != tfhp->fh_export)
|
|
|
- goto out;
|
|
|
-
|
|
|
err = nfserr_perm;
|
|
|
if (!flen || isdotent(fname, flen) || !tlen || isdotent(tname, tlen))
|
|
|
goto out;
|
|
@@ -1802,6 +1798,8 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen,
|
|
|
host_err = -EXDEV;
|
|
|
if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt)
|
|
|
goto out_dput_new;
|
|
|
+ if (ffhp->fh_export->ex_path.dentry != tfhp->fh_export->ex_path.dentry)
|
|
|
+ goto out_dput_new;
|
|
|
|
|
|
host_err = nfsd_break_lease(odentry->d_inode);
|
|
|
if (host_err)
|