klmops.c revision 5cd496e3c5514951ae23bdd897cb29b202e2ff62
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * This file and its contents are supplied under the terms of the
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Common Development and Distribution License ("CDDL"), version 1.0.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * You may only use this file in accordance with the terms of version
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * 1.0 of the CDDL.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin *
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * A full copy of the text of the CDDL should have accompanied this
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * source. A copy is of the CDDL is also available via the Internet
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * at http://www.illumos.org/license/CDDL.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * NFS Lock Manager, client-side
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Note: depends on (links with) klmmod
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin *
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * This file contains all the external entry points of klmops.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Basically, this is the "glue" to the BSD nlm code.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin#include <sys/types.h>
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin#include <sys/errno.h>
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin#include <sys/modctl.h>
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin#include <sys/flock.h>
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin#include <nfs/lm.h>
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin#include <rpcsvc/nlm_prot.h>
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin#include "nlm_impl.h"
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininstatic struct modlmisc modlmisc = {
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin &mod_miscops, "lock mgr calls"
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin};
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininstatic struct modlinkage modlinkage = {
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin MODREV_1, &modlmisc, NULL
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin};
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * ****************************************************************
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * module init, fini, info
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininint
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin_init()
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin return (mod_install(&modlinkage));
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininint
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin_fini()
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin /* Don't unload. */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin return (EBUSY);
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininint
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin_info(struct modinfo *modinfop)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin return (mod_info(&modlinkage, modinfop));
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * ****************************************************************
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Stubs listed in modstubs.s
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * These are called from fs/nfs
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * NFSv2 lock/unlock. Called by nfs_frlock()
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Uses NLM version 1 (NLM_VERS)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininint
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm_frlock(struct vnode *vp, int cmd, struct flock64 *flk, int flags,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin u_offset_t off, struct cred *cr, struct netobj *fh,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin struct flk_callback *flcb)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin return (nlm_frlock(vp, cmd, flk, flags, off,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin cr, fh, flcb, NLM_VERS));
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * NFSv3 lock/unlock. Called by nfs3_frlock()
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Uses NLM version 4 (NLM4_VERS)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininint
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm4_frlock(struct vnode *vp, int cmd, struct flock64 *flk, int flags,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin u_offset_t off, struct cred *cr, struct netobj *fh,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin struct flk_callback *flcb)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin int err;
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin err = nlm_frlock(vp, cmd, flk, flags, off,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin cr, fh, flcb, NLM4_VERS);
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin return (err);
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * NFSv2 shrlk/unshrlk. See nfs_shrlock
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Uses NLM version 3 (NLM_VERSX)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininint
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm_shrlock(struct vnode *vp, int cmd,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin struct shrlock *shr, int flags, struct netobj *fh)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin return (nlm_shrlock(vp, cmd, shr, flags, fh, NLM_VERSX));
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * NFSv3 shrlk/unshrlk. See nfs3_shrlock
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Uses NLM version 4 (NLM4_VERS)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininint
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm4_shrlock(struct vnode *vp, int cmd,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin struct shrlock *shr, int flags, struct netobj *fh)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin return (nlm_shrlock(vp, cmd, shr, flags, fh, NLM4_VERS));
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
5cd496e3c5514951ae23bdd897cb29b202e2ff62Bryan Cantrill * Helper for nfs_lockrelease.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininvoid
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm_register_lock_locally(struct vnode *vp, struct lm_sysid *ls,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin struct flock64 *flk, int flags, u_offset_t offset)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin nlm_register_lock_locally(vp, (struct nlm_host *)ls,
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin flk, flags, offset);
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Old RPC service dispatch functions, no longer used.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Here only to satisfy modstubs.s references.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininvoid
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm_nlm_dispatch(struct svc_req *req, SVCXPRT *xprt)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin _NOTE(ARGUNUSED(req, xprt))
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininvoid
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm_nlm4_dispatch(struct svc_req *req, SVCXPRT *xprt)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin _NOTE(ARGUNUSED(req, xprt))
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin/*
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * Old internal functions used for reclaiming locks
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * our NFS client holds after some server restarts.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * The new NLM code does this differently, so these
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin * are here only to satisfy modstubs.s references.
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin */
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininvoid
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm_nlm_reclaim(struct vnode *vp, struct flock64 *flkp)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin _NOTE(ARGUNUSED(vp, flkp))
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininvoid
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchininlm_nlm4_reclaim(struct vnode *vp, struct flock64 *flkp)
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin{
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin _NOTE(ARGUNUSED(vp, flkp))
bbaa8b60dd95d714741fc474adad3cf710ef4efdDan Kruchinin}