aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfsd/auth.c3
-rw-r--r--fs/nfsd/vfs.c13
-rw-r--r--include/linux/nfsd/export.h1
3 files changed, 6 insertions, 11 deletions
diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c
index cf61dc8ae942..21928056e35e 100644
--- a/fs/nfsd/auth.c
+++ b/fs/nfsd/auth.c
@@ -9,10 +9,11 @@
9#include <linux/sunrpc/svc.h> 9#include <linux/sunrpc/svc.h>
10#include <linux/sunrpc/svcauth.h> 10#include <linux/sunrpc/svcauth.h>
11#include <linux/nfsd/nfsd.h> 11#include <linux/nfsd/nfsd.h>
12#include <linux/nfsd/export.h>
12 13
13#define CAP_NFSD_MASK (CAP_FS_MASK|CAP_TO_MASK(CAP_SYS_RESOURCE)) 14#define CAP_NFSD_MASK (CAP_FS_MASK|CAP_TO_MASK(CAP_SYS_RESOURCE))
14 15
15static int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp) 16int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp)
16{ 17{
17 struct exp_flavor_info *f; 18 struct exp_flavor_info *f;
18 struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors; 19 struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors;
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index f2684e57cf22..ee96a897a29e 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -1797,16 +1797,9 @@ nfsd_statfs(struct svc_rqst *rqstp, struct svc_fh *fhp, struct kstatfs *stat)
1797 return err; 1797 return err;
1798} 1798}
1799 1799
1800static inline int EX_RDONLY(struct svc_export *exp, struct svc_rqst *rqstp) 1800static int exp_rdonly(struct svc_rqst *rqstp, struct svc_export *exp)
1801{ 1801{
1802 struct exp_flavor_info *f; 1802 return nfsexp_flags(rqstp, exp) & NFSEXP_READONLY;
1803 struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors;
1804
1805 for (f = exp->ex_flavors; f < end; f++) {
1806 if (f->pseudoflavor == rqstp->rq_flavor)
1807 return f->flags & NFSEXP_READONLY;
1808 }
1809 return exp->ex_flags & NFSEXP_READONLY;
1810} 1803}
1811 1804
1812/* 1805/*
@@ -1845,7 +1838,7 @@ nfsd_permission(struct svc_rqst *rqstp, struct svc_export *exp,
1845 */ 1838 */
1846 if (!(acc & MAY_LOCAL_ACCESS)) 1839 if (!(acc & MAY_LOCAL_ACCESS))
1847 if (acc & (MAY_WRITE | MAY_SATTR | MAY_TRUNC)) { 1840 if (acc & (MAY_WRITE | MAY_SATTR | MAY_TRUNC)) {
1848 if (EX_RDONLY(exp, rqstp) || IS_RDONLY(inode)) 1841 if (exp_rdonly(rqstp, exp) || IS_RDONLY(inode))
1849 return nfserr_rofs; 1842 return nfserr_rofs;
1850 if (/* (acc & MAY_WRITE) && */ IS_IMMUTABLE(inode)) 1843 if (/* (acc & MAY_WRITE) && */ IS_IMMUTABLE(inode))
1851 return nfserr_perm; 1844 return nfserr_perm;
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h
index fb4e93016666..5cd192469096 100644
--- a/include/linux/nfsd/export.h
+++ b/include/linux/nfsd/export.h
@@ -116,6 +116,7 @@ struct svc_expkey {
116#define EX_NOHIDE(exp) ((exp)->ex_flags & NFSEXP_NOHIDE) 116#define EX_NOHIDE(exp) ((exp)->ex_flags & NFSEXP_NOHIDE)
117#define EX_WGATHER(exp) ((exp)->ex_flags & NFSEXP_GATHERED_WRITES) 117#define EX_WGATHER(exp) ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
118 118
119int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp);
119__be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp); 120__be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp);
120 121
121/* 122/*