From ac48fcc177e0c1e9f20f76f4a6a9ec833537a1e3 Mon Sep 17 00:00:00 2001 From: rwatson Date: Thu, 15 May 2003 03:19:30 +0000 Subject: When getting back an NLM DENIED response for a requested lock from the server, map it to EAGAIN locally rather than EACCES. The NLM spec indicates the DENIED corresponds to lock contention, not a permission failure. This fixes O_EXLOCK/O_SHLOCK with O_NONBLOCK, which would previously give a permission error, which in turn fixes things like mailq(8) and lockf(1) over NFS. Approved by: scottl (re) Reviewed by: truckman, Andrew P Lentvorski, Jr. Idea from: truckman --- usr.sbin/rpc.lockd/kern.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'usr.sbin/rpc.lockd') diff --git a/usr.sbin/rpc.lockd/kern.c b/usr.sbin/rpc.lockd/kern.c index 2576258..4bd2f72 100644 --- a/usr.sbin/rpc.lockd/kern.c +++ b/usr.sbin/rpc.lockd/kern.c @@ -487,7 +487,7 @@ lock_answer(int pid, netobj *netcookie, int result, int *pid_p, int version) break; case nlm4_denied: if (pid_p == NULL) - ans.la_errno = EACCES; + ans.la_errno = EAGAIN; else { /* this is an answer to a nlm_test msg */ ans.la_set_getlk_pid = 1; @@ -530,7 +530,7 @@ lock_answer(int pid, netobj *netcookie, int result, int *pid_p, int version) break; case nlm_denied: if (pid_p == NULL) - ans.la_errno = EACCES; + ans.la_errno = EAGAIN; else { /* this is an answer to a nlm_test msg */ ans.la_set_getlk_pid = 1; -- cgit v1.1