aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/rpc.lockd
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2003-05-14 13:50:40 +0000
committerRobert Watson <rwatson@FreeBSD.org>2003-05-14 13:50:40 +0000
commit1870b993d0f04ab08999bfee401b1b992d3355a4 (patch)
treef63d76d0549a646e83dcc7947fde8c28cf8884f5 /usr.sbin/rpc.lockd
parent5adbf8fb4da4ccd3f566425a11e333ac9a5b32e9 (diff)
downloadsrc-1870b993d0f04ab08999bfee401b1b992d3355a4.tar.gz
src-1870b993d0f04ab08999bfee401b1b992d3355a4.zip
When receiving NLM_GRANTED_RES or NLM4_GRANTED_RES lock granted messages
from the NFS server, following contention on a lock by this or another client, immediately notify the waiting process that the lock has been granted via a wakeup. Without this change, the client rpc.lockd will not wakeup the waiting process until it next re-polls the lock (sometime in the next ten seconds), which can lead to marked latency across all potential lockers, as the lock is held by the client for the duration. Approved by: re (scottl) Submitted by: truckman Reviewed by: Andrew P. Lentvorski, Jr <bsder@allcaps.org>
Notes
Notes: svn path=/head/; revision=114993
Diffstat (limited to 'usr.sbin/rpc.lockd')
-rw-r--r--usr.sbin/rpc.lockd/lock_proc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/usr.sbin/rpc.lockd/lock_proc.c b/usr.sbin/rpc.lockd/lock_proc.c
index f0ded1ddd058..255072aa1539 100644
--- a/usr.sbin/rpc.lockd/lock_proc.c
+++ b/usr.sbin/rpc.lockd/lock_proc.c
@@ -695,7 +695,10 @@ nlm_granted_msg_1_svc(arg, rqstp)
log_from_addr("nlm_granted_msg", rqstp);
res.cookie = arg->cookie;
- res.stat.stat = nlm_granted;
+ res.stat.stat = lock_answer(arg->alock.svid, &arg->cookie,
+ nlm_granted, NULL, NLM_VERS) == 0 ?
+ nlm_granted : nlm_denied;
+
transmit_result(NLM_GRANTED_RES, &res,
(struct sockaddr *)svc_getcaller(rqstp->rq_xprt));
return (NULL);
@@ -1184,7 +1187,9 @@ nlm4_granted_msg_4_svc(arg, rqstp)
log_from_addr("nlm4_granted_msg", rqstp);
res.cookie = arg->cookie;
- res.stat.stat = nlm4_granted;
+ res.stat.stat = lock_answer(arg->alock.svid, &arg->cookie,
+ nlm4_granted, NULL, NLM_VERS4) == 0 ?
+ nlm4_granted : nlm4_denied;
transmit4_result(NLM4_GRANTED_RES, &res,
(struct sockaddr *)svc_getrpccaller(rqstp->rq_xprt)->buf);
return (NULL);