]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
lockd: Translate nlm__int__deadlock in __nlm4svc_proc_lock_msg()
authorChuck Lever <chuck.lever@oracle.com>
Tue, 12 May 2026 18:13:39 +0000 (14:13 -0400)
committerChuck Lever <cel@kernel.org>
Tue, 9 Jun 2026 20:32:59 +0000 (16:32 -0400)
When nlmsvc_lock() detects a deadlock it returns the internal
sentinel nlm__int__deadlock (30001), which version-specific
handlers must translate to a wire-valid status before the reply
is encoded.  The xdrgen LOCK_MSG handler stores the sentinel
unmodified in resp->status; the LOCK_RES callback then places
30001 on the v4 wire, where the client rejects the reply.

Commit 9e0d0c619407 ("lockd: Introduce nlm__int__deadlock")
established the translation boundary and updated the synchronous
v4 path nlm4svc_do_lock(), but the xdrgen LOCK_MSG handler added
later in commit b2be4e28c23a ("lockd: Use xdrgen XDR functions
for the NLMv4 LOCK_MSG procedure") missed the corresponding
remap.  Apply the same translation in __nlm4svc_proc_lock_msg()
so deadlock results are reported as nlm4_deadlock on LOCK_RES.

Fixes: b2be4e28c23a ("lockd: Use xdrgen XDR functions for the NLMv4 LOCK_MSG procedure")
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/lockd/svc4proc.c

index 2bd71bc2b481e24ea9c6f30c81fbbb5a16d9b173..886b56317e5fd3bc289c1b1dff7632ac1bfb6b06 100644 (file)
@@ -668,6 +668,8 @@ __nlm4svc_proc_lock_msg(struct svc_rqst *rqstp, struct nlm_res *resp)
        resp->status = nlmsvc_lock(rqstp, file, host, &argp->lock,
                                   argp->xdrgen.block, &resp->cookie,
                                   argp->xdrgen.reclaim);
+       if (resp->status == nlm__int__deadlock)
+               resp->status = nlm4_deadlock;
        nlmsvc_release_lockowner(&argp->lock);
 
 out: