REPOST patch 32/38: SERVER: new argument to nfsd_access()

From: Kendrick M. Smith (kmsmith@umich.edu)
Date: Wed Aug 14 2002 - 15:52:05 EST


NFSv4 defines a new field in the ACCESS response: a bitmap to indicate
which access bits requested by the client are "supported", i.e. meaningful
for the object in question.

This patch adds a new parameter @supported to nfsd_access(), so that
nfsd_access() can set the value of this bitmap.

--- old/fs/nfsd/nfs3proc.c Sun Aug 11 23:08:56 2002
+++ new/fs/nfsd/nfs3proc.c Sun Aug 11 23:09:44 2002
@@ -134,7 +134,7 @@ nfsd3_proc_access(struct svc_rqst *rqstp

         fh_copy(&resp->fh, &argp->fh);
         resp->access = argp->access;
- nfserr = nfsd_access(rqstp, &resp->fh, &resp->access);
+ nfserr = nfsd_access(rqstp, &resp->fh, &resp->access, NULL);
         RETURN_STATUS(nfserr);
 }

--- old/fs/nfsd/vfs.c Sun Aug 11 23:08:56 2002
+++ new/fs/nfsd/vfs.c Sun Aug 11 23:09:44 2002
@@ -348,12 +348,12 @@ static struct accessmap nfs3_anyaccess[]
 };

 int
-nfsd_access(struct svc_rqst *rqstp, struct svc_fh *fhp, u32 *access)
+nfsd_access(struct svc_rqst *rqstp, struct svc_fh *fhp, u32 *access, u32 *supported)
 {
         struct accessmap *map;
         struct svc_export *export;
         struct dentry *dentry;
- u32 query, result = 0;
+ u32 query, result = 0, sresult = 0;
         unsigned int error;

         error = fh_verify(rqstp, fhp, 0, MAY_NOP);
@@ -375,6 +375,9 @@ nfsd_access(struct svc_rqst *rqstp, stru
         for (; map->access; map++) {
                 if (map->access & query) {
                         unsigned int err2;
+
+ sresult |= map->access;
+
                         err2 = nfsd_permission(export, dentry, map->how);
                         switch (err2) {
                         case nfs_ok:
@@ -395,6 +398,8 @@ nfsd_access(struct svc_rqst *rqstp, stru
                 }
         }
         *access = result;
+ if (supported)
+ *supported = sresult;

  out:
         return error;
--- old/include/linux/nfsd/nfsd.h Sun Aug 11 23:08:56 2002
+++ new/include/linux/nfsd/nfsd.h Sun Aug 11 23:09:44 2002
@@ -86,7 +86,7 @@ int nfsd_create(struct svc_rqst *, stru
                                 char *name, int len, struct iattr *attrs,
                                 int type, dev_t rdev, struct svc_fh *res);
 #ifdef CONFIG_NFSD_V3
-int nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *);
+int nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *, u32 *);
 int nfsd_create_v3(struct svc_rqst *, struct svc_fh *,
                                 char *name, int len, struct iattr *attrs,
                                 struct svc_fh *res, int createmode,

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Aug 15 2002 - 22:00:37 EST