Merge tag 'pm+acpi-4.1-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[firefly-linux-kernel-4.4.55.git] / fs / nfsd / nfs3proc.c
index fa2525b2e9d798c5f2f9249eac65d3a0c0cdcdfd..12f2aab4f614deb86d5a4e9d4edbc4a8da5ee869 100644 (file)
@@ -223,11 +223,6 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp,
        newfhp = fh_init(&resp->fh, NFS3_FHSIZE);
        attr   = &argp->attrs;
 
-       /* Get the directory inode */
-       nfserr = fh_verify(rqstp, dirfhp, S_IFDIR, NFSD_MAY_CREATE);
-       if (nfserr)
-               RETURN_STATUS(nfserr);
-
        /* Unfudge the mode bits */
        attr->ia_mode &= ~S_IFMT;
        if (!(attr->ia_valid & ATTR_MODE)) { 
@@ -471,6 +466,14 @@ nfsd3_proc_readdirplus(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp,
        resp->buflen = resp->count;
        resp->rqstp = rqstp;
        offset = argp->cookie;
+
+       nfserr = fh_verify(rqstp, &resp->fh, S_IFDIR, NFSD_MAY_NOP);
+       if (nfserr)
+               RETURN_STATUS(nfserr);
+
+       if (resp->fh.fh_export->ex_flags & NFSEXP_NOREADDIRPLUS)
+               RETURN_STATUS(nfserr_notsupp);
+
        nfserr = nfsd_readdir(rqstp, &resp->fh,
                                     &offset,
                                     &resp->common,