18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * linux/fs/lockd/xdr.c
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * XDR support for lockd and the lock client.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/types.h>
118c2ecf20Sopenharmony_ci#include <linux/sched.h>
128c2ecf20Sopenharmony_ci#include <linux/nfs.h>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#include <linux/sunrpc/xdr.h>
158c2ecf20Sopenharmony_ci#include <linux/sunrpc/clnt.h>
168c2ecf20Sopenharmony_ci#include <linux/sunrpc/svc.h>
178c2ecf20Sopenharmony_ci#include <linux/sunrpc/stats.h>
188c2ecf20Sopenharmony_ci#include <linux/lockd/lockd.h>
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#include <uapi/linux/nfs2.h>
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#define NLMDBG_FACILITY		NLMDBG_XDR
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistatic inline loff_t
268c2ecf20Sopenharmony_cis32_to_loff_t(__s32 offset)
278c2ecf20Sopenharmony_ci{
288c2ecf20Sopenharmony_ci	return (loff_t)offset;
298c2ecf20Sopenharmony_ci}
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_cistatic inline __s32
328c2ecf20Sopenharmony_ciloff_t_to_s32(loff_t offset)
338c2ecf20Sopenharmony_ci{
348c2ecf20Sopenharmony_ci	__s32 res;
358c2ecf20Sopenharmony_ci	if (offset >= NLM_OFFSET_MAX)
368c2ecf20Sopenharmony_ci		res = NLM_OFFSET_MAX;
378c2ecf20Sopenharmony_ci	else if (offset <= -NLM_OFFSET_MAX)
388c2ecf20Sopenharmony_ci		res = -NLM_OFFSET_MAX;
398c2ecf20Sopenharmony_ci	else
408c2ecf20Sopenharmony_ci		res = offset;
418c2ecf20Sopenharmony_ci	return res;
428c2ecf20Sopenharmony_ci}
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci/*
458c2ecf20Sopenharmony_ci * XDR functions for basic NLM types
468c2ecf20Sopenharmony_ci */
478c2ecf20Sopenharmony_cistatic __be32 *nlm_decode_cookie(__be32 *p, struct nlm_cookie *c)
488c2ecf20Sopenharmony_ci{
498c2ecf20Sopenharmony_ci	unsigned int	len;
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci	len = ntohl(*p++);
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci	if(len==0)
548c2ecf20Sopenharmony_ci	{
558c2ecf20Sopenharmony_ci		c->len=4;
568c2ecf20Sopenharmony_ci		memset(c->data, 0, 4);	/* hockeypux brain damage */
578c2ecf20Sopenharmony_ci	}
588c2ecf20Sopenharmony_ci	else if(len<=NLM_MAXCOOKIELEN)
598c2ecf20Sopenharmony_ci	{
608c2ecf20Sopenharmony_ci		c->len=len;
618c2ecf20Sopenharmony_ci		memcpy(c->data, p, len);
628c2ecf20Sopenharmony_ci		p+=XDR_QUADLEN(len);
638c2ecf20Sopenharmony_ci	}
648c2ecf20Sopenharmony_ci	else
658c2ecf20Sopenharmony_ci	{
668c2ecf20Sopenharmony_ci		dprintk("lockd: bad cookie size %d (only cookies under "
678c2ecf20Sopenharmony_ci			"%d bytes are supported.)\n",
688c2ecf20Sopenharmony_ci				len, NLM_MAXCOOKIELEN);
698c2ecf20Sopenharmony_ci		return NULL;
708c2ecf20Sopenharmony_ci	}
718c2ecf20Sopenharmony_ci	return p;
728c2ecf20Sopenharmony_ci}
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_cistatic inline __be32 *
758c2ecf20Sopenharmony_cinlm_encode_cookie(__be32 *p, struct nlm_cookie *c)
768c2ecf20Sopenharmony_ci{
778c2ecf20Sopenharmony_ci	*p++ = htonl(c->len);
788c2ecf20Sopenharmony_ci	memcpy(p, c->data, c->len);
798c2ecf20Sopenharmony_ci	p+=XDR_QUADLEN(c->len);
808c2ecf20Sopenharmony_ci	return p;
818c2ecf20Sopenharmony_ci}
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_cistatic __be32 *
848c2ecf20Sopenharmony_cinlm_decode_fh(__be32 *p, struct nfs_fh *f)
858c2ecf20Sopenharmony_ci{
868c2ecf20Sopenharmony_ci	unsigned int	len;
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci	if ((len = ntohl(*p++)) != NFS2_FHSIZE) {
898c2ecf20Sopenharmony_ci		dprintk("lockd: bad fhandle size %d (should be %d)\n",
908c2ecf20Sopenharmony_ci			len, NFS2_FHSIZE);
918c2ecf20Sopenharmony_ci		return NULL;
928c2ecf20Sopenharmony_ci	}
938c2ecf20Sopenharmony_ci	f->size = NFS2_FHSIZE;
948c2ecf20Sopenharmony_ci	memset(f->data, 0, sizeof(f->data));
958c2ecf20Sopenharmony_ci	memcpy(f->data, p, NFS2_FHSIZE);
968c2ecf20Sopenharmony_ci	return p + XDR_QUADLEN(NFS2_FHSIZE);
978c2ecf20Sopenharmony_ci}
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_ci/*
1008c2ecf20Sopenharmony_ci * Encode and decode owner handle
1018c2ecf20Sopenharmony_ci */
1028c2ecf20Sopenharmony_cistatic inline __be32 *
1038c2ecf20Sopenharmony_cinlm_decode_oh(__be32 *p, struct xdr_netobj *oh)
1048c2ecf20Sopenharmony_ci{
1058c2ecf20Sopenharmony_ci	return xdr_decode_netobj(p, oh);
1068c2ecf20Sopenharmony_ci}
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_cistatic inline __be32 *
1098c2ecf20Sopenharmony_cinlm_encode_oh(__be32 *p, struct xdr_netobj *oh)
1108c2ecf20Sopenharmony_ci{
1118c2ecf20Sopenharmony_ci	return xdr_encode_netobj(p, oh);
1128c2ecf20Sopenharmony_ci}
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_cistatic __be32 *
1158c2ecf20Sopenharmony_cinlm_decode_lock(__be32 *p, struct nlm_lock *lock)
1168c2ecf20Sopenharmony_ci{
1178c2ecf20Sopenharmony_ci	struct file_lock	*fl = &lock->fl;
1188c2ecf20Sopenharmony_ci	s32			start, len, end;
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci	if (!(p = xdr_decode_string_inplace(p, &lock->caller,
1218c2ecf20Sopenharmony_ci					    &lock->len,
1228c2ecf20Sopenharmony_ci					    NLM_MAXSTRLEN))
1238c2ecf20Sopenharmony_ci	 || !(p = nlm_decode_fh(p, &lock->fh))
1248c2ecf20Sopenharmony_ci	 || !(p = nlm_decode_oh(p, &lock->oh)))
1258c2ecf20Sopenharmony_ci		return NULL;
1268c2ecf20Sopenharmony_ci	lock->svid  = ntohl(*p++);
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci	locks_init_lock(fl);
1298c2ecf20Sopenharmony_ci	fl->fl_flags = FL_POSIX;
1308c2ecf20Sopenharmony_ci	fl->fl_type  = F_RDLCK;		/* as good as anything else */
1318c2ecf20Sopenharmony_ci	start = ntohl(*p++);
1328c2ecf20Sopenharmony_ci	len = ntohl(*p++);
1338c2ecf20Sopenharmony_ci	end = start + len - 1;
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci	fl->fl_start = s32_to_loff_t(start);
1368c2ecf20Sopenharmony_ci
1378c2ecf20Sopenharmony_ci	if (len == 0 || end < 0)
1388c2ecf20Sopenharmony_ci		fl->fl_end = OFFSET_MAX;
1398c2ecf20Sopenharmony_ci	else
1408c2ecf20Sopenharmony_ci		fl->fl_end = s32_to_loff_t(end);
1418c2ecf20Sopenharmony_ci	return p;
1428c2ecf20Sopenharmony_ci}
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ci/*
1458c2ecf20Sopenharmony_ci * Encode result of a TEST/TEST_MSG call
1468c2ecf20Sopenharmony_ci */
1478c2ecf20Sopenharmony_cistatic __be32 *
1488c2ecf20Sopenharmony_cinlm_encode_testres(__be32 *p, struct nlm_res *resp)
1498c2ecf20Sopenharmony_ci{
1508c2ecf20Sopenharmony_ci	s32		start, len;
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ci	if (!(p = nlm_encode_cookie(p, &resp->cookie)))
1538c2ecf20Sopenharmony_ci		return NULL;
1548c2ecf20Sopenharmony_ci	*p++ = resp->status;
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ci	if (resp->status == nlm_lck_denied) {
1578c2ecf20Sopenharmony_ci		struct file_lock	*fl = &resp->lock.fl;
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_ci		*p++ = (fl->fl_type == F_RDLCK)? xdr_zero : xdr_one;
1608c2ecf20Sopenharmony_ci		*p++ = htonl(resp->lock.svid);
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_ci		/* Encode owner handle. */
1638c2ecf20Sopenharmony_ci		if (!(p = xdr_encode_netobj(p, &resp->lock.oh)))
1648c2ecf20Sopenharmony_ci			return NULL;
1658c2ecf20Sopenharmony_ci
1668c2ecf20Sopenharmony_ci		start = loff_t_to_s32(fl->fl_start);
1678c2ecf20Sopenharmony_ci		if (fl->fl_end == OFFSET_MAX)
1688c2ecf20Sopenharmony_ci			len = 0;
1698c2ecf20Sopenharmony_ci		else
1708c2ecf20Sopenharmony_ci			len = loff_t_to_s32(fl->fl_end - fl->fl_start + 1);
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ci		*p++ = htonl(start);
1738c2ecf20Sopenharmony_ci		*p++ = htonl(len);
1748c2ecf20Sopenharmony_ci	}
1758c2ecf20Sopenharmony_ci
1768c2ecf20Sopenharmony_ci	return p;
1778c2ecf20Sopenharmony_ci}
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci
1808c2ecf20Sopenharmony_ci/*
1818c2ecf20Sopenharmony_ci * First, the server side XDR functions
1828c2ecf20Sopenharmony_ci */
1838c2ecf20Sopenharmony_ciint
1848c2ecf20Sopenharmony_cinlmsvc_decode_testargs(struct svc_rqst *rqstp, __be32 *p)
1858c2ecf20Sopenharmony_ci{
1868c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
1878c2ecf20Sopenharmony_ci	u32	exclusive;
1888c2ecf20Sopenharmony_ci
1898c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_cookie(p, &argp->cookie)))
1908c2ecf20Sopenharmony_ci		return 0;
1918c2ecf20Sopenharmony_ci
1928c2ecf20Sopenharmony_ci	exclusive = ntohl(*p++);
1938c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_lock(p, &argp->lock)))
1948c2ecf20Sopenharmony_ci		return 0;
1958c2ecf20Sopenharmony_ci	if (exclusive)
1968c2ecf20Sopenharmony_ci		argp->lock.fl.fl_type = F_WRLCK;
1978c2ecf20Sopenharmony_ci
1988c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
1998c2ecf20Sopenharmony_ci}
2008c2ecf20Sopenharmony_ci
2018c2ecf20Sopenharmony_ciint
2028c2ecf20Sopenharmony_cinlmsvc_encode_testres(struct svc_rqst *rqstp, __be32 *p)
2038c2ecf20Sopenharmony_ci{
2048c2ecf20Sopenharmony_ci	struct nlm_res *resp = rqstp->rq_resp;
2058c2ecf20Sopenharmony_ci
2068c2ecf20Sopenharmony_ci	if (!(p = nlm_encode_testres(p, resp)))
2078c2ecf20Sopenharmony_ci		return 0;
2088c2ecf20Sopenharmony_ci	return xdr_ressize_check(rqstp, p);
2098c2ecf20Sopenharmony_ci}
2108c2ecf20Sopenharmony_ci
2118c2ecf20Sopenharmony_ciint
2128c2ecf20Sopenharmony_cinlmsvc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p)
2138c2ecf20Sopenharmony_ci{
2148c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
2158c2ecf20Sopenharmony_ci	u32	exclusive;
2168c2ecf20Sopenharmony_ci
2178c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_cookie(p, &argp->cookie)))
2188c2ecf20Sopenharmony_ci		return 0;
2198c2ecf20Sopenharmony_ci	argp->block  = ntohl(*p++);
2208c2ecf20Sopenharmony_ci	exclusive    = ntohl(*p++);
2218c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_lock(p, &argp->lock)))
2228c2ecf20Sopenharmony_ci		return 0;
2238c2ecf20Sopenharmony_ci	if (exclusive)
2248c2ecf20Sopenharmony_ci		argp->lock.fl.fl_type = F_WRLCK;
2258c2ecf20Sopenharmony_ci	argp->reclaim = ntohl(*p++);
2268c2ecf20Sopenharmony_ci	argp->state   = ntohl(*p++);
2278c2ecf20Sopenharmony_ci	argp->monitor = 1;		/* monitor client by default */
2288c2ecf20Sopenharmony_ci
2298c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
2308c2ecf20Sopenharmony_ci}
2318c2ecf20Sopenharmony_ci
2328c2ecf20Sopenharmony_ciint
2338c2ecf20Sopenharmony_cinlmsvc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p)
2348c2ecf20Sopenharmony_ci{
2358c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
2368c2ecf20Sopenharmony_ci	u32	exclusive;
2378c2ecf20Sopenharmony_ci
2388c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_cookie(p, &argp->cookie)))
2398c2ecf20Sopenharmony_ci		return 0;
2408c2ecf20Sopenharmony_ci	argp->block = ntohl(*p++);
2418c2ecf20Sopenharmony_ci	exclusive = ntohl(*p++);
2428c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_lock(p, &argp->lock)))
2438c2ecf20Sopenharmony_ci		return 0;
2448c2ecf20Sopenharmony_ci	if (exclusive)
2458c2ecf20Sopenharmony_ci		argp->lock.fl.fl_type = F_WRLCK;
2468c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
2478c2ecf20Sopenharmony_ci}
2488c2ecf20Sopenharmony_ci
2498c2ecf20Sopenharmony_ciint
2508c2ecf20Sopenharmony_cinlmsvc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p)
2518c2ecf20Sopenharmony_ci{
2528c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
2538c2ecf20Sopenharmony_ci
2548c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_cookie(p, &argp->cookie))
2558c2ecf20Sopenharmony_ci	 || !(p = nlm_decode_lock(p, &argp->lock)))
2568c2ecf20Sopenharmony_ci		return 0;
2578c2ecf20Sopenharmony_ci	argp->lock.fl.fl_type = F_UNLCK;
2588c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
2598c2ecf20Sopenharmony_ci}
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_ciint
2628c2ecf20Sopenharmony_cinlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
2638c2ecf20Sopenharmony_ci{
2648c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
2658c2ecf20Sopenharmony_ci	struct nlm_lock	*lock = &argp->lock;
2668c2ecf20Sopenharmony_ci
2678c2ecf20Sopenharmony_ci	memset(lock, 0, sizeof(*lock));
2688c2ecf20Sopenharmony_ci	locks_init_lock(&lock->fl);
2698c2ecf20Sopenharmony_ci	lock->svid = ~(u32) 0;
2708c2ecf20Sopenharmony_ci
2718c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_cookie(p, &argp->cookie))
2728c2ecf20Sopenharmony_ci	 || !(p = xdr_decode_string_inplace(p, &lock->caller,
2738c2ecf20Sopenharmony_ci					    &lock->len, NLM_MAXSTRLEN))
2748c2ecf20Sopenharmony_ci	 || !(p = nlm_decode_fh(p, &lock->fh))
2758c2ecf20Sopenharmony_ci	 || !(p = nlm_decode_oh(p, &lock->oh)))
2768c2ecf20Sopenharmony_ci		return 0;
2778c2ecf20Sopenharmony_ci	argp->fsm_mode = ntohl(*p++);
2788c2ecf20Sopenharmony_ci	argp->fsm_access = ntohl(*p++);
2798c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
2808c2ecf20Sopenharmony_ci}
2818c2ecf20Sopenharmony_ci
2828c2ecf20Sopenharmony_ciint
2838c2ecf20Sopenharmony_cinlmsvc_encode_shareres(struct svc_rqst *rqstp, __be32 *p)
2848c2ecf20Sopenharmony_ci{
2858c2ecf20Sopenharmony_ci	struct nlm_res *resp = rqstp->rq_resp;
2868c2ecf20Sopenharmony_ci
2878c2ecf20Sopenharmony_ci	if (!(p = nlm_encode_cookie(p, &resp->cookie)))
2888c2ecf20Sopenharmony_ci		return 0;
2898c2ecf20Sopenharmony_ci	*p++ = resp->status;
2908c2ecf20Sopenharmony_ci	*p++ = xdr_zero;		/* sequence argument */
2918c2ecf20Sopenharmony_ci	return xdr_ressize_check(rqstp, p);
2928c2ecf20Sopenharmony_ci}
2938c2ecf20Sopenharmony_ci
2948c2ecf20Sopenharmony_ciint
2958c2ecf20Sopenharmony_cinlmsvc_encode_res(struct svc_rqst *rqstp, __be32 *p)
2968c2ecf20Sopenharmony_ci{
2978c2ecf20Sopenharmony_ci	struct nlm_res *resp = rqstp->rq_resp;
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_ci	if (!(p = nlm_encode_cookie(p, &resp->cookie)))
3008c2ecf20Sopenharmony_ci		return 0;
3018c2ecf20Sopenharmony_ci	*p++ = resp->status;
3028c2ecf20Sopenharmony_ci	return xdr_ressize_check(rqstp, p);
3038c2ecf20Sopenharmony_ci}
3048c2ecf20Sopenharmony_ci
3058c2ecf20Sopenharmony_ciint
3068c2ecf20Sopenharmony_cinlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p)
3078c2ecf20Sopenharmony_ci{
3088c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
3098c2ecf20Sopenharmony_ci	struct nlm_lock	*lock = &argp->lock;
3108c2ecf20Sopenharmony_ci
3118c2ecf20Sopenharmony_ci	if (!(p = xdr_decode_string_inplace(p, &lock->caller,
3128c2ecf20Sopenharmony_ci					    &lock->len, NLM_MAXSTRLEN)))
3138c2ecf20Sopenharmony_ci		return 0;
3148c2ecf20Sopenharmony_ci	argp->state = ntohl(*p++);
3158c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
3168c2ecf20Sopenharmony_ci}
3178c2ecf20Sopenharmony_ci
3188c2ecf20Sopenharmony_ciint
3198c2ecf20Sopenharmony_cinlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p)
3208c2ecf20Sopenharmony_ci{
3218c2ecf20Sopenharmony_ci	struct nlm_reboot *argp = rqstp->rq_argp;
3228c2ecf20Sopenharmony_ci
3238c2ecf20Sopenharmony_ci	if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN)))
3248c2ecf20Sopenharmony_ci		return 0;
3258c2ecf20Sopenharmony_ci	argp->state = ntohl(*p++);
3268c2ecf20Sopenharmony_ci	memcpy(&argp->priv.data, p, sizeof(argp->priv.data));
3278c2ecf20Sopenharmony_ci	p += XDR_QUADLEN(SM_PRIV_SIZE);
3288c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
3298c2ecf20Sopenharmony_ci}
3308c2ecf20Sopenharmony_ci
3318c2ecf20Sopenharmony_ciint
3328c2ecf20Sopenharmony_cinlmsvc_decode_res(struct svc_rqst *rqstp, __be32 *p)
3338c2ecf20Sopenharmony_ci{
3348c2ecf20Sopenharmony_ci	struct nlm_res *resp = rqstp->rq_argp;
3358c2ecf20Sopenharmony_ci
3368c2ecf20Sopenharmony_ci	if (!(p = nlm_decode_cookie(p, &resp->cookie)))
3378c2ecf20Sopenharmony_ci		return 0;
3388c2ecf20Sopenharmony_ci	resp->status = *p++;
3398c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
3408c2ecf20Sopenharmony_ci}
3418c2ecf20Sopenharmony_ci
3428c2ecf20Sopenharmony_ciint
3438c2ecf20Sopenharmony_cinlmsvc_decode_void(struct svc_rqst *rqstp, __be32 *p)
3448c2ecf20Sopenharmony_ci{
3458c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
3468c2ecf20Sopenharmony_ci}
3478c2ecf20Sopenharmony_ci
3488c2ecf20Sopenharmony_ciint
3498c2ecf20Sopenharmony_cinlmsvc_encode_void(struct svc_rqst *rqstp, __be32 *p)
3508c2ecf20Sopenharmony_ci{
3518c2ecf20Sopenharmony_ci	return xdr_ressize_check(rqstp, p);
3528c2ecf20Sopenharmony_ci}
353