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