kern/144330: [nfs] mbuf leakage in nfsd with zfs

Daniel Braniss danny at cs.huji.ac.il
Mon Mar 22 11:09:58 UTC 2010


> 
> 
> On Sun, 21 Mar 2010, Mikolaj Golub wrote:
> 
> >
> > Reviewing rpc/svc.c:svc_getreq() it looks for me that for RS_DONE case args
> > are nevere freed. Shouldn't it be like in the attached patch?
> >
> Oops, I meant to ask Daniel Braniss (not Jeremy) w.r.t testing the patch,
> since he can easily reproduce the problem. Of course, I'd appreciate
> anyone who can test it to do so and let us know how it goes.
> 
> Daniel, here's the patch just in case you didn't see Mikolaj's email.
> 
> rick
> Mikolaj's patch:
> --- sys/rpc/svc.c.orig	2010-03-21 10:17:20.000000000 +0200
> +++ sys/rpc/svc.c	2010-03-21 10:20:05.000000000 +0200
> @@ -819,6 +819,7 @@ svc_getreq(SVCXPRT *xprt, struct svc_req
>   					free(r->rq_addr, M_SONAME);
>   					r->rq_addr = NULL;
>   				}
> +				m_freem(args);
>   				goto call_done;
> 
>   			default:

well, it's much better!, but no cookies yet :-)

from comparing graphs in
	ftp://ftp.cs.huji.ac.il/users/danny/freebsd/mbuf-leak/
store-01-e.ps: a production server running newfsd - now up almost 20 days
	notice that the average used mbuf is below 1000!

store-02.ps: kernel without last patch, classic nfsd
	the leak is huge.

store-02++.ps: with latest patch
	the leak is much smaller but I see 2 issues:
		- the initial leap to over 2000, then a smaller leak.

could someone explain replay_prune() to me?

cheers,
	danny







More information about the freebsd-fs mailing list