From owner-svn-src-projects@freebsd.org Sun Jul 23 19:50:28 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 833DADABAB3 for ; Sun, 23 Jul 2017 19:50:28 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 572716CA58; Sun, 23 Jul 2017 19:50:28 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v6NJoROB075371; Sun, 23 Jul 2017 19:50:27 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v6NJoR4l075370; Sun, 23 Jul 2017 19:50:27 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201707231950.v6NJoR4l075370@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Sun, 23 Jul 2017 19:50:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r321394 - projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Group: projects X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: projects/pnfs-planb-server/sys/fs/nfsserver X-SVN-Commit-Revision: 321394 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Jul 2017 19:50:28 -0000 Author: rmacklem Date: Sun Jul 23 19:50:27 2017 New Revision: 321394 URL: https://svnweb.freebsd.org/changeset/base/321394 Log: Since "struct nfsrv_descript" has grown to about 200bytes, malloc it to avoid excessive kernel stack usage. Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Modified: projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c ============================================================================== --- projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Sun Jul 23 19:35:14 2017 (r321393) +++ projects/pnfs-planb-server/sys/fs/nfsserver/nfs_nfsdport.c Sun Jul 23 19:50:27 2017 (r321394) @@ -4087,13 +4087,13 @@ nfsrv_readdsrpc(fhandle_t *fhp, off_t off, int len, st NFSPROC_T *p, struct nfsmount *nmp, struct mbuf **mpp, struct mbuf **mpendp) { uint32_t *tl; - struct nfsrv_descript nfsd, *nd = &nfsd; + struct nfsrv_descript *nd; nfsv4stateid_t st; struct mbuf *m, *m2; int error = 0, retlen, tlen, trimlen; NFSD_DEBUG(4, "in nfsrv_readdsrpc\n"); - nd->nd_mrep = NULL; + nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); *mpp = NULL; /* * Use a stateid where other is an alternating 01010 pattern and @@ -4113,8 +4113,10 @@ nfsrv_readdsrpc(fhandle_t *fhp, off_t off, int len, st *(tl + 2) = txdr_unsigned(len); error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred, NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL); - if (error != 0) + if (error != 0) { + free(nd, M_TEMP); return (error); + } if (nd->nd_repstat == 0) { NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); NFSM_STRSIZ(retlen, len); @@ -4177,6 +4179,7 @@ nfsrv_readdsrpc(fhandle_t *fhp, off_t off, int len, st nfsmout: /* If nd->nd_mrep is already NULL, this is a no-op. */ m_freem(nd->nd_mrep); + free(nd, M_TEMP); NFSD_DEBUG(4, "nfsrv_readdsrpc error=%d\n", error); return (error); } @@ -4187,7 +4190,7 @@ nfsrv_writedsrpc(fhandle_t *fhp, off_t off, int len, s char *cp) { uint32_t *tl; - struct nfsrv_descript nfsd, *nd = &nfsd; + struct nfsrv_descript *nd; nfsv4stateid_t st; struct mbuf *m; struct nfsvattr na; @@ -4196,7 +4199,7 @@ nfsrv_writedsrpc(fhandle_t *fhp, off_t off, int len, s NFSD_DEBUG(4, "in nfsrv_writedsrpc\n"); KASSERT(*mpp != NULL, ("nfsrv_writedsrpc: NULL mbuf chain")); - nd->nd_mrep = NULL; + nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); /* * Use a stateid where other is an alternating 01010 pattern and * seqid is 0xffffffff. This value is not defined as special by @@ -4249,8 +4252,10 @@ nfsrv_writedsrpc(fhandle_t *fhp, off_t off, int len, s (void) nfsrv_putattrbit(nd, &attrbits); error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred, NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL); - if (error != 0) + if (error != 0) { + free(nd, M_TEMP); return (error); + } NFSD_DEBUG(4, "nfsrv_writedsrpc: aft writerpc=%d\n", nd->nd_repstat); /* Get rid of weak cache consistency data for now. */ if ((nd->nd_flag & (ND_NOMOREDATA | ND_NFSV4 | ND_V4WCCATTR)) == @@ -4297,6 +4302,7 @@ nfsrv_writedsrpc(fhandle_t *fhp, off_t off, int len, s NFSD_DEBUG(4, "nfsrv_writedsrpc: aft setextat=%d\n", error); nfsmout: m_freem(nd->nd_mrep); + free(nd, M_TEMP); NFSD_DEBUG(4, "nfsrv_writedsrpc error=%d\n", error); return (error); } @@ -4306,14 +4312,14 @@ nfsrv_setattrdsrpc(fhandle_t *fhp, struct ucred *cred, struct vnode *vp, struct nfsmount *nmp, struct nfsvattr *nap) { uint32_t *tl; - struct nfsrv_descript nfsd, *nd = &nfsd; + struct nfsrv_descript *nd; nfsv4stateid_t st; nfsattrbit_t attrbits; struct nfsvattr na; int error; NFSD_DEBUG(4, "in nfsrv_setattrdsrpc\n"); - nd->nd_mrep = NULL; + nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); /* * Use a stateid where other is an alternating 01010 pattern and * seqid is 0xffffffff. This value is not defined as special by @@ -4340,8 +4346,10 @@ nfsrv_setattrdsrpc(fhandle_t *fhp, struct ucred *cred, (void) nfsrv_putattrbit(nd, &attrbits); error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred, NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL); - if (error != 0) + if (error != 0) { + free(nd, M_TEMP); return (error); + } NFSD_DEBUG(4, "nfsrv_setattrdsrpc: aft setattrrpc=%d\n", nd->nd_repstat); /* Get rid of weak cache consistency data for now. */ @@ -4382,6 +4390,7 @@ nfsrv_setattrdsrpc(fhandle_t *fhp, struct ucred *cred, NFSD_DEBUG(4, "nfsrv_setattrdsrpc: aft setextat=%d\n", error); nfsmout: m_freem(nd->nd_mrep); + free(nd, M_TEMP); NFSD_DEBUG(4, "nfsrv_setattrdsrpc error=%d\n", error); return (error); } @@ -4393,13 +4402,13 @@ static int nfsrv_setacldsrpc(fhandle_t *fhp, struct ucred *cred, NFSPROC_T *p, struct vnode *vp, struct nfsmount *nmp, struct acl *aclp) { - struct nfsrv_descript nfsd, *nd = &nfsd; + struct nfsrv_descript *nd; nfsv4stateid_t st; nfsattrbit_t attrbits; int error; NFSD_DEBUG(4, "in nfsrv_setacldsrpc\n"); - nd->nd_mrep = NULL; + nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); /* * Use a stateid where other is an alternating 01010 pattern and * seqid is 0xffffffff. This value is not defined as special by @@ -4424,12 +4433,15 @@ nfsrv_setacldsrpc(fhandle_t *fhp, struct ucred *cred, NULL, 0, 0, 0, 0, 0); error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred, NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL); - if (error != 0) + if (error != 0) { + free(nd, M_TEMP); return (error); + } NFSD_DEBUG(4, "nfsrv_setacldsrpc: aft setaclrpc=%d\n", nd->nd_repstat); error = nd->nd_repstat; m_freem(nd->nd_mrep); + free(nd, M_TEMP); return (error); } @@ -4440,12 +4452,12 @@ static int nfsrv_getattrdsrpc(fhandle_t *fhp, struct ucred *cred, NFSPROC_T *p, struct vnode *vp, struct nfsmount *nmp, struct nfsvattr *nap) { - struct nfsrv_descript nfsd, *nd = &nfsd; + struct nfsrv_descript *nd; int error; nfsattrbit_t attrbits; NFSD_DEBUG(4, "in nfsrv_getattrdsrpc\n"); - nd->nd_mrep = NULL; + nd = malloc(sizeof(*nd), M_TEMP, M_WAITOK | M_ZERO); nfscl_reqstart(nd, NFSPROC_GETATTR, nmp, (u_int8_t *)fhp, sizeof(fhandle_t), NULL, NULL); NFSZERO_ATTRBIT(&attrbits); @@ -4456,8 +4468,10 @@ nfsrv_getattrdsrpc(fhandle_t *fhp, struct ucred *cred, (void) nfsrv_putattrbit(nd, &attrbits); error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred, NFS_PROG, NFS_VER4, NULL, 1, NULL, NULL); - if (error != 0) + if (error != 0) { + free(nd, M_TEMP); return (error); + } NFSD_DEBUG(4, "nfsrv_getattrdsrpc: aft getattrrpc=%d\n", nd->nd_repstat); if (nd->nd_repstat == 0) { @@ -4472,6 +4486,7 @@ nfsrv_getattrdsrpc(fhandle_t *fhp, struct ucred *cred, } else error = nd->nd_repstat; m_freem(nd->nd_mrep); + free(nd, M_TEMP); NFSD_DEBUG(4, "nfsrv_getattrdsrpc error=%d\n", error); return (error); }