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"

Reply via email to