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<rmack...@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-unsubscr...@freebsd.org"
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"