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