nfsd: don't support msnfs export option
We've long had these pointless #ifdef MSNFS's sprinkled throughout the code--pointless because MSNFS is always defined (and we give no config option to make that easy to change). So we could just remove the ifdef's and compile the resulting code unconditionally. But as long as we're there: why not just rip out this code entirely? The only purpose is to implement the "msnfs" export option which turns on Windows-like behavior in some cases, and: - the export option isn't documented anywhere; - the userland utilities (which would need to be able to parse "msnfs" in an export file) don't support it; - I don't know how to maintain this, as I don't know what the proper behavior is; and - google shows no evidence that anyone has ever used this. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
9ee1ba5402
commit
9ce137eee4
|
@ -1,4 +1,3 @@
|
||||||
#define MSNFS /* HACK HACK */
|
|
||||||
/*
|
/*
|
||||||
* NFS exporting and validation.
|
* NFS exporting and validation.
|
||||||
*
|
*
|
||||||
|
@ -1444,9 +1443,6 @@ static struct flags {
|
||||||
{ NFSEXP_NOSUBTREECHECK, {"no_subtree_check", ""}},
|
{ NFSEXP_NOSUBTREECHECK, {"no_subtree_check", ""}},
|
||||||
{ NFSEXP_NOAUTHNLM, {"insecure_locks", ""}},
|
{ NFSEXP_NOAUTHNLM, {"insecure_locks", ""}},
|
||||||
{ NFSEXP_V4ROOT, {"v4root", ""}},
|
{ NFSEXP_V4ROOT, {"v4root", ""}},
|
||||||
#ifdef MSNFS
|
|
||||||
{ NFSEXP_MSNFS, {"msnfs", ""}},
|
|
||||||
#endif
|
|
||||||
{ 0, {"", ""}}
|
{ 0, {"", ""}}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#define MSNFS /* HACK HACK */
|
|
||||||
/*
|
/*
|
||||||
* File operations used by nfsd. Some of these have been ripped from
|
* File operations used by nfsd. Some of these have been ripped from
|
||||||
* other parts of the kernel because they weren't exported, others
|
* other parts of the kernel because they weren't exported, others
|
||||||
|
@ -875,15 +874,6 @@ static int nfsd_direct_splice_actor(struct pipe_inode_info *pipe,
|
||||||
return __splice_from_pipe(pipe, sd, nfsd_splice_actor);
|
return __splice_from_pipe(pipe, sd, nfsd_splice_actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int svc_msnfs(struct svc_fh *ffhp)
|
|
||||||
{
|
|
||||||
#ifdef MSNFS
|
|
||||||
return (ffhp->fh_export->ex_flags & NFSEXP_MSNFS);
|
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static __be32
|
static __be32
|
||||||
nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
||||||
loff_t offset, struct kvec *vec, int vlen, unsigned long *count)
|
loff_t offset, struct kvec *vec, int vlen, unsigned long *count)
|
||||||
|
@ -896,9 +886,6 @@ nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
||||||
err = nfserr_perm;
|
err = nfserr_perm;
|
||||||
inode = file->f_path.dentry->d_inode;
|
inode = file->f_path.dentry->d_inode;
|
||||||
|
|
||||||
if (svc_msnfs(fhp) && !lock_may_read(inode, offset, *count))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (file->f_op->splice_read && rqstp->rq_splice_ok) {
|
if (file->f_op->splice_read && rqstp->rq_splice_ok) {
|
||||||
struct splice_desc sd = {
|
struct splice_desc sd = {
|
||||||
.len = 0,
|
.len = 0,
|
||||||
|
@ -923,7 +910,6 @@ nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
||||||
fsnotify_access(file);
|
fsnotify_access(file);
|
||||||
} else
|
} else
|
||||||
err = nfserrno(host_err);
|
err = nfserrno(host_err);
|
||||||
out:
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -988,14 +974,6 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
|
||||||
int stable = *stablep;
|
int stable = *stablep;
|
||||||
int use_wgather;
|
int use_wgather;
|
||||||
|
|
||||||
#ifdef MSNFS
|
|
||||||
err = nfserr_perm;
|
|
||||||
|
|
||||||
if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) &&
|
|
||||||
(!lock_may_write(file->f_path.dentry->d_inode, offset, *cnt)))
|
|
||||||
goto out;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
dentry = file->f_path.dentry;
|
dentry = file->f_path.dentry;
|
||||||
inode = dentry->d_inode;
|
inode = dentry->d_inode;
|
||||||
exp = fhp->fh_export;
|
exp = fhp->fh_export;
|
||||||
|
@ -1046,7 +1024,6 @@ out_nfserr:
|
||||||
err = 0;
|
err = 0;
|
||||||
else
|
else
|
||||||
err = nfserrno(host_err);
|
err = nfserrno(host_err);
|
||||||
out:
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1751,13 +1728,6 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen,
|
||||||
if (ndentry == trap)
|
if (ndentry == trap)
|
||||||
goto out_dput_new;
|
goto out_dput_new;
|
||||||
|
|
||||||
if (svc_msnfs(ffhp) &&
|
|
||||||
((atomic_read(&odentry->d_count) > 1)
|
|
||||||
|| (atomic_read(&ndentry->d_count) > 1))) {
|
|
||||||
host_err = -EPERM;
|
|
||||||
goto out_dput_new;
|
|
||||||
}
|
|
||||||
|
|
||||||
host_err = -EXDEV;
|
host_err = -EXDEV;
|
||||||
if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt)
|
if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt)
|
||||||
goto out_dput_new;
|
goto out_dput_new;
|
||||||
|
@ -1836,17 +1806,10 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
|
||||||
if (host_err)
|
if (host_err)
|
||||||
goto out_nfserr;
|
goto out_nfserr;
|
||||||
|
|
||||||
if (type != S_IFDIR) { /* It's UNLINK */
|
if (type != S_IFDIR)
|
||||||
#ifdef MSNFS
|
|
||||||
if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) &&
|
|
||||||
(atomic_read(&rdentry->d_count) > 1)) {
|
|
||||||
host_err = -EPERM;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
host_err = vfs_unlink(dirp, rdentry);
|
host_err = vfs_unlink(dirp, rdentry);
|
||||||
} else { /* It's RMDIR */
|
else
|
||||||
host_err = vfs_rmdir(dirp, rdentry);
|
host_err = vfs_rmdir(dirp, rdentry);
|
||||||
}
|
|
||||||
|
|
||||||
dput(rdentry);
|
dput(rdentry);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#define NFSEXP_NOHIDE 0x0200
|
#define NFSEXP_NOHIDE 0x0200
|
||||||
#define NFSEXP_NOSUBTREECHECK 0x0400
|
#define NFSEXP_NOSUBTREECHECK 0x0400
|
||||||
#define NFSEXP_NOAUTHNLM 0x0800 /* Don't authenticate NLM requests - just trust */
|
#define NFSEXP_NOAUTHNLM 0x0800 /* Don't authenticate NLM requests - just trust */
|
||||||
#define NFSEXP_MSNFS 0x1000 /* do silly things that MS clients expect */
|
#define NFSEXP_MSNFS 0x1000 /* do silly things that MS clients expect; no longer supported */
|
||||||
#define NFSEXP_FSID 0x2000
|
#define NFSEXP_FSID 0x2000
|
||||||
#define NFSEXP_CROSSMOUNT 0x4000
|
#define NFSEXP_CROSSMOUNT 0x4000
|
||||||
#define NFSEXP_NOACL 0x8000 /* reserved for possible ACL related use */
|
#define NFSEXP_NOACL 0x8000 /* reserved for possible ACL related use */
|
||||||
|
|
Loading…
Reference in a new issue