Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Aug 2011 12:19:04 -0700
From:      Artem Belevich <art@freebsd.org>
To:        Rick Macklem <rmacklem@uoguelph.ca>
Cc:        freebsd-net@freebsd.org, Martin Birgmeier <la5lbtyi@aon.at>
Subject:   Re: amd + NFS reconnect = ICMP storm + unkillable process.
Message-ID:  <CAFqOu6hn-nhPjkNbvQ25yhL=AaNzqR4cGCA0EUHh8WGsnXpyAQ@mail.gmail.com>
In-Reply-To: <2062808982.416174.1314385483626.JavaMail.root@erie.cs.uoguelph.ca>
References:  <CAFqOu6huO2gOs-3b1zvYkFb6RVFiRhLPDA-=4OA4-Hxt5FpHjw@mail.gmail.com> <2062808982.416174.1314385483626.JavaMail.root@erie.cs.uoguelph.ca>

next in thread | previous in thread | raw e-mail | index | archive | help

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;
>
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFqOu6hn-nhPjkNbvQ25yhL=AaNzqR4cGCA0EUHh8WGsnXpyAQ>