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