Date: Sat, 27 Aug 2011 08:23:23 -0400 (EDT) From: Rick Macklem <rmacklem@uoguelph.ca> To: Martin Birgmeier <Martin.Birgmeier@aon.at> Cc: freebsd-net@freebsd.org Subject: Re: amd + NFS reconnect = ICMP storm + unkillable process. Message-ID: <915518840.435132.1314447803952.JavaMail.root@erie.cs.uoguelph.ca> In-Reply-To: <4E58B30A.6000001@aon.at>
next in thread | previous in thread | raw e-mail | index | archive | help
Martin Birgmeier wrote:
> Thank you for these patches.
>
> One interesting thing: I was trying to backport them to 7.4.0 and
> RELENG_7, too, but there the portion of the code dealing with the
> RPC_CANTSEND case does not exist. On the other hand, the problem
> surfaced (for me) when upgrading from 7.4 to 8.2. So could one
> probably
> conclude that it is more the write case which leads to the erroneous
> behavior?
>
Well, the kernel rpc code isn't used by NFS in FreeBSD7.n. The only
thing that uses it in FreeBSD7.n is the NLM (Network Lock Manager).
As such, I don't think the patch is critical for FreeBSD7.n, rick
> Regards,
>
> Martin
>
> On 08/26/11 21:19, Artem Belevich wrote:
> > On Fri, Aug 26, 2011 at 12:04 PM, Rick Macklem<rmacklem@uoguelph.ca>
> > wrote:
> >> The patch looks good to me. The only thing is that *maybe* it
> >> should
> >> also do the same for the other msleep() higher up in
> >> clnt_dg_call()?
> >> (It seems to me that if this msleep() were to return ERESTART, the
> >> same
> >> kernel loop would occur.)
> >>
> >> Here's this variant of the patch (I'll let you decide which to
> >> commit).
> >>
> >> Good work tracking this down, rick
> >>
> >> --- rpc/clnt_dg.c.sav 2011-08-26 14:44:27.000000000 -0400
> >> +++ rpc/clnt_dg.c 2011-08-26 14:48:07.000000000 -0400
> >> @@ -467,7 +467,10 @@ send_again:
> >> cu->cu_waitflag, "rpccwnd", 0);
> >> if (error) {
> >> errp->re_errno = error;
> >> - errp->re_status = stat = RPC_CANTSEND;
> >> + if (error == EINTR || error == ERESTART)
> >> + errp->re_status = stat = RPC_INTR;
> >> + else
> >> + errp->re_status = stat = RPC_CANTSEND;
> >> goto out;
> >> }
> >> }
> > You're right. I'll add the change to the commit.
> >
> > --Artem
> >
> >> @@ -636,7 +639,7 @@ get_reply:
> >> */
> >> if (error != EWOULDBLOCK) {
> >> errp->re_errno = error;
> >> - if (error == EINTR)
> >> + if (error == EINTR || error == ERESTART)
> >> errp->re_status = stat = RPC_INTR;
> >> else
> >> errp->re_status = stat =
> >> RPC_CANTRECV;
> >>
> >>
> > _______________________________________________
> > freebsd-net@freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-net
> > To unsubscribe, send any mail to
> > "freebsd-net-unsubscribe@freebsd.org"
> >
> >
> >
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?915518840.435132.1314447803952.JavaMail.root>
