diff options
-rw-r--r-- | fs/nfsd/export.c | 4 | ||||
-rw-r--r-- | fs/nfsd/vfs.c | 41 | ||||
-rw-r--r-- | include/linux/nfsd/export.h | 2 |
3 files changed, 3 insertions, 44 deletions
diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index c0fcb7ab7f6d..8b31e5f8795d 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c | |||
@@ -1,4 +1,3 @@ | |||
1 | #define MSNFS /* HACK HACK */ | ||
2 | /* | 1 | /* |
3 | * NFS exporting and validation. | 2 | * NFS exporting and validation. |
4 | * | 3 | * |
@@ -1444,9 +1443,6 @@ static struct flags { | |||
1444 | { NFSEXP_NOSUBTREECHECK, {"no_subtree_check", ""}}, | 1443 | { NFSEXP_NOSUBTREECHECK, {"no_subtree_check", ""}}, |
1445 | { NFSEXP_NOAUTHNLM, {"insecure_locks", ""}}, | 1444 | { NFSEXP_NOAUTHNLM, {"insecure_locks", ""}}, |
1446 | { NFSEXP_V4ROOT, {"v4root", ""}}, | 1445 | { NFSEXP_V4ROOT, {"v4root", ""}}, |
1447 | #ifdef MSNFS | ||
1448 | { NFSEXP_MSNFS, {"msnfs", ""}}, | ||
1449 | #endif | ||
1450 | { 0, {"", ""}} | 1446 | { 0, {"", ""}} |
1451 | }; | 1447 | }; |
1452 | 1448 | ||
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index b991125ce4a5..0a01e2fc5dda 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c | |||
@@ -1,4 +1,3 @@ | |||
1 | #define MSNFS /* HACK HACK */ | ||
2 | /* | 1 | /* |
3 | * File operations used by nfsd. Some of these have been ripped from | 2 | * File operations used by nfsd. Some of these have been ripped from |
4 | * other parts of the kernel because they weren't exported, others | 3 | * 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, | |||
875 | return __splice_from_pipe(pipe, sd, nfsd_splice_actor); | 874 | return __splice_from_pipe(pipe, sd, nfsd_splice_actor); |
876 | } | 875 | } |
877 | 876 | ||
878 | static inline int svc_msnfs(struct svc_fh *ffhp) | ||
879 | { | ||
880 | #ifdef MSNFS | ||
881 | return (ffhp->fh_export->ex_flags & NFSEXP_MSNFS); | ||
882 | #else | ||
883 | return 0; | ||
884 | #endif | ||
885 | } | ||
886 | |||
887 | static __be32 | 877 | static __be32 |
888 | nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | 878 | nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
889 | loff_t offset, struct kvec *vec, int vlen, unsigned long *count) | 879 | 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, | |||
896 | err = nfserr_perm; | 886 | err = nfserr_perm; |
897 | inode = file->f_path.dentry->d_inode; | 887 | inode = file->f_path.dentry->d_inode; |
898 | 888 | ||
899 | if (svc_msnfs(fhp) && !lock_may_read(inode, offset, *count)) | ||
900 | goto out; | ||
901 | |||
902 | if (file->f_op->splice_read && rqstp->rq_splice_ok) { | 889 | if (file->f_op->splice_read && rqstp->rq_splice_ok) { |
903 | struct splice_desc sd = { | 890 | struct splice_desc sd = { |
904 | .len = 0, | 891 | .len = 0, |
@@ -923,7 +910,6 @@ nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | |||
923 | fsnotify_access(file); | 910 | fsnotify_access(file); |
924 | } else | 911 | } else |
925 | err = nfserrno(host_err); | 912 | err = nfserrno(host_err); |
926 | out: | ||
927 | return err; | 913 | return err; |
928 | } | 914 | } |
929 | 915 | ||
@@ -988,14 +974,6 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | |||
988 | int stable = *stablep; | 974 | int stable = *stablep; |
989 | int use_wgather; | 975 | int use_wgather; |
990 | 976 | ||
991 | #ifdef MSNFS | ||
992 | err = nfserr_perm; | ||
993 | |||
994 | if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) && | ||
995 | (!lock_may_write(file->f_path.dentry->d_inode, offset, *cnt))) | ||
996 | goto out; | ||
997 | #endif | ||
998 | |||
999 | dentry = file->f_path.dentry; | 977 | dentry = file->f_path.dentry; |
1000 | inode = dentry->d_inode; | 978 | inode = dentry->d_inode; |
1001 | exp = fhp->fh_export; | 979 | exp = fhp->fh_export; |
@@ -1046,7 +1024,6 @@ out_nfserr: | |||
1046 | err = 0; | 1024 | err = 0; |
1047 | else | 1025 | else |
1048 | err = nfserrno(host_err); | 1026 | err = nfserrno(host_err); |
1049 | out: | ||
1050 | return err; | 1027 | return err; |
1051 | } | 1028 | } |
1052 | 1029 | ||
@@ -1751,13 +1728,6 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen, | |||
1751 | if (ndentry == trap) | 1728 | if (ndentry == trap) |
1752 | goto out_dput_new; | 1729 | goto out_dput_new; |
1753 | 1730 | ||
1754 | if (svc_msnfs(ffhp) && | ||
1755 | ((atomic_read(&odentry->d_count) > 1) | ||
1756 | || (atomic_read(&ndentry->d_count) > 1))) { | ||
1757 | host_err = -EPERM; | ||
1758 | goto out_dput_new; | ||
1759 | } | ||
1760 | |||
1761 | host_err = -EXDEV; | 1731 | host_err = -EXDEV; |
1762 | if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt) | 1732 | if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt) |
1763 | goto out_dput_new; | 1733 | goto out_dput_new; |
@@ -1836,17 +1806,10 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, | |||
1836 | if (host_err) | 1806 | if (host_err) |
1837 | goto out_nfserr; | 1807 | goto out_nfserr; |
1838 | 1808 | ||
1839 | if (type != S_IFDIR) { /* It's UNLINK */ | 1809 | if (type != S_IFDIR) |
1840 | #ifdef MSNFS | ||
1841 | if ((fhp->fh_export->ex_flags & NFSEXP_MSNFS) && | ||
1842 | (atomic_read(&rdentry->d_count) > 1)) { | ||
1843 | host_err = -EPERM; | ||
1844 | } else | ||
1845 | #endif | ||
1846 | host_err = vfs_unlink(dirp, rdentry); | 1810 | host_err = vfs_unlink(dirp, rdentry); |
1847 | } else { /* It's RMDIR */ | 1811 | else |
1848 | host_err = vfs_rmdir(dirp, rdentry); | 1812 | host_err = vfs_rmdir(dirp, rdentry); |
1849 | } | ||
1850 | 1813 | ||
1851 | dput(rdentry); | 1814 | dput(rdentry); |
1852 | 1815 | ||
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h index 8ae78a61eea4..bd316159278c 100644 --- a/include/linux/nfsd/export.h +++ b/include/linux/nfsd/export.h | |||
@@ -35,7 +35,7 @@ | |||
35 | #define NFSEXP_NOHIDE 0x0200 | 35 | #define NFSEXP_NOHIDE 0x0200 |
36 | #define NFSEXP_NOSUBTREECHECK 0x0400 | 36 | #define NFSEXP_NOSUBTREECHECK 0x0400 |
37 | #define NFSEXP_NOAUTHNLM 0x0800 /* Don't authenticate NLM requests - just trust */ | 37 | #define NFSEXP_NOAUTHNLM 0x0800 /* Don't authenticate NLM requests - just trust */ |
38 | #define NFSEXP_MSNFS 0x1000 /* do silly things that MS clients expect */ | 38 | #define NFSEXP_MSNFS 0x1000 /* do silly things that MS clients expect; no longer supported */ |
39 | #define NFSEXP_FSID 0x2000 | 39 | #define NFSEXP_FSID 0x2000 |
40 | #define NFSEXP_CROSSMOUNT 0x4000 | 40 | #define NFSEXP_CROSSMOUNT 0x4000 |
41 | #define NFSEXP_NOACL 0x8000 /* reserved for possible ACL related use */ | 41 | #define NFSEXP_NOACL 0x8000 /* reserved for possible ACL related use */ |