amd + NFS reconnect = ICMP storm + unkillable process.
Martin Birgmeier
Martin.Birgmeier at aon.at
Sat Aug 27 09:31:03 UTC 2011
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 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;
>>
>>
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
>
>
>
More information about the freebsd-net
mailing list