xref: /titanic_52/usr/src/uts/common/klm/klmops.c (revision bbaa8b60dd95d714741fc474adad3cf710ef4efd)
1*bbaa8b60SDan Kruchinin /*
2*bbaa8b60SDan Kruchinin  * This file and its contents are supplied under the terms of the
3*bbaa8b60SDan Kruchinin  * Common Development and Distribution License ("CDDL"), version 1.0.
4*bbaa8b60SDan Kruchinin  * You may only use this file in accordance with the terms of version
5*bbaa8b60SDan Kruchinin  * 1.0 of the CDDL.
6*bbaa8b60SDan Kruchinin  *
7*bbaa8b60SDan Kruchinin  * A full copy of the text of the CDDL should have accompanied this
8*bbaa8b60SDan Kruchinin  * source.  A copy is of the CDDL is also available via the Internet
9*bbaa8b60SDan Kruchinin  * at http://www.illumos.org/license/CDDL.
10*bbaa8b60SDan Kruchinin  */
11*bbaa8b60SDan Kruchinin 
12*bbaa8b60SDan Kruchinin /*
13*bbaa8b60SDan Kruchinin  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
14*bbaa8b60SDan Kruchinin  */
15*bbaa8b60SDan Kruchinin 
16*bbaa8b60SDan Kruchinin /*
17*bbaa8b60SDan Kruchinin  * NFS Lock Manager, client-side
18*bbaa8b60SDan Kruchinin  * Note: depends on (links with) klmmod
19*bbaa8b60SDan Kruchinin  *
20*bbaa8b60SDan Kruchinin  * This file contains all the external entry points of klmops.
21*bbaa8b60SDan Kruchinin  * Basically, this is the "glue" to the BSD nlm code.
22*bbaa8b60SDan Kruchinin  */
23*bbaa8b60SDan Kruchinin 
24*bbaa8b60SDan Kruchinin #include <sys/types.h>
25*bbaa8b60SDan Kruchinin #include <sys/errno.h>
26*bbaa8b60SDan Kruchinin #include <sys/modctl.h>
27*bbaa8b60SDan Kruchinin #include <sys/flock.h>
28*bbaa8b60SDan Kruchinin 
29*bbaa8b60SDan Kruchinin #include <nfs/lm.h>
30*bbaa8b60SDan Kruchinin #include <rpcsvc/nlm_prot.h>
31*bbaa8b60SDan Kruchinin #include "nlm_impl.h"
32*bbaa8b60SDan Kruchinin 
33*bbaa8b60SDan Kruchinin 
34*bbaa8b60SDan Kruchinin static struct modlmisc modlmisc = {
35*bbaa8b60SDan Kruchinin 	&mod_miscops, "lock mgr calls"
36*bbaa8b60SDan Kruchinin };
37*bbaa8b60SDan Kruchinin 
38*bbaa8b60SDan Kruchinin static struct modlinkage modlinkage = {
39*bbaa8b60SDan Kruchinin 	MODREV_1, &modlmisc, NULL
40*bbaa8b60SDan Kruchinin };
41*bbaa8b60SDan Kruchinin 
42*bbaa8b60SDan Kruchinin 
43*bbaa8b60SDan Kruchinin 
44*bbaa8b60SDan Kruchinin /*
45*bbaa8b60SDan Kruchinin  * ****************************************************************
46*bbaa8b60SDan Kruchinin  * module init, fini, info
47*bbaa8b60SDan Kruchinin  */
48*bbaa8b60SDan Kruchinin int
49*bbaa8b60SDan Kruchinin _init()
50*bbaa8b60SDan Kruchinin {
51*bbaa8b60SDan Kruchinin 	return (mod_install(&modlinkage));
52*bbaa8b60SDan Kruchinin }
53*bbaa8b60SDan Kruchinin 
54*bbaa8b60SDan Kruchinin int
55*bbaa8b60SDan Kruchinin _fini()
56*bbaa8b60SDan Kruchinin {
57*bbaa8b60SDan Kruchinin 	/* Don't unload. */
58*bbaa8b60SDan Kruchinin 	return (EBUSY);
59*bbaa8b60SDan Kruchinin }
60*bbaa8b60SDan Kruchinin 
61*bbaa8b60SDan Kruchinin int
62*bbaa8b60SDan Kruchinin _info(struct modinfo *modinfop)
63*bbaa8b60SDan Kruchinin {
64*bbaa8b60SDan Kruchinin 	return (mod_info(&modlinkage, modinfop));
65*bbaa8b60SDan Kruchinin }
66*bbaa8b60SDan Kruchinin 
67*bbaa8b60SDan Kruchinin 
68*bbaa8b60SDan Kruchinin 
69*bbaa8b60SDan Kruchinin /*
70*bbaa8b60SDan Kruchinin  * ****************************************************************
71*bbaa8b60SDan Kruchinin  * Stubs listed in modstubs.s
72*bbaa8b60SDan Kruchinin  * These are called from fs/nfs
73*bbaa8b60SDan Kruchinin  */
74*bbaa8b60SDan Kruchinin 
75*bbaa8b60SDan Kruchinin /*
76*bbaa8b60SDan Kruchinin  * NFSv2 lock/unlock.  Called by nfs_frlock()
77*bbaa8b60SDan Kruchinin  * Uses NLM version 1 (NLM_VERS)
78*bbaa8b60SDan Kruchinin  */
79*bbaa8b60SDan Kruchinin int
80*bbaa8b60SDan Kruchinin lm_frlock(struct vnode *vp, int cmd, struct flock64 *flk, int flags,
81*bbaa8b60SDan Kruchinin     u_offset_t off, struct cred *cr, struct netobj *fh,
82*bbaa8b60SDan Kruchinin     struct flk_callback *flcb)
83*bbaa8b60SDan Kruchinin {
84*bbaa8b60SDan Kruchinin 	return (nlm_frlock(vp, cmd, flk, flags, off,
85*bbaa8b60SDan Kruchinin 	    cr, fh, flcb, NLM_VERS));
86*bbaa8b60SDan Kruchinin }
87*bbaa8b60SDan Kruchinin 
88*bbaa8b60SDan Kruchinin /*
89*bbaa8b60SDan Kruchinin  * NFSv3 lock/unlock.  Called by nfs3_frlock()
90*bbaa8b60SDan Kruchinin  * Uses NLM version 4 (NLM4_VERS)
91*bbaa8b60SDan Kruchinin  */
92*bbaa8b60SDan Kruchinin int
93*bbaa8b60SDan Kruchinin lm4_frlock(struct vnode *vp, int cmd, struct flock64 *flk, int flags,
94*bbaa8b60SDan Kruchinin 	u_offset_t off, struct cred *cr, struct netobj *fh,
95*bbaa8b60SDan Kruchinin 	struct flk_callback *flcb)
96*bbaa8b60SDan Kruchinin {
97*bbaa8b60SDan Kruchinin 	int err;
98*bbaa8b60SDan Kruchinin 	err = nlm_frlock(vp, cmd, flk, flags, off,
99*bbaa8b60SDan Kruchinin 	    cr, fh, flcb, NLM4_VERS);
100*bbaa8b60SDan Kruchinin 	return (err);
101*bbaa8b60SDan Kruchinin }
102*bbaa8b60SDan Kruchinin 
103*bbaa8b60SDan Kruchinin /*
104*bbaa8b60SDan Kruchinin  * NFSv2 shrlk/unshrlk.  See nfs_shrlock
105*bbaa8b60SDan Kruchinin  * Uses NLM version 3 (NLM_VERSX)
106*bbaa8b60SDan Kruchinin  */
107*bbaa8b60SDan Kruchinin int
108*bbaa8b60SDan Kruchinin lm_shrlock(struct vnode *vp, int cmd,
109*bbaa8b60SDan Kruchinin     struct shrlock *shr, int flags, struct netobj *fh)
110*bbaa8b60SDan Kruchinin {
111*bbaa8b60SDan Kruchinin 	return (nlm_shrlock(vp, cmd, shr, flags, fh, NLM_VERSX));
112*bbaa8b60SDan Kruchinin }
113*bbaa8b60SDan Kruchinin 
114*bbaa8b60SDan Kruchinin /*
115*bbaa8b60SDan Kruchinin  * NFSv3 shrlk/unshrlk.  See nfs3_shrlock
116*bbaa8b60SDan Kruchinin  * Uses NLM version 4 (NLM4_VERS)
117*bbaa8b60SDan Kruchinin  */
118*bbaa8b60SDan Kruchinin int
119*bbaa8b60SDan Kruchinin lm4_shrlock(struct vnode *vp, int cmd,
120*bbaa8b60SDan Kruchinin     struct shrlock *shr, int flags, struct netobj *fh)
121*bbaa8b60SDan Kruchinin {
122*bbaa8b60SDan Kruchinin 	return (nlm_shrlock(vp, cmd, shr, flags, fh, NLM4_VERS));
123*bbaa8b60SDan Kruchinin }
124*bbaa8b60SDan Kruchinin 
125*bbaa8b60SDan Kruchinin /*
126*bbaa8b60SDan Kruchinin  * Helper for lm_frlock, lm4_frlock, nfs_lockrelease
127*bbaa8b60SDan Kruchinin  * After getting a lock from a remote lock manager,
128*bbaa8b60SDan Kruchinin  * register the lock locally.
129*bbaa8b60SDan Kruchinin  */
130*bbaa8b60SDan Kruchinin void
131*bbaa8b60SDan Kruchinin lm_register_lock_locally(struct vnode *vp, struct lm_sysid *ls,
132*bbaa8b60SDan Kruchinin     struct flock64 *flk, int flags, u_offset_t offset)
133*bbaa8b60SDan Kruchinin {
134*bbaa8b60SDan Kruchinin 	nlm_register_lock_locally(vp, (struct nlm_host *)ls,
135*bbaa8b60SDan Kruchinin 	    flk, flags, offset);
136*bbaa8b60SDan Kruchinin }
137*bbaa8b60SDan Kruchinin 
138*bbaa8b60SDan Kruchinin /*
139*bbaa8b60SDan Kruchinin  * Old RPC service dispatch functions, no longer used.
140*bbaa8b60SDan Kruchinin  * Here only to satisfy modstubs.s references.
141*bbaa8b60SDan Kruchinin  */
142*bbaa8b60SDan Kruchinin void
143*bbaa8b60SDan Kruchinin lm_nlm_dispatch(struct svc_req *req, SVCXPRT *xprt)
144*bbaa8b60SDan Kruchinin {
145*bbaa8b60SDan Kruchinin 	_NOTE(ARGUNUSED(req, xprt))
146*bbaa8b60SDan Kruchinin }
147*bbaa8b60SDan Kruchinin 
148*bbaa8b60SDan Kruchinin void
149*bbaa8b60SDan Kruchinin lm_nlm4_dispatch(struct svc_req *req, SVCXPRT *xprt)
150*bbaa8b60SDan Kruchinin {
151*bbaa8b60SDan Kruchinin 	_NOTE(ARGUNUSED(req, xprt))
152*bbaa8b60SDan Kruchinin }
153*bbaa8b60SDan Kruchinin 
154*bbaa8b60SDan Kruchinin /*
155*bbaa8b60SDan Kruchinin  * Old internal functions used for reclaiming locks
156*bbaa8b60SDan Kruchinin  * our NFS client holds after some server restarts.
157*bbaa8b60SDan Kruchinin  * The new NLM code does this differently, so these
158*bbaa8b60SDan Kruchinin  * are here only to satisfy modstubs.s references.
159*bbaa8b60SDan Kruchinin  */
160*bbaa8b60SDan Kruchinin void
161*bbaa8b60SDan Kruchinin lm_nlm_reclaim(struct vnode *vp, struct flock64 *flkp)
162*bbaa8b60SDan Kruchinin {
163*bbaa8b60SDan Kruchinin 	_NOTE(ARGUNUSED(vp, flkp))
164*bbaa8b60SDan Kruchinin }
165*bbaa8b60SDan Kruchinin 
166*bbaa8b60SDan Kruchinin void
167*bbaa8b60SDan Kruchinin lm_nlm4_reclaim(struct vnode *vp, struct flock64 *flkp)
168*bbaa8b60SDan Kruchinin {
169*bbaa8b60SDan Kruchinin 	_NOTE(ARGUNUSED(vp, flkp))
170*bbaa8b60SDan Kruchinin }
171