|
@@ -1797,16 +1797,9 @@ nfsd_statfs(struct svc_rqst *rqstp, struct svc_fh *fhp, struct kstatfs *stat)
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
-static inline int EX_RDONLY(struct svc_export *exp, struct svc_rqst *rqstp)
|
|
|
|
|
|
+static int exp_rdonly(struct svc_rqst *rqstp, struct svc_export *exp)
|
|
{
|
|
{
|
|
- struct exp_flavor_info *f;
|
|
|
|
- struct exp_flavor_info *end = exp->ex_flavors + exp->ex_nflavors;
|
|
|
|
-
|
|
|
|
- for (f = exp->ex_flavors; f < end; f++) {
|
|
|
|
- if (f->pseudoflavor == rqstp->rq_flavor)
|
|
|
|
- return f->flags & NFSEXP_READONLY;
|
|
|
|
- }
|
|
|
|
- return exp->ex_flags & NFSEXP_READONLY;
|
|
|
|
|
|
+ return nfsexp_flags(rqstp, exp) & NFSEXP_READONLY;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -1845,7 +1838,7 @@ nfsd_permission(struct svc_rqst *rqstp, struct svc_export *exp,
|
|
*/
|
|
*/
|
|
if (!(acc & MAY_LOCAL_ACCESS))
|
|
if (!(acc & MAY_LOCAL_ACCESS))
|
|
if (acc & (MAY_WRITE | MAY_SATTR | MAY_TRUNC)) {
|
|
if (acc & (MAY_WRITE | MAY_SATTR | MAY_TRUNC)) {
|
|
- if (EX_RDONLY(exp, rqstp) || IS_RDONLY(inode))
|
|
|
|
|
|
+ if (exp_rdonly(rqstp, exp) || IS_RDONLY(inode))
|
|
return nfserr_rofs;
|
|
return nfserr_rofs;
|
|
if (/* (acc & MAY_WRITE) && */ IS_IMMUTABLE(inode))
|
|
if (/* (acc & MAY_WRITE) && */ IS_IMMUTABLE(inode))
|
|
return nfserr_perm;
|
|
return nfserr_perm;
|