Re: NFS client over udp
- From: Rick Macklem <rmacklem@xxxxxxxxxxx>
- Date: Sun, 20 Feb 2011 13:02:43 -0500 (EST)
--- On Fri, 2/18/11, Kirill YelizarovYou could try the attached patch. It fixes the only places in the
On Fri, Feb 18, 2011 at 05:27:00AM
-0800, Kirill Yelizarov wrote:
I have a reproducible memory leak when using nfsclient with an old
nfs server
and mbufs used
8193/1722/9915 mbufs in use (current/cache/total)
8192/1264/9456/25600 mbuf clusters in use (current/cache/total/max)
8192/605 mbuf+clusters out of packet secondary zone in use
(current/cache)
0/768/768/12800 4k (page size) jumbo clusters in use
(current/cache/total/max)
0/0/0/6400 9k jumbo clusters in use (current/cache/total/max)
0/0/0/3200 16k jumbo clusters in use (current/cache/total/max)
18432K/6030K/24462K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0/0/0 sfbufs in use (current/peak/max)
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile
0 calls to protocol drain routines
Kirill
client side krpc over udp that seems mights cause a leak. I have no
idea if it will help, since these cases should rarely, if ever,
happen in practice.
Please let us know if you have the chance to try the patch and
whether or not it helped.
rick
--- rpc/clnt_dg.c.sav 2011-02-19 19:52:41.000000000 -0500
+++ rpc/clnt_dg.c 2011-02-20 10:43:11.000000000 -0500
@@ -704,9 +704,9 @@ got_reply:
(reply_msg.acpted_rply.ar_stat == SUCCESS))
errp->re_status = stat = RPC_SUCCESS;
else
- stat = _seterr_reply(&reply_msg, &(cu->cu_error));
+ stat = _seterr_reply(&reply_msg, errp);
- if (errp->re_status == RPC_SUCCESS) {
+ if (stat == RPC_SUCCESS) {
results = xdrmbuf_getall(&xdrs);
if (! AUTH_VALIDATE(auth, xid,
&reply_msg.acpted_rply.ar_verf,
@@ -1089,11 +1089,14 @@ clnt_dg_soupcall(struct socket *so, void
/*
* The XID is in the first uint32_t of the reply.
*/
- if (m->m_len < sizeof(xid) && m_length(m, NULL) < sizeof(xid))
+ if (m->m_len < sizeof(xid) && m_length(m, NULL) < sizeof(xid)) {
/*
* Should never happen.
*/
+ printf("clnt_dg_soupcall: received garbage\n");
+ m_freem(m);
continue;
+ }
m_copydata(m, 0, sizeof(xid), (char *)&xid);
xid = ntohl(xid);
_______________________________________________
freebsd-stable@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscribe@xxxxxxxxxxx"
- Follow-Ups:
- Re: NFS client over udp
- From: Kirill Yelizarov
- Re: NFS client over udp
- References:
- Re: NFS client over udp
- From: Kirill Yelizarov
- Re: NFS client over udp
- Prev by Date: Re[2]: About "panic: bufwrite: buffer is not busy???"
- Next by Date: Re: statd/lockd startup failure
- Previous by thread: Re: NFS client over udp
- Next by thread: Re: NFS client over udp
- Index(es):
Relevant Pages
|