From 1adff51778530437d6f58075c43c86d027578b31 Mon Sep 17 00:00:00 2001 From: mav Date: Wed, 22 Jan 2014 23:50:13 +0000 Subject: [PATCH] MFC r260031: In addition to r259632 completely block receive upcalls if we have more data than we need. This reduces lock pressure from xprt_active() side. git-svn-id: svn://svn.freebsd.org/base/stable/10@261052 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- sys/rpc/svc_vc.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sys/rpc/svc_vc.c b/sys/rpc/svc_vc.c index 988b487eb..f9ff0e6f5 100644 --- a/sys/rpc/svc_vc.c +++ b/sys/rpc/svc_vc.c @@ -619,7 +619,15 @@ svc_vc_process_pending(SVCXPRT *xprt) } } - so->so_rcv.sb_lowat = imax(1, imin(cd->resid, so->so_rcv.sb_hiwat / 2)); + /* + * Block receive upcalls if we have more data pending, + * otherwise report our need. + */ + if (cd->mpending) + so->so_rcv.sb_lowat = INT_MAX; + else + so->so_rcv.sb_lowat = + imax(1, imin(cd->resid, so->so_rcv.sb_hiwat / 2)); return (TRUE); } -- 2.45.0