NFSD: Fix a bug in the NFSv4 'supported attrs' mandatory attribute
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 31 Aug 2009 19:16:11 +0000 (15:16 -0400)
committerJ. Bruce Fields <bfields@citi.umich.edu>
Wed, 2 Sep 2009 00:00:17 +0000 (20:00 -0400)
The fact that the filesystem doesn't currently list any alternate
locations does _not_ imply that the fs_locations attribute should be
marked as "unsupported".

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4xdr.c

index 6fde431..bebc0c2 100644 (file)
@@ -68,7 +68,6 @@ check_attr_support(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
                   u32 *bmval, u32 *writable)
 {
        struct dentry *dentry = cstate->current_fh.fh_dentry;
-       struct svc_export *exp = cstate->current_fh.fh_export;
 
        /*
         * Check about attributes are supported by the NFSv4 server or not.
@@ -80,17 +79,13 @@ check_attr_support(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
                return nfserr_attrnotsupp;
 
        /*
-        * Check FATTR4_WORD0_ACL & FATTR4_WORD0_FS_LOCATIONS can be supported
+        * Check FATTR4_WORD0_ACL can be supported
         * in current environment or not.
         */
        if (bmval[0] & FATTR4_WORD0_ACL) {
                if (!IS_POSIXACL(dentry->d_inode))
                        return nfserr_attrnotsupp;
        }
-       if (bmval[0] & FATTR4_WORD0_FS_LOCATIONS) {
-               if (exp->ex_fslocs.locations == NULL)
-                       return nfserr_attrnotsupp;
-       }
 
        /*
         * According to spec, read-only attributes return ERR_INVAL.
index fdf632b..20c5e3d 100644 (file)
@@ -1793,11 +1793,6 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
                                goto out_nfserr;
                }
        }
-       if (bmval0 & FATTR4_WORD0_FS_LOCATIONS) {
-               if (exp->ex_fslocs.locations == NULL) {
-                       bmval0 &= ~FATTR4_WORD0_FS_LOCATIONS;
-               }
-       }
        if ((buflen -= 16) < 0)
                goto out_resource;
 
@@ -1825,8 +1820,6 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
                        goto out_resource;
                if (!aclsupport)
                        word0 &= ~FATTR4_WORD0_ACL;
-               if (!exp->ex_fslocs.locations)
-                       word0 &= ~FATTR4_WORD0_FS_LOCATIONS;
                if (!word2) {
                        WRITE32(2);
                        WRITE32(word0);