Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 27 Aug 2011 11:04:10 +0200
From:      Martin Birgmeier <Martin.Birgmeier@aon.at>
To:        freebsd-net@freebsd.org
Subject:   Re: amd + NFS reconnect = ICMP storm + unkillable process.
Message-ID:  <4E58B30A.6000001@aon.at>
In-Reply-To: <CAFqOu6hn-nhPjkNbvQ25yhL=AaNzqR4cGCA0EUHh8WGsnXpyAQ@mail.gmail.com>
References:  <CAFqOu6huO2gOs-3b1zvYkFb6RVFiRhLPDA-=4OA4-Hxt5FpHjw@mail.gmail.com> <2062808982.416174.1314385483626.JavaMail.root@erie.cs.uoguelph.ca> <CAFqOu6hn-nhPjkNbvQ25yhL=AaNzqR4cGCA0EUHh8WGsnXpyAQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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?

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E58B30A.6000001>