NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/44625: memory exhaustion on NFS server while writing many files
The following reply was made to PR kern/44625; it has been noted by GNATS.
From: hash%abox3.so-net.ne.jp@localhost
To: dholland%NetBSD.org@localhost
Cc: gnats-bugs%NetBSD.org@localhost, gnats-admin%netbsd.org@localhost,
netbsd-bugs%netbsd.org@localhost
Subject: Re: kern/44625: memory exhaustion on NFS server while writing many
files
Date: Thu, 17 Mar 2011 19:49:40 +0900
On Thu, 17 Mar 2011 09:20:05 +0000 (UTC)
David Holland <dholland-bugs%netbsd.org@localhost> wrote:
> The following reply was made to PR kern/44625; it has been noted by GNATS.
>
> From: David Holland <dholland-bugs%netbsd.org@localhost>
> To: gnats-bugs%NetBSD.org@localhost, Mindaugas Rasiukevicius
> <rmind%netbsd.org@localhost>
> Cc:
> Subject: Re: kern/44625: memory exhaustion on NFS server while writing many
> files
> Date: Thu, 17 Mar 2011 09:18:53 +0000
>
> On Thu, Mar 17, 2011 at 05:35:01AM +0000, Mindaugas Rasiukevicius wrote:
> > > The Npage of pnbufpl grows extremely.
> > >
> > > I also tried some kernels checked out on other date. It seems that
> > > this leakage is seen after struct componentname changes on Nov 30
> 2010.
> >
> > http://nxr.netbsd.org/xref/src/sys/nfs/nfs_serv.c?r=1.156#465
> >
> > A leak in this error path (at least)?
>
> good catch and boy don't I feel stupid. :-/
>
> This may help (not tested yet though):
I try to rsync x4 and currently it does not seem to leak.
BTW does it need to check whether nd.ni_pathbuf != NULL
at 6 lines below?
Thanks.
> Index: nfs/nfs_serv.c
> ===================================================================
> RCS file: /cvsroot/src/sys/nfs/nfs_serv.c,v
> retrieving revision 1.156
> diff -u -p -r1.156 nfs_serv.c
> --- nfs/nfs_serv.c 5 Feb 2011 13:35:11 -0000 1.156
> +++ nfs/nfs_serv.c 17 Mar 2011 09:14:46 -0000
> @@ -463,6 +463,12 @@ nfsrv_lookup(struct nfsrv_descript *nfsd
> }
>
> if (error) {
> + if (nd.ni_pathbuf != NULL) {
> + pathbuf_destroy(nd.ni_pathbuf);
> + }
> + if (ipb != NULL) {
> + pathbuf_destroy(ipb);
> + }
> nfsm_reply(NFSX_POSTOPATTR(v3));
> nfsm_srvpostop_attr(dirattr_ret, &dirattr);
> return (0);
> Index: nfs/nfs_srvsubs.c
> ===================================================================
> RCS file: /cvsroot/src/sys/nfs/nfs_srvsubs.c,v
> retrieving revision 1.8
> diff -u -p -r1.8 nfs_srvsubs.c
> --- nfs/nfs_srvsubs.c 30 Nov 2010 10:30:03 -0000 1.8
> +++ nfs/nfs_srvsubs.c 17 Mar 2011 09:14:46 -0000
> @@ -276,6 +276,7 @@ nfs_namei(struct nameidata *ndp, nfsrvfh
> out:
> if (ndp->ni_pathbuf != NULL) {
> pathbuf_destroy(ndp->ni_pathbuf);
> + ndp->ni_pathbuf = NULL;
> } else {
> PNBUF_PUT(path);
> }
>
>
> --
> David A. Holland
> dholland%netbsd.org@localhost
>
--
Takahiro HAYASHI
Home |
Main Index |
Thread Index |
Old Index