aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/nfsd
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@citi.umich.edu>2007-07-17 07:04:48 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-17 13:23:08 -0400
commit0ec757df9743025f14190d6034d8bd2bf37c2dd1 (patch)
tree77436cbdc8c241aceab2daed243606e17e126771 /include/linux/nfsd
parent32c1eb0cd7ee00b5eb7b6f7059c635fbc1052966 (diff)
knfsd: nfsd4: make readonly access depend on pseudoflavor
Allow readonly access to vary depending on the pseudoflavor, using the flag passed with each pseudoflavor in the export downcall. The rest of the flags are ignored for now, though some day we might also allow id squashing to vary based on the flavor. Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu> Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/nfsd')
-rw-r--r--include/linux/nfsd/export.h13
-rw-r--r--include/linux/nfsd/nfsd.h3
2 files changed, 14 insertions, 2 deletions
diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h
index 424be41130ba..a01f775cb944 100644
--- a/include/linux/nfsd/export.h
+++ b/include/linux/nfsd/export.h
@@ -112,10 +112,21 @@ struct svc_expkey {
112 112
113#define EX_SECURE(exp) (!((exp)->ex_flags & NFSEXP_INSECURE_PORT)) 113#define EX_SECURE(exp) (!((exp)->ex_flags & NFSEXP_INSECURE_PORT))
114#define EX_ISSYNC(exp) (!((exp)->ex_flags & NFSEXP_ASYNC)) 114#define EX_ISSYNC(exp) (!((exp)->ex_flags & NFSEXP_ASYNC))
115#define EX_RDONLY(exp) ((exp)->ex_flags & NFSEXP_READONLY)
116#define EX_NOHIDE(exp) ((exp)->ex_flags & NFSEXP_NOHIDE) 115#define EX_NOHIDE(exp) ((exp)->ex_flags & NFSEXP_NOHIDE)
117#define EX_WGATHER(exp) ((exp)->ex_flags & NFSEXP_GATHERED_WRITES) 116#define EX_WGATHER(exp) ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
118 117
118static inline int EX_RDONLY(struct svc_export *exp, struct svc_rqst *rqstp)
119{
120 struct exp_flavor_info *f;
121 struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors;
122
123 for (f = exp->ex_flavors; f < end; f++) {
124 if (f->pseudoflavor == rqstp->rq_flavor)
125 return f->flags & NFSEXP_READONLY;
126 }
127 return exp->ex_flags & NFSEXP_READONLY;
128}
129
119__be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp); 130__be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp);
120 131
121/* 132/*
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h
index 62499c2f0918..54ef1a18a56c 100644
--- a/include/linux/nfsd/nfsd.h
+++ b/include/linux/nfsd/nfsd.h
@@ -119,7 +119,8 @@ __be32 nfsd_statfs(struct svc_rqst *, struct svc_fh *,
119 struct kstatfs *); 119 struct kstatfs *);
120 120
121int nfsd_notify_change(struct inode *, struct iattr *); 121int nfsd_notify_change(struct inode *, struct iattr *);
122__be32 nfsd_permission(struct svc_export *, struct dentry *, int); 122__be32 nfsd_permission(struct svc_rqst *, struct svc_export *,
123 struct dentry *, int);
123int nfsd_sync_dir(struct dentry *dp); 124int nfsd_sync_dir(struct dentry *dp);
124 125
125#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) 126#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)