18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * linux/fs/lockd/xdr4.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 * Copyright (C) 1999, Trond Myklebust <trond.myklebust@fys.uio.no>
98c2ecf20Sopenharmony_ci */
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/types.h>
128c2ecf20Sopenharmony_ci#include <linux/sched.h>
138c2ecf20Sopenharmony_ci#include <linux/nfs.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#include <linux/sunrpc/xdr.h>
168c2ecf20Sopenharmony_ci#include <linux/sunrpc/clnt.h>
178c2ecf20Sopenharmony_ci#include <linux/sunrpc/svc.h>
188c2ecf20Sopenharmony_ci#include <linux/sunrpc/stats.h>
198c2ecf20Sopenharmony_ci#include <linux/lockd/lockd.h>
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci#define NLMDBG_FACILITY		NLMDBG_XDR
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_cistatic inline loff_t
248c2ecf20Sopenharmony_cis64_to_loff_t(__s64 offset)
258c2ecf20Sopenharmony_ci{
268c2ecf20Sopenharmony_ci	return (loff_t)offset;
278c2ecf20Sopenharmony_ci}
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_cistatic inline s64
318c2ecf20Sopenharmony_ciloff_t_to_s64(loff_t offset)
328c2ecf20Sopenharmony_ci{
338c2ecf20Sopenharmony_ci	s64 res;
348c2ecf20Sopenharmony_ci	if (offset > NLM4_OFFSET_MAX)
358c2ecf20Sopenharmony_ci		res = NLM4_OFFSET_MAX;
368c2ecf20Sopenharmony_ci	else if (offset < -NLM4_OFFSET_MAX)
378c2ecf20Sopenharmony_ci		res = -NLM4_OFFSET_MAX;
388c2ecf20Sopenharmony_ci	else
398c2ecf20Sopenharmony_ci		res = offset;
408c2ecf20Sopenharmony_ci	return res;
418c2ecf20Sopenharmony_ci}
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci/*
448c2ecf20Sopenharmony_ci * XDR functions for basic NLM types
458c2ecf20Sopenharmony_ci */
468c2ecf20Sopenharmony_cistatic __be32 *
478c2ecf20Sopenharmony_cinlm4_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 __be32 *
758c2ecf20Sopenharmony_cinlm4_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_cinlm4_decode_fh(__be32 *p, struct nfs_fh *f)
858c2ecf20Sopenharmony_ci{
868c2ecf20Sopenharmony_ci	memset(f->data, 0, sizeof(f->data));
878c2ecf20Sopenharmony_ci	f->size = ntohl(*p++);
888c2ecf20Sopenharmony_ci	if (f->size > NFS_MAXFHSIZE) {
898c2ecf20Sopenharmony_ci		dprintk("lockd: bad fhandle size %d (should be <=%d)\n",
908c2ecf20Sopenharmony_ci			f->size, NFS_MAXFHSIZE);
918c2ecf20Sopenharmony_ci		return NULL;
928c2ecf20Sopenharmony_ci	}
938c2ecf20Sopenharmony_ci      	memcpy(f->data, p, f->size);
948c2ecf20Sopenharmony_ci	return p + XDR_QUADLEN(f->size);
958c2ecf20Sopenharmony_ci}
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci/*
988c2ecf20Sopenharmony_ci * Encode and decode owner handle
998c2ecf20Sopenharmony_ci */
1008c2ecf20Sopenharmony_cistatic __be32 *
1018c2ecf20Sopenharmony_cinlm4_decode_oh(__be32 *p, struct xdr_netobj *oh)
1028c2ecf20Sopenharmony_ci{
1038c2ecf20Sopenharmony_ci	return xdr_decode_netobj(p, oh);
1048c2ecf20Sopenharmony_ci}
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_cistatic __be32 *
1078c2ecf20Sopenharmony_cinlm4_decode_lock(__be32 *p, struct nlm_lock *lock)
1088c2ecf20Sopenharmony_ci{
1098c2ecf20Sopenharmony_ci	struct file_lock	*fl = &lock->fl;
1108c2ecf20Sopenharmony_ci	__u64			len, start;
1118c2ecf20Sopenharmony_ci	__s64			end;
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci	if (!(p = xdr_decode_string_inplace(p, &lock->caller,
1148c2ecf20Sopenharmony_ci					    &lock->len, NLM_MAXSTRLEN))
1158c2ecf20Sopenharmony_ci	 || !(p = nlm4_decode_fh(p, &lock->fh))
1168c2ecf20Sopenharmony_ci	 || !(p = nlm4_decode_oh(p, &lock->oh)))
1178c2ecf20Sopenharmony_ci		return NULL;
1188c2ecf20Sopenharmony_ci	lock->svid  = ntohl(*p++);
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci	locks_init_lock(fl);
1218c2ecf20Sopenharmony_ci	fl->fl_flags = FL_POSIX;
1228c2ecf20Sopenharmony_ci	fl->fl_type  = F_RDLCK;		/* as good as anything else */
1238c2ecf20Sopenharmony_ci	p = xdr_decode_hyper(p, &start);
1248c2ecf20Sopenharmony_ci	p = xdr_decode_hyper(p, &len);
1258c2ecf20Sopenharmony_ci	end = start + len - 1;
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ci	fl->fl_start = s64_to_loff_t(start);
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci	if (len == 0 || end < 0)
1308c2ecf20Sopenharmony_ci		fl->fl_end = OFFSET_MAX;
1318c2ecf20Sopenharmony_ci	else
1328c2ecf20Sopenharmony_ci		fl->fl_end = s64_to_loff_t(end);
1338c2ecf20Sopenharmony_ci	return p;
1348c2ecf20Sopenharmony_ci}
1358c2ecf20Sopenharmony_ci
1368c2ecf20Sopenharmony_ci/*
1378c2ecf20Sopenharmony_ci * Encode result of a TEST/TEST_MSG call
1388c2ecf20Sopenharmony_ci */
1398c2ecf20Sopenharmony_cistatic __be32 *
1408c2ecf20Sopenharmony_cinlm4_encode_testres(__be32 *p, struct nlm_res *resp)
1418c2ecf20Sopenharmony_ci{
1428c2ecf20Sopenharmony_ci	s64		start, len;
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ci	dprintk("xdr: before encode_testres (p %p resp %p)\n", p, resp);
1458c2ecf20Sopenharmony_ci	if (!(p = nlm4_encode_cookie(p, &resp->cookie)))
1468c2ecf20Sopenharmony_ci		return NULL;
1478c2ecf20Sopenharmony_ci	*p++ = resp->status;
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ci	if (resp->status == nlm_lck_denied) {
1508c2ecf20Sopenharmony_ci		struct file_lock	*fl = &resp->lock.fl;
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ci		*p++ = (fl->fl_type == F_RDLCK)? xdr_zero : xdr_one;
1538c2ecf20Sopenharmony_ci		*p++ = htonl(resp->lock.svid);
1548c2ecf20Sopenharmony_ci
1558c2ecf20Sopenharmony_ci		/* Encode owner handle. */
1568c2ecf20Sopenharmony_ci		if (!(p = xdr_encode_netobj(p, &resp->lock.oh)))
1578c2ecf20Sopenharmony_ci			return NULL;
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_ci		start = loff_t_to_s64(fl->fl_start);
1608c2ecf20Sopenharmony_ci		if (fl->fl_end == OFFSET_MAX)
1618c2ecf20Sopenharmony_ci			len = 0;
1628c2ecf20Sopenharmony_ci		else
1638c2ecf20Sopenharmony_ci			len = loff_t_to_s64(fl->fl_end - fl->fl_start + 1);
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ci		p = xdr_encode_hyper(p, start);
1668c2ecf20Sopenharmony_ci		p = xdr_encode_hyper(p, len);
1678c2ecf20Sopenharmony_ci		dprintk("xdr: encode_testres (status %u pid %d type %d start %Ld end %Ld)\n",
1688c2ecf20Sopenharmony_ci			resp->status, (int)resp->lock.svid, fl->fl_type,
1698c2ecf20Sopenharmony_ci			(long long)fl->fl_start,  (long long)fl->fl_end);
1708c2ecf20Sopenharmony_ci	}
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ci	dprintk("xdr: after encode_testres (p %p resp %p)\n", p, resp);
1738c2ecf20Sopenharmony_ci	return p;
1748c2ecf20Sopenharmony_ci}
1758c2ecf20Sopenharmony_ci
1768c2ecf20Sopenharmony_ci
1778c2ecf20Sopenharmony_ci/*
1788c2ecf20Sopenharmony_ci * First, the server side XDR functions
1798c2ecf20Sopenharmony_ci */
1808c2ecf20Sopenharmony_ciint
1818c2ecf20Sopenharmony_cinlm4svc_decode_testargs(struct svc_rqst *rqstp, __be32 *p)
1828c2ecf20Sopenharmony_ci{
1838c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
1848c2ecf20Sopenharmony_ci	u32	exclusive;
1858c2ecf20Sopenharmony_ci
1868c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_cookie(p, &argp->cookie)))
1878c2ecf20Sopenharmony_ci		return 0;
1888c2ecf20Sopenharmony_ci
1898c2ecf20Sopenharmony_ci	exclusive = ntohl(*p++);
1908c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_lock(p, &argp->lock)))
1918c2ecf20Sopenharmony_ci		return 0;
1928c2ecf20Sopenharmony_ci	if (exclusive)
1938c2ecf20Sopenharmony_ci		argp->lock.fl.fl_type = F_WRLCK;
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
1968c2ecf20Sopenharmony_ci}
1978c2ecf20Sopenharmony_ci
1988c2ecf20Sopenharmony_ciint
1998c2ecf20Sopenharmony_cinlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p)
2008c2ecf20Sopenharmony_ci{
2018c2ecf20Sopenharmony_ci	struct nlm_res *resp = rqstp->rq_resp;
2028c2ecf20Sopenharmony_ci
2038c2ecf20Sopenharmony_ci	if (!(p = nlm4_encode_testres(p, resp)))
2048c2ecf20Sopenharmony_ci		return 0;
2058c2ecf20Sopenharmony_ci	return xdr_ressize_check(rqstp, p);
2068c2ecf20Sopenharmony_ci}
2078c2ecf20Sopenharmony_ci
2088c2ecf20Sopenharmony_ciint
2098c2ecf20Sopenharmony_cinlm4svc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p)
2108c2ecf20Sopenharmony_ci{
2118c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
2128c2ecf20Sopenharmony_ci	u32	exclusive;
2138c2ecf20Sopenharmony_ci
2148c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_cookie(p, &argp->cookie)))
2158c2ecf20Sopenharmony_ci		return 0;
2168c2ecf20Sopenharmony_ci	argp->block  = ntohl(*p++);
2178c2ecf20Sopenharmony_ci	exclusive    = ntohl(*p++);
2188c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_lock(p, &argp->lock)))
2198c2ecf20Sopenharmony_ci		return 0;
2208c2ecf20Sopenharmony_ci	if (exclusive)
2218c2ecf20Sopenharmony_ci		argp->lock.fl.fl_type = F_WRLCK;
2228c2ecf20Sopenharmony_ci	argp->reclaim = ntohl(*p++);
2238c2ecf20Sopenharmony_ci	argp->state   = ntohl(*p++);
2248c2ecf20Sopenharmony_ci	argp->monitor = 1;		/* monitor client by default */
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
2278c2ecf20Sopenharmony_ci}
2288c2ecf20Sopenharmony_ci
2298c2ecf20Sopenharmony_ciint
2308c2ecf20Sopenharmony_cinlm4svc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p)
2318c2ecf20Sopenharmony_ci{
2328c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
2338c2ecf20Sopenharmony_ci	u32	exclusive;
2348c2ecf20Sopenharmony_ci
2358c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_cookie(p, &argp->cookie)))
2368c2ecf20Sopenharmony_ci		return 0;
2378c2ecf20Sopenharmony_ci	argp->block = ntohl(*p++);
2388c2ecf20Sopenharmony_ci	exclusive = ntohl(*p++);
2398c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_lock(p, &argp->lock)))
2408c2ecf20Sopenharmony_ci		return 0;
2418c2ecf20Sopenharmony_ci	if (exclusive)
2428c2ecf20Sopenharmony_ci		argp->lock.fl.fl_type = F_WRLCK;
2438c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
2448c2ecf20Sopenharmony_ci}
2458c2ecf20Sopenharmony_ci
2468c2ecf20Sopenharmony_ciint
2478c2ecf20Sopenharmony_cinlm4svc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p)
2488c2ecf20Sopenharmony_ci{
2498c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
2508c2ecf20Sopenharmony_ci
2518c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_cookie(p, &argp->cookie))
2528c2ecf20Sopenharmony_ci	 || !(p = nlm4_decode_lock(p, &argp->lock)))
2538c2ecf20Sopenharmony_ci		return 0;
2548c2ecf20Sopenharmony_ci	argp->lock.fl.fl_type = F_UNLCK;
2558c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
2568c2ecf20Sopenharmony_ci}
2578c2ecf20Sopenharmony_ci
2588c2ecf20Sopenharmony_ciint
2598c2ecf20Sopenharmony_cinlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
2608c2ecf20Sopenharmony_ci{
2618c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
2628c2ecf20Sopenharmony_ci	struct nlm_lock	*lock = &argp->lock;
2638c2ecf20Sopenharmony_ci
2648c2ecf20Sopenharmony_ci	memset(lock, 0, sizeof(*lock));
2658c2ecf20Sopenharmony_ci	locks_init_lock(&lock->fl);
2668c2ecf20Sopenharmony_ci	lock->svid = ~(u32) 0;
2678c2ecf20Sopenharmony_ci
2688c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_cookie(p, &argp->cookie))
2698c2ecf20Sopenharmony_ci	 || !(p = xdr_decode_string_inplace(p, &lock->caller,
2708c2ecf20Sopenharmony_ci					    &lock->len, NLM_MAXSTRLEN))
2718c2ecf20Sopenharmony_ci	 || !(p = nlm4_decode_fh(p, &lock->fh))
2728c2ecf20Sopenharmony_ci	 || !(p = nlm4_decode_oh(p, &lock->oh)))
2738c2ecf20Sopenharmony_ci		return 0;
2748c2ecf20Sopenharmony_ci	argp->fsm_mode = ntohl(*p++);
2758c2ecf20Sopenharmony_ci	argp->fsm_access = ntohl(*p++);
2768c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
2778c2ecf20Sopenharmony_ci}
2788c2ecf20Sopenharmony_ci
2798c2ecf20Sopenharmony_ciint
2808c2ecf20Sopenharmony_cinlm4svc_encode_shareres(struct svc_rqst *rqstp, __be32 *p)
2818c2ecf20Sopenharmony_ci{
2828c2ecf20Sopenharmony_ci	struct nlm_res *resp = rqstp->rq_resp;
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_ci	if (!(p = nlm4_encode_cookie(p, &resp->cookie)))
2858c2ecf20Sopenharmony_ci		return 0;
2868c2ecf20Sopenharmony_ci	*p++ = resp->status;
2878c2ecf20Sopenharmony_ci	*p++ = xdr_zero;		/* sequence argument */
2888c2ecf20Sopenharmony_ci	return xdr_ressize_check(rqstp, p);
2898c2ecf20Sopenharmony_ci}
2908c2ecf20Sopenharmony_ci
2918c2ecf20Sopenharmony_ciint
2928c2ecf20Sopenharmony_cinlm4svc_encode_res(struct svc_rqst *rqstp, __be32 *p)
2938c2ecf20Sopenharmony_ci{
2948c2ecf20Sopenharmony_ci	struct nlm_res *resp = rqstp->rq_resp;
2958c2ecf20Sopenharmony_ci
2968c2ecf20Sopenharmony_ci	if (!(p = nlm4_encode_cookie(p, &resp->cookie)))
2978c2ecf20Sopenharmony_ci		return 0;
2988c2ecf20Sopenharmony_ci	*p++ = resp->status;
2998c2ecf20Sopenharmony_ci	return xdr_ressize_check(rqstp, p);
3008c2ecf20Sopenharmony_ci}
3018c2ecf20Sopenharmony_ci
3028c2ecf20Sopenharmony_ciint
3038c2ecf20Sopenharmony_cinlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p)
3048c2ecf20Sopenharmony_ci{
3058c2ecf20Sopenharmony_ci	struct nlm_args *argp = rqstp->rq_argp;
3068c2ecf20Sopenharmony_ci	struct nlm_lock	*lock = &argp->lock;
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_ci	if (!(p = xdr_decode_string_inplace(p, &lock->caller,
3098c2ecf20Sopenharmony_ci					    &lock->len, NLM_MAXSTRLEN)))
3108c2ecf20Sopenharmony_ci		return 0;
3118c2ecf20Sopenharmony_ci	argp->state = ntohl(*p++);
3128c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
3138c2ecf20Sopenharmony_ci}
3148c2ecf20Sopenharmony_ci
3158c2ecf20Sopenharmony_ciint
3168c2ecf20Sopenharmony_cinlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p)
3178c2ecf20Sopenharmony_ci{
3188c2ecf20Sopenharmony_ci	struct nlm_reboot *argp = rqstp->rq_argp;
3198c2ecf20Sopenharmony_ci
3208c2ecf20Sopenharmony_ci	if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN)))
3218c2ecf20Sopenharmony_ci		return 0;
3228c2ecf20Sopenharmony_ci	argp->state = ntohl(*p++);
3238c2ecf20Sopenharmony_ci	memcpy(&argp->priv.data, p, sizeof(argp->priv.data));
3248c2ecf20Sopenharmony_ci	p += XDR_QUADLEN(SM_PRIV_SIZE);
3258c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
3268c2ecf20Sopenharmony_ci}
3278c2ecf20Sopenharmony_ci
3288c2ecf20Sopenharmony_ciint
3298c2ecf20Sopenharmony_cinlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p)
3308c2ecf20Sopenharmony_ci{
3318c2ecf20Sopenharmony_ci	struct nlm_res *resp = rqstp->rq_argp;
3328c2ecf20Sopenharmony_ci
3338c2ecf20Sopenharmony_ci	if (!(p = nlm4_decode_cookie(p, &resp->cookie)))
3348c2ecf20Sopenharmony_ci		return 0;
3358c2ecf20Sopenharmony_ci	resp->status = *p++;
3368c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
3378c2ecf20Sopenharmony_ci}
3388c2ecf20Sopenharmony_ci
3398c2ecf20Sopenharmony_ciint
3408c2ecf20Sopenharmony_cinlm4svc_decode_void(struct svc_rqst *rqstp, __be32 *p)
3418c2ecf20Sopenharmony_ci{
3428c2ecf20Sopenharmony_ci	return xdr_argsize_check(rqstp, p);
3438c2ecf20Sopenharmony_ci}
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ciint
3468c2ecf20Sopenharmony_cinlm4svc_encode_void(struct svc_rqst *rqstp, __be32 *p)
3478c2ecf20Sopenharmony_ci{
3488c2ecf20Sopenharmony_ci	return xdr_ressize_check(rqstp, p);
3498c2ecf20Sopenharmony_ci}
350