lockd: Refactor nlmsvc_callback()

The xdrgen-based XDR conversion requires each RPC procedure to
extract its own arguments, since xdrgen generates distinct
argument structures for each procedure rather than using a
single shared type.

Move the host lookup logic from nlmsvc_callback() into each
of the five MSG procedure handlers (TEST_MSG, LOCK_MSG,
CANCEL_MSG, UNLOCK_MSG, and GRANTED_MSG). Each handler now
performs its own host lookup from rqstp->rq_argp and passes
the resulting host pointer to nlmsvc_callback(). This
establishes the per-procedure argument-handling pattern that
the subsequent xdrgen conversion patches require.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
Chuck Lever 2026-05-12 14:13:54 -04:00 committed by Chuck Lever
parent e04d248b8a
commit 596401c14c

View File

@ -781,20 +781,13 @@ static const struct rpc_call_ops nlmsvc_callback_ops = {
* because we send the callback before the reply proper. I hope this
* doesn't break any clients.
*/
static __be32 nlmsvc_callback(struct svc_rqst *rqstp, u32 proc,
static __be32
nlmsvc_callback(struct svc_rqst *rqstp, struct nlm_host *host, u32 proc,
__be32 (*func)(struct svc_rqst *, struct lockd_res *))
{
struct lockd_args *argp = rqstp->rq_argp;
struct nlm_host *host;
struct nlm_rqst *call;
__be32 stat;
host = nlmsvc_lookup_host(rqstp,
argp->lock.caller,
argp->lock.len);
if (host == NULL)
return rpc_system_err;
call = nlm_alloc_call(host);
nlmsvc_release_host(host);
if (call == NULL)
@ -814,34 +807,77 @@ static __be32 nlmsvc_callback(struct svc_rqst *rqstp, u32 proc,
static __be32 nlmsvc_proc_test_msg(struct svc_rqst *rqstp)
{
struct lockd_args *argp = rqstp->rq_argp;
struct nlm_host *host;
dprintk("lockd: TEST_MSG called\n");
return nlmsvc_callback(rqstp, NLMPROC_TEST_RES, __nlmsvc_proc_test);
host = nlmsvc_lookup_host(rqstp, argp->lock.caller, argp->lock.len);
if (!host)
return rpc_system_err;
return nlmsvc_callback(rqstp, host, NLMPROC_TEST_RES,
__nlmsvc_proc_test);
}
static __be32 nlmsvc_proc_lock_msg(struct svc_rqst *rqstp)
{
struct lockd_args *argp = rqstp->rq_argp;
struct nlm_host *host;
dprintk("lockd: LOCK_MSG called\n");
return nlmsvc_callback(rqstp, NLMPROC_LOCK_RES, __nlmsvc_proc_lock);
host = nlmsvc_lookup_host(rqstp, argp->lock.caller, argp->lock.len);
if (!host)
return rpc_system_err;
return nlmsvc_callback(rqstp, host, NLMPROC_LOCK_RES,
__nlmsvc_proc_lock);
}
static __be32 nlmsvc_proc_cancel_msg(struct svc_rqst *rqstp)
{
struct lockd_args *argp = rqstp->rq_argp;
struct nlm_host *host;
dprintk("lockd: CANCEL_MSG called\n");
return nlmsvc_callback(rqstp, NLMPROC_CANCEL_RES, __nlmsvc_proc_cancel);
host = nlmsvc_lookup_host(rqstp, argp->lock.caller, argp->lock.len);
if (!host)
return rpc_system_err;
return nlmsvc_callback(rqstp, host, NLMPROC_CANCEL_RES,
__nlmsvc_proc_cancel);
}
static __be32
nlmsvc_proc_unlock_msg(struct svc_rqst *rqstp)
static __be32 nlmsvc_proc_unlock_msg(struct svc_rqst *rqstp)
{
struct lockd_args *argp = rqstp->rq_argp;
struct nlm_host *host;
dprintk("lockd: UNLOCK_MSG called\n");
return nlmsvc_callback(rqstp, NLMPROC_UNLOCK_RES, __nlmsvc_proc_unlock);
host = nlmsvc_lookup_host(rqstp, argp->lock.caller, argp->lock.len);
if (!host)
return rpc_system_err;
return nlmsvc_callback(rqstp, host, NLMPROC_UNLOCK_RES,
__nlmsvc_proc_unlock);
}
static __be32
nlmsvc_proc_granted_msg(struct svc_rqst *rqstp)
static __be32 nlmsvc_proc_granted_msg(struct svc_rqst *rqstp)
{
struct lockd_args *argp = rqstp->rq_argp;
struct nlm_host *host;
dprintk("lockd: GRANTED_MSG called\n");
return nlmsvc_callback(rqstp, NLMPROC_GRANTED_RES, __nlmsvc_proc_granted);
host = nlmsvc_lookup_host(rqstp, argp->lock.caller, argp->lock.len);
if (!host)
return rpc_system_err;
return nlmsvc_callback(rqstp, host, NLMPROC_GRANTED_RES,
__nlmsvc_proc_granted);
}
/*