1bbaa8b60SDan Kruchinin /*
2bbaa8b60SDan Kruchinin  * Copyright (c) 2008 Isilon Inc http://www.isilon.com/
3bbaa8b60SDan Kruchinin  * Authors: Doug Rabson <dfr@rabson.org>
4bbaa8b60SDan Kruchinin  * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org>
5bbaa8b60SDan Kruchinin  *
6bbaa8b60SDan Kruchinin  * Redistribution and use in source and binary forms, with or without
7bbaa8b60SDan Kruchinin  * modification, are permitted provided that the following conditions
8bbaa8b60SDan Kruchinin  * are met:
9bbaa8b60SDan Kruchinin  * 1. Redistributions of source code must retain the above copyright
10bbaa8b60SDan Kruchinin  *    notice, this list of conditions and the following disclaimer.
11bbaa8b60SDan Kruchinin  * 2. Redistributions in binary form must reproduce the above copyright
12bbaa8b60SDan Kruchinin  *    notice, this list of conditions and the following disclaimer in the
13bbaa8b60SDan Kruchinin  *    documentation and/or other materials provided with the distribution.
14bbaa8b60SDan Kruchinin  *
15bbaa8b60SDan Kruchinin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16bbaa8b60SDan Kruchinin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17bbaa8b60SDan Kruchinin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18bbaa8b60SDan Kruchinin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19bbaa8b60SDan Kruchinin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20bbaa8b60SDan Kruchinin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21bbaa8b60SDan Kruchinin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22bbaa8b60SDan Kruchinin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23bbaa8b60SDan Kruchinin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24bbaa8b60SDan Kruchinin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25bbaa8b60SDan Kruchinin  * SUCH DAMAGE.
26bbaa8b60SDan Kruchinin  */
27bbaa8b60SDan Kruchinin 
28bbaa8b60SDan Kruchinin /*
29*54b3584eSGordon Ross  * Copyright 2019 Nexenta by DDN, Inc. All rights reserved.
30bbaa8b60SDan Kruchinin  * Copyright (c) 2012 by Delphix. All rights reserved.
31bbaa8b60SDan Kruchinin  */
32bbaa8b60SDan Kruchinin 
33bbaa8b60SDan Kruchinin /*
34bbaa8b60SDan Kruchinin  * NFS Lock Manager, RPC service functions (nlm_..._svc)
35bbaa8b60SDan Kruchinin  * Called via nlm_dispatch.c tables.
36bbaa8b60SDan Kruchinin  *
37bbaa8b60SDan Kruchinin  * Source code derived from FreeBSD nlm_prot_server.c
38bbaa8b60SDan Kruchinin  *
39bbaa8b60SDan Kruchinin  * The real service functions all use nlm4_... args and return
40bbaa8b60SDan Kruchinin  * data types.  These wrappers convert older forms to and from
41bbaa8b60SDan Kruchinin  * the new forms and call the nlm_do_... service functions.
42bbaa8b60SDan Kruchinin  */
43bbaa8b60SDan Kruchinin 
44bbaa8b60SDan Kruchinin #include <sys/param.h>
45bbaa8b60SDan Kruchinin #include <sys/systm.h>
46bbaa8b60SDan Kruchinin 
47bbaa8b60SDan Kruchinin #include <rpcsvc/nlm_prot.h>
48bbaa8b60SDan Kruchinin #include "nlm_impl.h"
49bbaa8b60SDan Kruchinin 
50bbaa8b60SDan Kruchinin /*
51bbaa8b60SDan Kruchinin  * Convert between various versions of the protocol structures.
52bbaa8b60SDan Kruchinin  */
53bbaa8b60SDan Kruchinin 
54bbaa8b60SDan Kruchinin /*
55bbaa8b60SDan Kruchinin  * Down-convert, for granted_1 call
56bbaa8b60SDan Kruchinin  *
57bbaa8b60SDan Kruchinin  * This converts a 64-bit lock to 32-bit form for our granted
58bbaa8b60SDan Kruchinin  * call-back when we're dealing with a 32-bit NLM client.
59bbaa8b60SDan Kruchinin  * Our NLM_LOCK handler ensures that any lock we grant to a
60bbaa8b60SDan Kruchinin  * 32-bit client can be represented in 32-bits.  If the
61bbaa8b60SDan Kruchinin  * ASSERTs here fire, then the call to nlm_init_flock in
62bbaa8b60SDan Kruchinin  * nlm_do_lock has failed to restrict a 32-bit client to
63bbaa8b60SDan Kruchinin  * 32-bit lock ranges.
64bbaa8b60SDan Kruchinin  */
65bbaa8b60SDan Kruchinin static void
nlm_convert_to_nlm_lock(struct nlm_lock * dst,const struct nlm4_lock * src)66*54b3584eSGordon Ross nlm_convert_to_nlm_lock(struct nlm_lock *dst, const struct nlm4_lock *src)
67bbaa8b60SDan Kruchinin {
68bbaa8b60SDan Kruchinin 	dst->caller_name = src->caller_name;
69bbaa8b60SDan Kruchinin 	dst->fh = src->fh;
70bbaa8b60SDan Kruchinin 	dst->oh = src->oh;
71bbaa8b60SDan Kruchinin 	dst->svid = src->svid;
72bbaa8b60SDan Kruchinin 	ASSERT(src->l_offset <= MAX_UOFF32);
73bbaa8b60SDan Kruchinin 	dst->l_offset = (uint32_t)src->l_offset;
74bbaa8b60SDan Kruchinin 	ASSERT(src->l_len <= MAX_UOFF32);
75bbaa8b60SDan Kruchinin 	dst->l_len = (uint32_t)src->l_len;
76bbaa8b60SDan Kruchinin }
77bbaa8b60SDan Kruchinin 
78*54b3584eSGordon Ross /*
79*54b3584eSGordon Ross  * Up-convert for v1 granted response
80*54b3584eSGordon Ross  */
81*54b3584eSGordon Ross static void
nlm_convert_to_nlm4_res(struct nlm4_res * dst,const struct nlm_res * src)82*54b3584eSGordon Ross nlm_convert_to_nlm4_res(struct nlm4_res *dst, const struct nlm_res *src)
83*54b3584eSGordon Ross {
84*54b3584eSGordon Ross 	dst->cookie = src->cookie;
85*54b3584eSGordon Ross 	dst->stat.stat = (nlm4_stats) src->stat.stat;
86*54b3584eSGordon Ross }
87*54b3584eSGordon Ross 
88bbaa8b60SDan Kruchinin /*
89bbaa8b60SDan Kruchinin  * Up-convert for v1 svc functions with a 32-bit lock range arg.
90bbaa8b60SDan Kruchinin  * Note that lock range checks (like overflow) are done later,
91bbaa8b60SDan Kruchinin  * in nlm_init_flock().
92bbaa8b60SDan Kruchinin  */
93bbaa8b60SDan Kruchinin static void
nlm_convert_to_nlm4_lock(struct nlm4_lock * dst,const struct nlm_lock * src)94*54b3584eSGordon Ross nlm_convert_to_nlm4_lock(struct nlm4_lock *dst, const struct nlm_lock *src)
95bbaa8b60SDan Kruchinin {
96bbaa8b60SDan Kruchinin 
97bbaa8b60SDan Kruchinin 	dst->caller_name = src->caller_name;
98bbaa8b60SDan Kruchinin 	dst->fh = src->fh;
99bbaa8b60SDan Kruchinin 	dst->oh = src->oh;
100bbaa8b60SDan Kruchinin 	dst->svid = src->svid;
101bbaa8b60SDan Kruchinin 	dst->l_offset = src->l_offset;
102bbaa8b60SDan Kruchinin 	dst->l_len = src->l_len;
103bbaa8b60SDan Kruchinin }
104bbaa8b60SDan Kruchinin 
105bbaa8b60SDan Kruchinin static void
nlm_convert_to_nlm4_share(struct nlm4_share * dst,const struct nlm_share * src)106*54b3584eSGordon Ross nlm_convert_to_nlm4_share(struct nlm4_share *dst, const struct nlm_share *src)
107bbaa8b60SDan Kruchinin {
108bbaa8b60SDan Kruchinin 
109bbaa8b60SDan Kruchinin 	dst->caller_name = src->caller_name;
110bbaa8b60SDan Kruchinin 	dst->fh = src->fh;
111bbaa8b60SDan Kruchinin 	dst->oh = src->oh;
112bbaa8b60SDan Kruchinin 	dst->mode = src->mode;
113bbaa8b60SDan Kruchinin 	dst->access = src->access;
114bbaa8b60SDan Kruchinin }
115bbaa8b60SDan Kruchinin 
116bbaa8b60SDan Kruchinin /*
117bbaa8b60SDan Kruchinin  * Down-convert for v1 NLM_TEST or NLM_TEST_MSG response.
118bbaa8b60SDan Kruchinin  * Note that nlm_do_test is careful to give us lock ranges
119bbaa8b60SDan Kruchinin  * that can be represented with 32-bit values.  If the
120bbaa8b60SDan Kruchinin  * ASSERTs here fire, then the code in nlm_do_test that
121bbaa8b60SDan Kruchinin  * builds an nlm4_holder for a 32-bit client has failed to
122bbaa8b60SDan Kruchinin  * restrict the reported conflicting lock range so it's a
123bbaa8b60SDan Kruchinin  * valid 32-bit lock range.
124bbaa8b60SDan Kruchinin  */
125bbaa8b60SDan Kruchinin static void
nlm_convert_to_nlm_holder(struct nlm_holder * dst,const struct nlm4_holder * src)126*54b3584eSGordon Ross nlm_convert_to_nlm_holder(struct nlm_holder *dst, const struct nlm4_holder *src)
127bbaa8b60SDan Kruchinin {
128bbaa8b60SDan Kruchinin 	dst->exclusive = src->exclusive;
129bbaa8b60SDan Kruchinin 	dst->svid = src->svid;
130bbaa8b60SDan Kruchinin 	dst->oh = src->oh;
131bbaa8b60SDan Kruchinin 	ASSERT(src->l_offset <= MAX_UOFF32);
132bbaa8b60SDan Kruchinin 	dst->l_offset = (uint32_t)src->l_offset;
133bbaa8b60SDan Kruchinin 	ASSERT(src->l_len <= MAX_UOFF32);
134bbaa8b60SDan Kruchinin 	dst->l_len = (uint32_t)src->l_len;
135bbaa8b60SDan Kruchinin }
136bbaa8b60SDan Kruchinin 
137bbaa8b60SDan Kruchinin static enum nlm_stats
nlm_convert_to_nlm_stats(enum nlm4_stats src)138bbaa8b60SDan Kruchinin nlm_convert_to_nlm_stats(enum nlm4_stats src)
139bbaa8b60SDan Kruchinin {
140bbaa8b60SDan Kruchinin 	if (src > nlm4_deadlck)
141bbaa8b60SDan Kruchinin 		return (nlm_denied);
142bbaa8b60SDan Kruchinin 	return ((enum nlm_stats)src);
143bbaa8b60SDan Kruchinin }
144bbaa8b60SDan Kruchinin 
145bbaa8b60SDan Kruchinin static void
nlm_convert_to_nlm_res(struct nlm_res * dst,const struct nlm4_res * src)146*54b3584eSGordon Ross nlm_convert_to_nlm_res(struct nlm_res *dst, const struct nlm4_res *src)
147bbaa8b60SDan Kruchinin {
148bbaa8b60SDan Kruchinin 	dst->cookie = src->cookie;
149bbaa8b60SDan Kruchinin 	dst->stat.stat = nlm_convert_to_nlm_stats(src->stat.stat);
150bbaa8b60SDan Kruchinin }
151bbaa8b60SDan Kruchinin 
152bbaa8b60SDan Kruchinin /* ******************************************************************** */
153bbaa8b60SDan Kruchinin 
154bbaa8b60SDan Kruchinin /*
155bbaa8b60SDan Kruchinin  * Version 1 svc functions
156bbaa8b60SDan Kruchinin  */
157bbaa8b60SDan Kruchinin 
158bbaa8b60SDan Kruchinin bool_t
nlm_test_1_svc(struct nlm_testargs * argp,nlm_testres * resp,struct svc_req * sr)159bbaa8b60SDan Kruchinin nlm_test_1_svc(struct nlm_testargs *argp, nlm_testres *resp,
160bbaa8b60SDan Kruchinin     struct svc_req *sr)
161bbaa8b60SDan Kruchinin {
162bbaa8b60SDan Kruchinin 	nlm4_testargs args4;
163bbaa8b60SDan Kruchinin 	nlm4_testres res4;
164bbaa8b60SDan Kruchinin 
165bbaa8b60SDan Kruchinin 	bzero(&args4, sizeof (args4));
166bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
167bbaa8b60SDan Kruchinin 
168bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
169bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
170bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
171bbaa8b60SDan Kruchinin 
172bbaa8b60SDan Kruchinin 	nlm_do_test(&args4, &res4, sr, NULL);
173bbaa8b60SDan Kruchinin 
174bbaa8b60SDan Kruchinin 	resp->cookie = res4.cookie;
175bbaa8b60SDan Kruchinin 	resp->stat.stat = nlm_convert_to_nlm_stats(res4.stat.stat);
176bbaa8b60SDan Kruchinin 	if (resp->stat.stat == nlm_denied)
177bbaa8b60SDan Kruchinin 		nlm_convert_to_nlm_holder(
178bbaa8b60SDan Kruchinin 		    &resp->stat.nlm_testrply_u.holder,
179bbaa8b60SDan Kruchinin 		    &res4.stat.nlm4_testrply_u.holder);
180bbaa8b60SDan Kruchinin 
181bbaa8b60SDan Kruchinin 	return (TRUE);
182bbaa8b60SDan Kruchinin }
183bbaa8b60SDan Kruchinin 
184bbaa8b60SDan Kruchinin /*
185bbaa8b60SDan Kruchinin  * Callback functions for nlm_lock_1_svc
186bbaa8b60SDan Kruchinin  */
187bbaa8b60SDan Kruchinin static bool_t nlm_lock_1_reply(SVCXPRT *, nlm4_res *);
188*54b3584eSGordon Ross static enum clnt_stat nlm_granted_1_cb(nlm4_testargs *, nlm4_res *, CLIENT *);
189bbaa8b60SDan Kruchinin 
190bbaa8b60SDan Kruchinin bool_t
nlm_lock_1_svc(nlm_lockargs * argp,nlm_res * resp,struct svc_req * sr)191bbaa8b60SDan Kruchinin nlm_lock_1_svc(nlm_lockargs *argp, nlm_res *resp,
192bbaa8b60SDan Kruchinin     struct svc_req *sr)
193bbaa8b60SDan Kruchinin {
194bbaa8b60SDan Kruchinin 	nlm4_lockargs args4;
195bbaa8b60SDan Kruchinin 	nlm4_res res4;
196bbaa8b60SDan Kruchinin 
197bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
198bbaa8b60SDan Kruchinin 
199bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
200bbaa8b60SDan Kruchinin 	args4.block = argp->block;
201bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
202bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
203bbaa8b60SDan Kruchinin 	args4.reclaim = argp->reclaim;
204bbaa8b60SDan Kruchinin 	args4.state = argp->state;
205bbaa8b60SDan Kruchinin 
206bbaa8b60SDan Kruchinin 	/* NLM_LOCK */
207bbaa8b60SDan Kruchinin 	nlm_do_lock(&args4, &res4, sr,
208bbaa8b60SDan Kruchinin 	    nlm_lock_1_reply, NULL,
209bbaa8b60SDan Kruchinin 	    nlm_granted_1_cb);
210bbaa8b60SDan Kruchinin 
211bbaa8b60SDan Kruchinin 	/* for freeresult */
212bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(resp, &res4);
213bbaa8b60SDan Kruchinin 
214bbaa8b60SDan Kruchinin 	/* above does its own reply */
215bbaa8b60SDan Kruchinin 	return (FALSE);
216bbaa8b60SDan Kruchinin }
217bbaa8b60SDan Kruchinin 
218bbaa8b60SDan Kruchinin static bool_t
nlm_lock_1_reply(SVCXPRT * transp,nlm4_res * resp)219bbaa8b60SDan Kruchinin nlm_lock_1_reply(SVCXPRT *transp, nlm4_res *resp)
220bbaa8b60SDan Kruchinin {
221bbaa8b60SDan Kruchinin 	nlm_res res1;
222bbaa8b60SDan Kruchinin 
223bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(&res1, resp);
224bbaa8b60SDan Kruchinin 	return (svc_sendreply(transp, xdr_nlm_res, (char *)&res1));
225bbaa8b60SDan Kruchinin }
226bbaa8b60SDan Kruchinin 
227bbaa8b60SDan Kruchinin static enum clnt_stat
nlm_granted_1_cb(nlm4_testargs * argp,nlm4_res * resp,CLIENT * clnt)228*54b3584eSGordon Ross nlm_granted_1_cb(nlm4_testargs *argp, nlm4_res *resp, CLIENT *clnt)
229bbaa8b60SDan Kruchinin {
230bbaa8b60SDan Kruchinin 	nlm_testargs args1;
231bbaa8b60SDan Kruchinin 	nlm_res res1;
232bbaa8b60SDan Kruchinin 	int rv;
233bbaa8b60SDan Kruchinin 
234bbaa8b60SDan Kruchinin 	bzero(&res1, sizeof (res1));
235bbaa8b60SDan Kruchinin 
236bbaa8b60SDan Kruchinin 	args1.cookie = argp->cookie;
237bbaa8b60SDan Kruchinin 	args1.exclusive = argp->exclusive;
238bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_lock(&args1.alock, &argp->alock);
239bbaa8b60SDan Kruchinin 
240bbaa8b60SDan Kruchinin 	rv = nlm_granted_1(&args1, &res1, clnt);
241bbaa8b60SDan Kruchinin 
242*54b3584eSGordon Ross 	nlm_convert_to_nlm4_res(resp, &res1);
243bbaa8b60SDan Kruchinin 
244bbaa8b60SDan Kruchinin 	return (rv);
245bbaa8b60SDan Kruchinin }
246bbaa8b60SDan Kruchinin 
247bbaa8b60SDan Kruchinin bool_t
nlm_cancel_1_svc(struct nlm_cancargs * argp,nlm_res * resp,struct svc_req * sr)248bbaa8b60SDan Kruchinin nlm_cancel_1_svc(struct nlm_cancargs *argp, nlm_res *resp,
249bbaa8b60SDan Kruchinin     struct svc_req *sr)
250bbaa8b60SDan Kruchinin {
251bbaa8b60SDan Kruchinin 	nlm4_cancargs args4;
252bbaa8b60SDan Kruchinin 	nlm4_res res4;
253bbaa8b60SDan Kruchinin 
254bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
255bbaa8b60SDan Kruchinin 
256bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
257bbaa8b60SDan Kruchinin 	args4.block = argp->block;
258bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
259bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
260bbaa8b60SDan Kruchinin 
261bbaa8b60SDan Kruchinin 	nlm_do_cancel(&args4, &res4, sr, NULL);
262bbaa8b60SDan Kruchinin 
263bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(resp, &res4);
264bbaa8b60SDan Kruchinin 
265bbaa8b60SDan Kruchinin 	return (TRUE);
266bbaa8b60SDan Kruchinin }
267bbaa8b60SDan Kruchinin 
268bbaa8b60SDan Kruchinin bool_t
nlm_unlock_1_svc(struct nlm_unlockargs * argp,nlm_res * resp,struct svc_req * sr)269bbaa8b60SDan Kruchinin nlm_unlock_1_svc(struct nlm_unlockargs *argp, nlm_res *resp,
270bbaa8b60SDan Kruchinin     struct svc_req *sr)
271bbaa8b60SDan Kruchinin {
272bbaa8b60SDan Kruchinin 	nlm4_unlockargs args4;
273bbaa8b60SDan Kruchinin 	nlm4_res res4;
274bbaa8b60SDan Kruchinin 
275bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
276bbaa8b60SDan Kruchinin 
277bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
278bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
279bbaa8b60SDan Kruchinin 
280bbaa8b60SDan Kruchinin 	nlm_do_unlock(&args4, &res4, sr, NULL);
281bbaa8b60SDan Kruchinin 
282bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(resp, &res4);
283bbaa8b60SDan Kruchinin 
284bbaa8b60SDan Kruchinin 	return (TRUE);
285bbaa8b60SDan Kruchinin }
286bbaa8b60SDan Kruchinin 
287bbaa8b60SDan Kruchinin bool_t
nlm_granted_1_svc(struct nlm_testargs * argp,nlm_res * resp,struct svc_req * sr)288bbaa8b60SDan Kruchinin nlm_granted_1_svc(struct nlm_testargs *argp, nlm_res *resp,
289bbaa8b60SDan Kruchinin     struct svc_req *sr)
290bbaa8b60SDan Kruchinin {
291bbaa8b60SDan Kruchinin 	nlm4_testargs args4;
292bbaa8b60SDan Kruchinin 	nlm4_res res4;
293bbaa8b60SDan Kruchinin 
294bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
295bbaa8b60SDan Kruchinin 
296bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
297bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
298bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
299bbaa8b60SDan Kruchinin 
300bbaa8b60SDan Kruchinin 	nlm_do_granted(&args4, &res4, sr, NULL);
301bbaa8b60SDan Kruchinin 
302bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(resp, &res4);
303bbaa8b60SDan Kruchinin 
304bbaa8b60SDan Kruchinin 	return (TRUE);
305bbaa8b60SDan Kruchinin }
306bbaa8b60SDan Kruchinin 
307bbaa8b60SDan Kruchinin /*
308bbaa8b60SDan Kruchinin  * The _msg_ calls get no reply.  Instead, these callers
309bbaa8b60SDan Kruchinin  * expect an RPC call to the corresponding _res function.
310bbaa8b60SDan Kruchinin  * We pass this callback function to nlm_do_test so it will
311bbaa8b60SDan Kruchinin  * use it to do the RPC callback, with the correct res type.
312bbaa8b60SDan Kruchinin  *
313bbaa8b60SDan Kruchinin  * The callback functions have nearly the same arg signature
314bbaa8b60SDan Kruchinin  * as the client call functions so that many of those can be
315bbaa8b60SDan Kruchinin  * optimized to nothing by the compiler.  Also, passing the
316bbaa8b60SDan Kruchinin  * null result arg for these just to reduce warnings.
317bbaa8b60SDan Kruchinin  *
318bbaa8b60SDan Kruchinin  * See similar callbacks for other _msg functions below.
319bbaa8b60SDan Kruchinin  */
320bbaa8b60SDan Kruchinin 
321bbaa8b60SDan Kruchinin static enum clnt_stat nlm_test_res_1_cb(nlm4_testres *, void *, CLIENT *);
322bbaa8b60SDan Kruchinin 
323bbaa8b60SDan Kruchinin bool_t
nlm_test_msg_1_svc(struct nlm_testargs * argp,void * resp,struct svc_req * sr)324bbaa8b60SDan Kruchinin nlm_test_msg_1_svc(struct nlm_testargs *argp, void *resp,
325bbaa8b60SDan Kruchinin     struct svc_req *sr)
326bbaa8b60SDan Kruchinin {
327bbaa8b60SDan Kruchinin 	nlm4_testargs args4;
328bbaa8b60SDan Kruchinin 	nlm4_testres res4;
329bbaa8b60SDan Kruchinin 
330bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
331bbaa8b60SDan Kruchinin 
332bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
333bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
334bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
335bbaa8b60SDan Kruchinin 
336bbaa8b60SDan Kruchinin 	nlm_do_test(&args4, &res4, sr,
337bbaa8b60SDan Kruchinin 	    nlm_test_res_1_cb);
338bbaa8b60SDan Kruchinin 
339bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
340bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_testres, (void *)&res4);
341bbaa8b60SDan Kruchinin 	(void) resp;
342bbaa8b60SDan Kruchinin 
343bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
344bbaa8b60SDan Kruchinin 	return (FALSE);
345bbaa8b60SDan Kruchinin }
346bbaa8b60SDan Kruchinin 
347bbaa8b60SDan Kruchinin static enum clnt_stat
nlm_test_res_1_cb(nlm4_testres * res4,void * null,CLIENT * clnt)348bbaa8b60SDan Kruchinin nlm_test_res_1_cb(nlm4_testres *res4, void *null, CLIENT *clnt)
349bbaa8b60SDan Kruchinin {
350bbaa8b60SDan Kruchinin 	nlm_testres res1;
351bbaa8b60SDan Kruchinin 
352bbaa8b60SDan Kruchinin 	res1.cookie = res4->cookie;
353bbaa8b60SDan Kruchinin 	res1.stat.stat = nlm_convert_to_nlm_stats(res4->stat.stat);
354bbaa8b60SDan Kruchinin 	if (res1.stat.stat == nlm_denied)
355bbaa8b60SDan Kruchinin 		nlm_convert_to_nlm_holder(
356bbaa8b60SDan Kruchinin 		    &res1.stat.nlm_testrply_u.holder,
357bbaa8b60SDan Kruchinin 		    &res4->stat.nlm4_testrply_u.holder);
358bbaa8b60SDan Kruchinin 
359bbaa8b60SDan Kruchinin 	return (nlm_test_res_1(&res1, null, clnt));
360bbaa8b60SDan Kruchinin }
361bbaa8b60SDan Kruchinin 
362bbaa8b60SDan Kruchinin /*
363bbaa8b60SDan Kruchinin  * Callback functions for nlm_lock_msg_1_svc
364bbaa8b60SDan Kruchinin  */
365bbaa8b60SDan Kruchinin static enum clnt_stat nlm_lock_res_1_cb(nlm4_res *, void *, CLIENT *);
366*54b3584eSGordon Ross static enum clnt_stat nlm_granted_msg_1_cb(nlm4_testargs *, nlm4_res *,
367*54b3584eSGordon Ross     CLIENT *);
368bbaa8b60SDan Kruchinin 
369bbaa8b60SDan Kruchinin bool_t
nlm_lock_msg_1_svc(nlm_lockargs * argp,void * resp,struct svc_req * sr)370bbaa8b60SDan Kruchinin nlm_lock_msg_1_svc(nlm_lockargs *argp, void *resp,
371bbaa8b60SDan Kruchinin     struct svc_req *sr)
372bbaa8b60SDan Kruchinin {
373bbaa8b60SDan Kruchinin 	nlm4_lockargs args4;
374bbaa8b60SDan Kruchinin 	nlm4_res res4;
375bbaa8b60SDan Kruchinin 
376bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
377bbaa8b60SDan Kruchinin 
378bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
379bbaa8b60SDan Kruchinin 	args4.block = argp->block;
380bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
381bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
382bbaa8b60SDan Kruchinin 	args4.reclaim = argp->reclaim;
383bbaa8b60SDan Kruchinin 	args4.state = argp->state;
384bbaa8b60SDan Kruchinin 
385bbaa8b60SDan Kruchinin 	/* NLM_LOCK_MSG */
386bbaa8b60SDan Kruchinin 	nlm_do_lock(&args4, &res4, sr,
387bbaa8b60SDan Kruchinin 	    NULL, nlm_lock_res_1_cb,
388bbaa8b60SDan Kruchinin 	    nlm_granted_msg_1_cb);
389bbaa8b60SDan Kruchinin 
390bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
391bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_res, (void *)&res4);
392bbaa8b60SDan Kruchinin 	(void) resp;
393bbaa8b60SDan Kruchinin 
394bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
395bbaa8b60SDan Kruchinin 	return (FALSE);
396bbaa8b60SDan Kruchinin }
397bbaa8b60SDan Kruchinin 
398bbaa8b60SDan Kruchinin static enum clnt_stat
nlm_lock_res_1_cb(nlm4_res * resp,void * null,CLIENT * clnt)399bbaa8b60SDan Kruchinin nlm_lock_res_1_cb(nlm4_res *resp, void *null, CLIENT *clnt)
400bbaa8b60SDan Kruchinin {
401bbaa8b60SDan Kruchinin 	nlm_res res1;
402bbaa8b60SDan Kruchinin 
403bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(&res1, resp);
404bbaa8b60SDan Kruchinin 	return (nlm_lock_res_1(&res1, null, clnt));
405bbaa8b60SDan Kruchinin }
406bbaa8b60SDan Kruchinin 
407bbaa8b60SDan Kruchinin static enum clnt_stat
nlm_granted_msg_1_cb(nlm4_testargs * argp,nlm4_res * resp,CLIENT * clnt)408*54b3584eSGordon Ross nlm_granted_msg_1_cb(nlm4_testargs *argp, nlm4_res *resp, CLIENT *clnt)
409bbaa8b60SDan Kruchinin {
410bbaa8b60SDan Kruchinin 	nlm_testargs args1;
411*54b3584eSGordon Ross 	int rv;
412bbaa8b60SDan Kruchinin 
413bbaa8b60SDan Kruchinin 	args1.cookie = argp->cookie;
414bbaa8b60SDan Kruchinin 	args1.exclusive = argp->exclusive;
415bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_lock(&args1.alock, &argp->alock);
416bbaa8b60SDan Kruchinin 
417*54b3584eSGordon Ross 	rv = nlm_granted_msg_1(&args1, NULL, clnt);
418*54b3584eSGordon Ross 
419*54b3584eSGordon Ross 	/* MSG call doesn't fill in *resp, so do it here. */
420*54b3584eSGordon Ross 	if (rv != RPC_SUCCESS)
421*54b3584eSGordon Ross 		resp->stat.stat = nlm4_failed;
422bbaa8b60SDan Kruchinin 
423*54b3584eSGordon Ross 	return (rv);
424bbaa8b60SDan Kruchinin }
425bbaa8b60SDan Kruchinin 
426bbaa8b60SDan Kruchinin 
427bbaa8b60SDan Kruchinin static enum clnt_stat nlm_cancel_res_1_cb(nlm4_res *, void *, CLIENT *);
428bbaa8b60SDan Kruchinin 
429bbaa8b60SDan Kruchinin bool_t
nlm_cancel_msg_1_svc(struct nlm_cancargs * argp,void * resp,struct svc_req * sr)430bbaa8b60SDan Kruchinin nlm_cancel_msg_1_svc(struct nlm_cancargs *argp, void *resp,
431bbaa8b60SDan Kruchinin     struct svc_req *sr)
432bbaa8b60SDan Kruchinin {
433bbaa8b60SDan Kruchinin 	nlm4_cancargs args4;
434bbaa8b60SDan Kruchinin 	nlm4_res res4;
435bbaa8b60SDan Kruchinin 
436bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
437bbaa8b60SDan Kruchinin 
438bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
439bbaa8b60SDan Kruchinin 	args4.block = argp->block;
440bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
441bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
442bbaa8b60SDan Kruchinin 
443bbaa8b60SDan Kruchinin 	nlm_do_cancel(&args4, &res4, sr,
444bbaa8b60SDan Kruchinin 	    nlm_cancel_res_1_cb);
445bbaa8b60SDan Kruchinin 
446bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
447bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_res, (void *)&res4);
448bbaa8b60SDan Kruchinin 	(void) resp;
449bbaa8b60SDan Kruchinin 
450bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
451bbaa8b60SDan Kruchinin 	return (FALSE);
452bbaa8b60SDan Kruchinin }
453bbaa8b60SDan Kruchinin 
454bbaa8b60SDan Kruchinin static enum clnt_stat
nlm_cancel_res_1_cb(nlm4_res * res4,void * null,CLIENT * clnt)455bbaa8b60SDan Kruchinin nlm_cancel_res_1_cb(nlm4_res *res4, void *null, CLIENT *clnt)
456bbaa8b60SDan Kruchinin {
457bbaa8b60SDan Kruchinin 	nlm_res res1;
458bbaa8b60SDan Kruchinin 
459bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(&res1, res4);
460bbaa8b60SDan Kruchinin 	return (nlm_cancel_res_1(&res1, null, clnt));
461bbaa8b60SDan Kruchinin }
462bbaa8b60SDan Kruchinin 
463bbaa8b60SDan Kruchinin 
464bbaa8b60SDan Kruchinin static enum clnt_stat nlm_unlock_res_1_cb(nlm4_res *, void *, CLIENT *);
465bbaa8b60SDan Kruchinin 
466bbaa8b60SDan Kruchinin bool_t
nlm_unlock_msg_1_svc(struct nlm_unlockargs * argp,void * resp,struct svc_req * sr)467bbaa8b60SDan Kruchinin nlm_unlock_msg_1_svc(struct nlm_unlockargs *argp, void *resp,
468bbaa8b60SDan Kruchinin     struct svc_req *sr)
469bbaa8b60SDan Kruchinin {
470bbaa8b60SDan Kruchinin 	nlm4_unlockargs args4;
471bbaa8b60SDan Kruchinin 	nlm4_res res4;
472bbaa8b60SDan Kruchinin 
473bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
474bbaa8b60SDan Kruchinin 
475bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
476bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
477bbaa8b60SDan Kruchinin 
478bbaa8b60SDan Kruchinin 	nlm_do_unlock(&args4, &res4, sr,
479bbaa8b60SDan Kruchinin 	    nlm_unlock_res_1_cb);
480bbaa8b60SDan Kruchinin 
481bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
482bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_res, (void *)&res4);
483bbaa8b60SDan Kruchinin 	(void) resp;
484bbaa8b60SDan Kruchinin 
485bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
486bbaa8b60SDan Kruchinin 	return (FALSE);
487bbaa8b60SDan Kruchinin }
488bbaa8b60SDan Kruchinin 
489bbaa8b60SDan Kruchinin static enum clnt_stat
nlm_unlock_res_1_cb(nlm4_res * res4,void * null,CLIENT * clnt)490bbaa8b60SDan Kruchinin nlm_unlock_res_1_cb(nlm4_res *res4, void *null, CLIENT *clnt)
491bbaa8b60SDan Kruchinin {
492bbaa8b60SDan Kruchinin 	nlm_res res1;
493bbaa8b60SDan Kruchinin 
494bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(&res1, res4);
495bbaa8b60SDan Kruchinin 	return (nlm_unlock_res_1(&res1, null, clnt));
496bbaa8b60SDan Kruchinin }
497bbaa8b60SDan Kruchinin 
498bbaa8b60SDan Kruchinin 
499bbaa8b60SDan Kruchinin static enum clnt_stat nlm_granted_res_1_cb(nlm4_res *, void *, CLIENT *);
500bbaa8b60SDan Kruchinin 
501bbaa8b60SDan Kruchinin bool_t
nlm_granted_msg_1_svc(struct nlm_testargs * argp,void * resp,struct svc_req * sr)502bbaa8b60SDan Kruchinin nlm_granted_msg_1_svc(struct nlm_testargs *argp, void *resp,
503bbaa8b60SDan Kruchinin     struct svc_req *sr)
504bbaa8b60SDan Kruchinin {
505bbaa8b60SDan Kruchinin 	nlm4_testargs args4;
506bbaa8b60SDan Kruchinin 	nlm4_res res4;
507bbaa8b60SDan Kruchinin 
508bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
509bbaa8b60SDan Kruchinin 
510bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
511bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
512bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
513bbaa8b60SDan Kruchinin 
514bbaa8b60SDan Kruchinin 	nlm_do_granted(&args4, &res4, sr,
515bbaa8b60SDan Kruchinin 	    nlm_granted_res_1_cb);
516bbaa8b60SDan Kruchinin 
517bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
518bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_res, (void *)&res4);
519bbaa8b60SDan Kruchinin 	(void) resp;
520bbaa8b60SDan Kruchinin 
521bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
522bbaa8b60SDan Kruchinin 	return (FALSE);
523bbaa8b60SDan Kruchinin }
524bbaa8b60SDan Kruchinin 
525bbaa8b60SDan Kruchinin static enum clnt_stat
nlm_granted_res_1_cb(nlm4_res * res4,void * null,CLIENT * clnt)526bbaa8b60SDan Kruchinin nlm_granted_res_1_cb(nlm4_res *res4, void *null, CLIENT *clnt)
527bbaa8b60SDan Kruchinin {
528bbaa8b60SDan Kruchinin 	nlm_res res1;
529bbaa8b60SDan Kruchinin 
530bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(&res1, res4);
531bbaa8b60SDan Kruchinin 	return (nlm_granted_res_1(&res1, null, clnt));
532bbaa8b60SDan Kruchinin }
533bbaa8b60SDan Kruchinin 
534bbaa8b60SDan Kruchinin /*
535bbaa8b60SDan Kruchinin  * The _res_ calls get no reply.  These RPC calls are
536bbaa8b60SDan Kruchinin  * "call backs" in response to RPC _msg_ calls.
537bbaa8b60SDan Kruchinin  * We don't care about these responses.
538bbaa8b60SDan Kruchinin  */
539bbaa8b60SDan Kruchinin 
540bbaa8b60SDan Kruchinin /* ARGSUSED */
541bbaa8b60SDan Kruchinin bool_t
nlm_test_res_1_svc(nlm_testres * argp,void * resp,struct svc_req * sr)542bbaa8b60SDan Kruchinin nlm_test_res_1_svc(nlm_testres *argp, void *resp, struct svc_req *sr)
543bbaa8b60SDan Kruchinin {
544bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
545bbaa8b60SDan Kruchinin 	return (FALSE);
546bbaa8b60SDan Kruchinin }
547bbaa8b60SDan Kruchinin 
548bbaa8b60SDan Kruchinin /* ARGSUSED */
549bbaa8b60SDan Kruchinin bool_t
nlm_lock_res_1_svc(nlm_res * argp,void * resp,struct svc_req * sr)550bbaa8b60SDan Kruchinin nlm_lock_res_1_svc(nlm_res *argp, void *resp, struct svc_req *sr)
551bbaa8b60SDan Kruchinin {
552bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
553bbaa8b60SDan Kruchinin 	return (FALSE);
554bbaa8b60SDan Kruchinin }
555bbaa8b60SDan Kruchinin 
556bbaa8b60SDan Kruchinin /* ARGSUSED */
557bbaa8b60SDan Kruchinin bool_t
nlm_cancel_res_1_svc(nlm_res * argp,void * resp,struct svc_req * sr)558bbaa8b60SDan Kruchinin nlm_cancel_res_1_svc(nlm_res *argp, void *resp, struct svc_req *sr)
559bbaa8b60SDan Kruchinin {
560bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
561bbaa8b60SDan Kruchinin 	return (FALSE);
562bbaa8b60SDan Kruchinin }
563bbaa8b60SDan Kruchinin 
564bbaa8b60SDan Kruchinin /* ARGSUSED */
565bbaa8b60SDan Kruchinin bool_t
nlm_unlock_res_1_svc(nlm_res * argp,void * resp,struct svc_req * sr)566bbaa8b60SDan Kruchinin nlm_unlock_res_1_svc(nlm_res *argp, void *resp, struct svc_req *sr)
567bbaa8b60SDan Kruchinin {
568bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
569bbaa8b60SDan Kruchinin 	return (FALSE);
570bbaa8b60SDan Kruchinin }
571bbaa8b60SDan Kruchinin 
572bbaa8b60SDan Kruchinin /* ARGSUSED */
573bbaa8b60SDan Kruchinin bool_t
nlm_granted_res_1_svc(nlm_res * argp,void * resp,struct svc_req * sr)574bbaa8b60SDan Kruchinin nlm_granted_res_1_svc(nlm_res *argp, void *resp, struct svc_req *sr)
575bbaa8b60SDan Kruchinin {
576bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
577bbaa8b60SDan Kruchinin 	return (FALSE);
578bbaa8b60SDan Kruchinin }
579bbaa8b60SDan Kruchinin 
580bbaa8b60SDan Kruchinin /*
581bbaa8b60SDan Kruchinin  * Version 2 svc functions (used by local statd)
582bbaa8b60SDan Kruchinin  */
583bbaa8b60SDan Kruchinin 
584bbaa8b60SDan Kruchinin bool_t
nlm_sm_notify1_2_svc(struct nlm_sm_status * argp,void * resp,struct svc_req * sr)585bbaa8b60SDan Kruchinin nlm_sm_notify1_2_svc(struct nlm_sm_status *argp, void *resp,
586bbaa8b60SDan Kruchinin     struct svc_req *sr)
587bbaa8b60SDan Kruchinin {
588bbaa8b60SDan Kruchinin 	nlm_do_notify1(argp, resp, sr);
589bbaa8b60SDan Kruchinin 	return (TRUE);
590bbaa8b60SDan Kruchinin }
591bbaa8b60SDan Kruchinin 
592bbaa8b60SDan Kruchinin bool_t
nlm_sm_notify2_2_svc(struct nlm_sm_status * argp,void * resp,struct svc_req * sr)593bbaa8b60SDan Kruchinin nlm_sm_notify2_2_svc(struct nlm_sm_status *argp, void *resp,
594bbaa8b60SDan Kruchinin     struct svc_req *sr)
595bbaa8b60SDan Kruchinin {
596bbaa8b60SDan Kruchinin 	nlm_do_notify2(argp, resp, sr);
597bbaa8b60SDan Kruchinin 	return (TRUE);
598bbaa8b60SDan Kruchinin }
599bbaa8b60SDan Kruchinin 
600bbaa8b60SDan Kruchinin /*
601bbaa8b60SDan Kruchinin  * Version 3 svc functions
602bbaa8b60SDan Kruchinin  */
603bbaa8b60SDan Kruchinin 
604bbaa8b60SDan Kruchinin bool_t
nlm_share_3_svc(nlm_shareargs * argp,nlm_shareres * resp,struct svc_req * sr)605bbaa8b60SDan Kruchinin nlm_share_3_svc(nlm_shareargs *argp, nlm_shareres *resp,
606bbaa8b60SDan Kruchinin     struct svc_req *sr)
607bbaa8b60SDan Kruchinin {
608bbaa8b60SDan Kruchinin 	nlm4_shareargs args4;
609bbaa8b60SDan Kruchinin 	nlm4_shareres res4;
610bbaa8b60SDan Kruchinin 
611bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
612bbaa8b60SDan Kruchinin 
613bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
614bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_share(&args4.share, &argp->share);
615bbaa8b60SDan Kruchinin 	args4.reclaim = argp->reclaim;
616bbaa8b60SDan Kruchinin 
617bbaa8b60SDan Kruchinin 	nlm_do_share(&args4, &res4, sr);
618bbaa8b60SDan Kruchinin 
619bbaa8b60SDan Kruchinin 	resp->cookie = res4.cookie;
620bbaa8b60SDan Kruchinin 	resp->stat = nlm_convert_to_nlm_stats(res4.stat);
621bbaa8b60SDan Kruchinin 	resp->sequence = res4.sequence;
622bbaa8b60SDan Kruchinin 
623bbaa8b60SDan Kruchinin 	return (TRUE);
624bbaa8b60SDan Kruchinin }
625bbaa8b60SDan Kruchinin 
626bbaa8b60SDan Kruchinin bool_t
nlm_unshare_3_svc(nlm_shareargs * argp,nlm_shareres * resp,struct svc_req * sr)627bbaa8b60SDan Kruchinin nlm_unshare_3_svc(nlm_shareargs *argp, nlm_shareres *resp,
628bbaa8b60SDan Kruchinin     struct svc_req *sr)
629bbaa8b60SDan Kruchinin {
630bbaa8b60SDan Kruchinin 	nlm4_shareargs args4;
631bbaa8b60SDan Kruchinin 	nlm4_shareres res4;
632bbaa8b60SDan Kruchinin 
633bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
634bbaa8b60SDan Kruchinin 
635bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
636bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_share(&args4.share, &argp->share);
637bbaa8b60SDan Kruchinin 	args4.reclaim = argp->reclaim;
638bbaa8b60SDan Kruchinin 
639bbaa8b60SDan Kruchinin 	nlm_do_unshare(&args4, &res4, sr);
640bbaa8b60SDan Kruchinin 
641bbaa8b60SDan Kruchinin 	resp->cookie = res4.cookie;
642bbaa8b60SDan Kruchinin 	resp->stat = nlm_convert_to_nlm_stats(res4.stat);
643bbaa8b60SDan Kruchinin 	resp->sequence = res4.sequence;
644bbaa8b60SDan Kruchinin 
645bbaa8b60SDan Kruchinin 	return (TRUE);
646bbaa8b60SDan Kruchinin }
647bbaa8b60SDan Kruchinin 
648bbaa8b60SDan Kruchinin bool_t
nlm_nm_lock_3_svc(nlm_lockargs * argp,nlm_res * resp,struct svc_req * sr)649bbaa8b60SDan Kruchinin nlm_nm_lock_3_svc(nlm_lockargs *argp, nlm_res *resp, struct svc_req *sr)
650bbaa8b60SDan Kruchinin {
651bbaa8b60SDan Kruchinin 	nlm4_lockargs args4;
652bbaa8b60SDan Kruchinin 	nlm4_res res4;
653bbaa8b60SDan Kruchinin 
654bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
655bbaa8b60SDan Kruchinin 
656bbaa8b60SDan Kruchinin 	args4.cookie = argp->cookie;
657bbaa8b60SDan Kruchinin 	args4.block = argp->block;
658bbaa8b60SDan Kruchinin 	args4.exclusive = argp->exclusive;
659bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
660bbaa8b60SDan Kruchinin 	args4.reclaim = argp->reclaim;
661bbaa8b60SDan Kruchinin 	args4.state = argp->state;
662bbaa8b60SDan Kruchinin 
663bbaa8b60SDan Kruchinin 	/*
664bbaa8b60SDan Kruchinin 	 * Don't allow blocking for non-monitored (nm_lock) calls.
665bbaa8b60SDan Kruchinin 	 * These clients don't handle any callbacks, including
666bbaa8b60SDan Kruchinin 	 * the granted call we make after a blocking lock.
667bbaa8b60SDan Kruchinin 	 * Same reply callback as nlm_lock_1_svc
668bbaa8b60SDan Kruchinin 	 */
669bbaa8b60SDan Kruchinin 	args4.block = FALSE;
670bbaa8b60SDan Kruchinin 
671bbaa8b60SDan Kruchinin 	/* NLM_NM_LOCK */
672bbaa8b60SDan Kruchinin 	nlm_do_lock(&args4, &res4, sr,
673bbaa8b60SDan Kruchinin 	    nlm_lock_1_reply, NULL,
674bbaa8b60SDan Kruchinin 	    NULL); /* indicates non-monitored */
675bbaa8b60SDan Kruchinin 
676bbaa8b60SDan Kruchinin 	/* for freeresult */
677bbaa8b60SDan Kruchinin 	nlm_convert_to_nlm_res(resp, &res4);
678bbaa8b60SDan Kruchinin 
679bbaa8b60SDan Kruchinin 	/* above does its own reply */
680bbaa8b60SDan Kruchinin 	return (FALSE);
681bbaa8b60SDan Kruchinin }
682bbaa8b60SDan Kruchinin 
683bbaa8b60SDan Kruchinin bool_t
nlm_free_all_3_svc(nlm_notify * argp,void * resp,struct svc_req * sr)684bbaa8b60SDan Kruchinin nlm_free_all_3_svc(nlm_notify *argp, void *resp, struct svc_req *sr)
685bbaa8b60SDan Kruchinin {
686bbaa8b60SDan Kruchinin 	struct nlm4_notify args4;
687bbaa8b60SDan Kruchinin 
688bbaa8b60SDan Kruchinin 	args4.name = argp->name;
689bbaa8b60SDan Kruchinin 	args4.state = argp->state;
690bbaa8b60SDan Kruchinin 
691bbaa8b60SDan Kruchinin 	nlm_do_free_all(&args4, resp, sr);
692bbaa8b60SDan Kruchinin 
693bbaa8b60SDan Kruchinin 	return (TRUE);
694bbaa8b60SDan Kruchinin }
695bbaa8b60SDan Kruchinin 
696bbaa8b60SDan Kruchinin /*
697bbaa8b60SDan Kruchinin  * Version 4 svc functions
698bbaa8b60SDan Kruchinin  */
699bbaa8b60SDan Kruchinin 
700bbaa8b60SDan Kruchinin bool_t
nlm4_test_4_svc(nlm4_testargs * argp,nlm4_testres * resp,struct svc_req * sr)701bbaa8b60SDan Kruchinin nlm4_test_4_svc(nlm4_testargs *argp, nlm4_testres *resp, struct svc_req *sr)
702bbaa8b60SDan Kruchinin {
703bbaa8b60SDan Kruchinin 	nlm_do_test(argp, resp, sr, NULL);
704bbaa8b60SDan Kruchinin 	return (TRUE);
705bbaa8b60SDan Kruchinin }
706bbaa8b60SDan Kruchinin 
707bbaa8b60SDan Kruchinin /*
708bbaa8b60SDan Kruchinin  * Callback functions for nlm4_lock_4_svc
709bbaa8b60SDan Kruchinin  */
710bbaa8b60SDan Kruchinin static bool_t nlm4_lock_4_reply(SVCXPRT *, nlm4_res *);
711bbaa8b60SDan Kruchinin 
712bbaa8b60SDan Kruchinin bool_t
nlm4_lock_4_svc(nlm4_lockargs * argp,nlm4_res * resp,struct svc_req * sr)713bbaa8b60SDan Kruchinin nlm4_lock_4_svc(nlm4_lockargs *argp, nlm4_res *resp,
714bbaa8b60SDan Kruchinin     struct svc_req *sr)
715bbaa8b60SDan Kruchinin {
716bbaa8b60SDan Kruchinin 
717bbaa8b60SDan Kruchinin 	/* NLM4_LOCK */
718bbaa8b60SDan Kruchinin 	nlm_do_lock(argp, resp, sr,
719bbaa8b60SDan Kruchinin 	    nlm4_lock_4_reply, NULL,
720*54b3584eSGordon Ross 	    nlm4_granted_4);
721bbaa8b60SDan Kruchinin 
722bbaa8b60SDan Kruchinin 	/* above does its own reply */
723bbaa8b60SDan Kruchinin 	return (FALSE);
724bbaa8b60SDan Kruchinin }
725bbaa8b60SDan Kruchinin 
726bbaa8b60SDan Kruchinin static bool_t
nlm4_lock_4_reply(SVCXPRT * transp,nlm4_res * resp)727bbaa8b60SDan Kruchinin nlm4_lock_4_reply(SVCXPRT *transp, nlm4_res *resp)
728bbaa8b60SDan Kruchinin {
729bbaa8b60SDan Kruchinin 	return (svc_sendreply(transp, xdr_nlm4_res, (char *)resp));
730bbaa8b60SDan Kruchinin }
731bbaa8b60SDan Kruchinin 
732bbaa8b60SDan Kruchinin bool_t
nlm4_cancel_4_svc(nlm4_cancargs * argp,nlm4_res * resp,struct svc_req * sr)733bbaa8b60SDan Kruchinin nlm4_cancel_4_svc(nlm4_cancargs *argp, nlm4_res *resp, struct svc_req *sr)
734bbaa8b60SDan Kruchinin {
735bbaa8b60SDan Kruchinin 	nlm_do_cancel(argp, resp, sr, NULL);
736bbaa8b60SDan Kruchinin 	return (TRUE);
737bbaa8b60SDan Kruchinin }
738bbaa8b60SDan Kruchinin 
739bbaa8b60SDan Kruchinin bool_t
nlm4_unlock_4_svc(nlm4_unlockargs * argp,nlm4_res * resp,struct svc_req * sr)740bbaa8b60SDan Kruchinin nlm4_unlock_4_svc(nlm4_unlockargs *argp, nlm4_res *resp, struct svc_req *sr)
741bbaa8b60SDan Kruchinin {
742bbaa8b60SDan Kruchinin 	nlm_do_unlock(argp, resp, sr, NULL);
743bbaa8b60SDan Kruchinin 	return (TRUE);
744bbaa8b60SDan Kruchinin }
745bbaa8b60SDan Kruchinin 
746bbaa8b60SDan Kruchinin bool_t
nlm4_granted_4_svc(nlm4_testargs * argp,nlm4_res * resp,struct svc_req * sr)747bbaa8b60SDan Kruchinin nlm4_granted_4_svc(nlm4_testargs *argp, nlm4_res *resp, struct svc_req *sr)
748bbaa8b60SDan Kruchinin {
749bbaa8b60SDan Kruchinin 	nlm_do_granted(argp, resp, sr, NULL);
750bbaa8b60SDan Kruchinin 	return (TRUE);
751bbaa8b60SDan Kruchinin }
752bbaa8b60SDan Kruchinin 
753bbaa8b60SDan Kruchinin bool_t
nlm4_test_msg_4_svc(nlm4_testargs * argp,void * resp,struct svc_req * sr)754bbaa8b60SDan Kruchinin nlm4_test_msg_4_svc(nlm4_testargs *argp, void *resp, struct svc_req *sr)
755bbaa8b60SDan Kruchinin {
756bbaa8b60SDan Kruchinin 	nlm4_testres res4;
757bbaa8b60SDan Kruchinin 
758bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
759bbaa8b60SDan Kruchinin 	nlm_do_test(argp, &res4, sr,
760bbaa8b60SDan Kruchinin 	    nlm4_test_res_4);
761bbaa8b60SDan Kruchinin 
762bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
763bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_testres, (void *)&res4);
764bbaa8b60SDan Kruchinin 	(void) resp;
765bbaa8b60SDan Kruchinin 
766bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
767bbaa8b60SDan Kruchinin 	return (FALSE);
768bbaa8b60SDan Kruchinin }
769bbaa8b60SDan Kruchinin 
770bbaa8b60SDan Kruchinin /*
771bbaa8b60SDan Kruchinin  * Callback functions for nlm4_lock_msg_4_svc
772bbaa8b60SDan Kruchinin  * (using the RPC client stubs directly)
773bbaa8b60SDan Kruchinin  */
774*54b3584eSGordon Ross static enum clnt_stat nlm4_granted_msg_4_cb(nlm4_testargs *, nlm4_res *,
775*54b3584eSGordon Ross     CLIENT *);
776bbaa8b60SDan Kruchinin 
777bbaa8b60SDan Kruchinin bool_t
nlm4_lock_msg_4_svc(nlm4_lockargs * argp,void * resp,struct svc_req * sr)778bbaa8b60SDan Kruchinin nlm4_lock_msg_4_svc(nlm4_lockargs *argp, void *resp,
779bbaa8b60SDan Kruchinin     struct svc_req *sr)
780bbaa8b60SDan Kruchinin {
781bbaa8b60SDan Kruchinin 	nlm4_res res4;
782bbaa8b60SDan Kruchinin 
783bbaa8b60SDan Kruchinin 	/* NLM4_LOCK_MSG */
784bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
785bbaa8b60SDan Kruchinin 	nlm_do_lock(argp, &res4, sr,
786bbaa8b60SDan Kruchinin 	    NULL, nlm4_lock_res_4,
787*54b3584eSGordon Ross 	    nlm4_granted_msg_4_cb);
788bbaa8b60SDan Kruchinin 
789bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
790bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_res, (void *)&res4);
791bbaa8b60SDan Kruchinin 	(void) resp;
792bbaa8b60SDan Kruchinin 
793bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
794bbaa8b60SDan Kruchinin 	return (FALSE);
795bbaa8b60SDan Kruchinin }
796bbaa8b60SDan Kruchinin 
797*54b3584eSGordon Ross static enum clnt_stat
nlm4_granted_msg_4_cb(nlm4_testargs * argp,nlm4_res * resp,CLIENT * clnt)798*54b3584eSGordon Ross nlm4_granted_msg_4_cb(nlm4_testargs *argp, nlm4_res *resp, CLIENT *clnt)
799*54b3584eSGordon Ross {
800*54b3584eSGordon Ross 	int rv;
801*54b3584eSGordon Ross 
802*54b3584eSGordon Ross 	rv = nlm4_granted_msg_4(argp, NULL, clnt);
803*54b3584eSGordon Ross 
804*54b3584eSGordon Ross 	/* MSG call doesn't fill in *resp, so do it here. */
805*54b3584eSGordon Ross 	if (rv != RPC_SUCCESS)
806*54b3584eSGordon Ross 		resp->stat.stat = nlm4_failed;
807*54b3584eSGordon Ross 
808*54b3584eSGordon Ross 	return (rv);
809*54b3584eSGordon Ross }
810*54b3584eSGordon Ross 
811bbaa8b60SDan Kruchinin bool_t
nlm4_cancel_msg_4_svc(nlm4_cancargs * argp,void * resp,struct svc_req * sr)812bbaa8b60SDan Kruchinin nlm4_cancel_msg_4_svc(nlm4_cancargs *argp, void *resp, struct svc_req *sr)
813bbaa8b60SDan Kruchinin {
814bbaa8b60SDan Kruchinin 	nlm4_res res4;
815bbaa8b60SDan Kruchinin 
816bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
817bbaa8b60SDan Kruchinin 	nlm_do_cancel(argp, &res4, sr,
818bbaa8b60SDan Kruchinin 	    nlm4_cancel_res_4);
819bbaa8b60SDan Kruchinin 
820bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
821bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_res, (void *)&res4);
822bbaa8b60SDan Kruchinin 	(void) resp;
823bbaa8b60SDan Kruchinin 
824bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
825bbaa8b60SDan Kruchinin 	return (FALSE);
826bbaa8b60SDan Kruchinin }
827bbaa8b60SDan Kruchinin 
828bbaa8b60SDan Kruchinin bool_t
nlm4_unlock_msg_4_svc(nlm4_unlockargs * argp,void * resp,struct svc_req * sr)829bbaa8b60SDan Kruchinin nlm4_unlock_msg_4_svc(nlm4_unlockargs *argp, void *resp, struct svc_req *sr)
830bbaa8b60SDan Kruchinin {
831bbaa8b60SDan Kruchinin 	nlm4_res res4;
832bbaa8b60SDan Kruchinin 
833bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
834bbaa8b60SDan Kruchinin 	nlm_do_unlock(argp, &res4, sr,
835bbaa8b60SDan Kruchinin 	    nlm4_unlock_res_4);
836bbaa8b60SDan Kruchinin 
837bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
838bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_res, (void *)&res4);
839bbaa8b60SDan Kruchinin 	(void) resp;
840bbaa8b60SDan Kruchinin 
841bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
842bbaa8b60SDan Kruchinin 	return (FALSE);
843bbaa8b60SDan Kruchinin }
844bbaa8b60SDan Kruchinin 
845bbaa8b60SDan Kruchinin bool_t
nlm4_granted_msg_4_svc(nlm4_testargs * argp,void * resp,struct svc_req * sr)846bbaa8b60SDan Kruchinin nlm4_granted_msg_4_svc(nlm4_testargs *argp, void *resp, struct svc_req *sr)
847bbaa8b60SDan Kruchinin {
848bbaa8b60SDan Kruchinin 	nlm4_res res4;
849bbaa8b60SDan Kruchinin 
850bbaa8b60SDan Kruchinin 	bzero(&res4, sizeof (res4));
851bbaa8b60SDan Kruchinin 	nlm_do_granted(argp, &res4, sr,
852bbaa8b60SDan Kruchinin 	    nlm4_granted_res_4);
853bbaa8b60SDan Kruchinin 
854bbaa8b60SDan Kruchinin 	/* NB: We have a result our caller will not free. */
855bbaa8b60SDan Kruchinin 	xdr_free((xdrproc_t)xdr_nlm4_res, (void *)&res4);
856bbaa8b60SDan Kruchinin 	(void) resp;
857bbaa8b60SDan Kruchinin 
858bbaa8b60SDan Kruchinin 	/* The _msg_ calls get no reply. */
859bbaa8b60SDan Kruchinin 	return (FALSE);
860bbaa8b60SDan Kruchinin }
861bbaa8b60SDan Kruchinin 
862bbaa8b60SDan Kruchinin /* ARGSUSED */
863bbaa8b60SDan Kruchinin bool_t
nlm4_test_res_4_svc(nlm4_testres * argp,void * resp,struct svc_req * sr)864bbaa8b60SDan Kruchinin nlm4_test_res_4_svc(nlm4_testres *argp, void *resp, struct svc_req *sr)
865bbaa8b60SDan Kruchinin {
866bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
867bbaa8b60SDan Kruchinin 	return (FALSE);
868bbaa8b60SDan Kruchinin }
869bbaa8b60SDan Kruchinin 
870bbaa8b60SDan Kruchinin /* ARGSUSED */
871bbaa8b60SDan Kruchinin bool_t
nlm4_lock_res_4_svc(nlm4_res * argp,void * resp,struct svc_req * sr)872bbaa8b60SDan Kruchinin nlm4_lock_res_4_svc(nlm4_res *argp, void *resp, struct svc_req *sr)
873bbaa8b60SDan Kruchinin {
874bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
875bbaa8b60SDan Kruchinin 	return (FALSE);
876bbaa8b60SDan Kruchinin }
877bbaa8b60SDan Kruchinin 
878bbaa8b60SDan Kruchinin /* ARGSUSED */
879bbaa8b60SDan Kruchinin bool_t
nlm4_cancel_res_4_svc(nlm4_res * argp,void * resp,struct svc_req * sr)880bbaa8b60SDan Kruchinin nlm4_cancel_res_4_svc(nlm4_res *argp, void *resp, struct svc_req *sr)
881bbaa8b60SDan Kruchinin {
882bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
883bbaa8b60SDan Kruchinin 	return (FALSE);
884bbaa8b60SDan Kruchinin }
885bbaa8b60SDan Kruchinin 
886bbaa8b60SDan Kruchinin /* ARGSUSED */
887bbaa8b60SDan Kruchinin bool_t
nlm4_unlock_res_4_svc(nlm4_res * argp,void * resp,struct svc_req * sr)888bbaa8b60SDan Kruchinin nlm4_unlock_res_4_svc(nlm4_res *argp, void *resp, struct svc_req *sr)
889bbaa8b60SDan Kruchinin {
890bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
891bbaa8b60SDan Kruchinin 	return (FALSE);
892bbaa8b60SDan Kruchinin }
893bbaa8b60SDan Kruchinin 
894bbaa8b60SDan Kruchinin /* ARGSUSED */
895bbaa8b60SDan Kruchinin bool_t
nlm4_granted_res_4_svc(nlm4_res * argp,void * resp,struct svc_req * sr)896bbaa8b60SDan Kruchinin nlm4_granted_res_4_svc(nlm4_res *argp, void *resp, struct svc_req *sr)
897bbaa8b60SDan Kruchinin {
898bbaa8b60SDan Kruchinin 	/* The _res_ calls get no reply. */
899bbaa8b60SDan Kruchinin 	return (FALSE);
900bbaa8b60SDan Kruchinin }
901bbaa8b60SDan Kruchinin 
902bbaa8b60SDan Kruchinin /* ARGSUSED */
903bbaa8b60SDan Kruchinin bool_t
nlm4_share_4_svc(nlm4_shareargs * argp,nlm4_shareres * resp,struct svc_req * sr)904bbaa8b60SDan Kruchinin nlm4_share_4_svc(nlm4_shareargs *argp, nlm4_shareres *resp,
905bbaa8b60SDan Kruchinin     struct svc_req *sr)
906bbaa8b60SDan Kruchinin {
907bbaa8b60SDan Kruchinin 	nlm_do_share(argp, resp, sr);
908bbaa8b60SDan Kruchinin 	return (TRUE);
909bbaa8b60SDan Kruchinin }
910bbaa8b60SDan Kruchinin 
911bbaa8b60SDan Kruchinin /* ARGSUSED */
912bbaa8b60SDan Kruchinin bool_t
nlm4_unshare_4_svc(nlm4_shareargs * argp,nlm4_shareres * resp,struct svc_req * sr)913bbaa8b60SDan Kruchinin nlm4_unshare_4_svc(nlm4_shareargs *argp, nlm4_shareres *resp,
914bbaa8b60SDan Kruchinin     struct svc_req *sr)
915bbaa8b60SDan Kruchinin {
916bbaa8b60SDan Kruchinin 	nlm_do_unshare(argp, resp, sr);
917bbaa8b60SDan Kruchinin 	return (TRUE);
918bbaa8b60SDan Kruchinin }
919bbaa8b60SDan Kruchinin 
920bbaa8b60SDan Kruchinin bool_t
nlm4_nm_lock_4_svc(nlm4_lockargs * argp,nlm4_res * resp,struct svc_req * sr)921bbaa8b60SDan Kruchinin nlm4_nm_lock_4_svc(nlm4_lockargs *argp, nlm4_res *resp, struct svc_req *sr)
922bbaa8b60SDan Kruchinin {
923bbaa8b60SDan Kruchinin 
924bbaa8b60SDan Kruchinin 	/*
925bbaa8b60SDan Kruchinin 	 * Don't allow blocking for non-monitored (nm_lock) calls.
926bbaa8b60SDan Kruchinin 	 * These clients don't handle any callbacks, including
927bbaa8b60SDan Kruchinin 	 * the granted call we make after a blocking lock.
928bbaa8b60SDan Kruchinin 	 * Same reply callback as nlm4_lock_4_svc
929bbaa8b60SDan Kruchinin 	 */
930bbaa8b60SDan Kruchinin 	argp->block = FALSE;
931bbaa8b60SDan Kruchinin 
932bbaa8b60SDan Kruchinin 	/* NLM4_NM_LOCK */
933bbaa8b60SDan Kruchinin 	nlm_do_lock(argp, resp, sr,
934bbaa8b60SDan Kruchinin 	    nlm4_lock_4_reply, NULL,
935bbaa8b60SDan Kruchinin 	    NULL); /* indicates non-monitored */
936bbaa8b60SDan Kruchinin 
937bbaa8b60SDan Kruchinin 	/* above does its own reply */
938bbaa8b60SDan Kruchinin 	return (FALSE);
939bbaa8b60SDan Kruchinin }
940bbaa8b60SDan Kruchinin 
941bbaa8b60SDan Kruchinin bool_t
nlm4_free_all_4_svc(nlm4_notify * argp,void * resp,struct svc_req * sr)942bbaa8b60SDan Kruchinin nlm4_free_all_4_svc(nlm4_notify *argp, void *resp, struct svc_req *sr)
943bbaa8b60SDan Kruchinin {
944bbaa8b60SDan Kruchinin 	nlm_do_free_all(argp, resp, sr);
945bbaa8b60SDan Kruchinin 	return (TRUE);
946bbaa8b60SDan Kruchinin }
947