amd + NFS reconnect = ICMP storm + unkillable process.
Artem Belevich
art at freebsd.org
Fri Aug 26 19:19:05 UTC 2011
On Fri, Aug 26, 2011 at 12:04 PM, Rick Macklem <rmacklem at 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;
>
>
More information about the freebsd-net
mailing list