Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192/* SPDX-License-Identifier: GPL-2.0 *//* * linux/include/linux/lockd/bind.h * * This is the part of lockd visible to nfsd and the nfs client. * * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de> */
#ifndef LINUX_LOCKD_BIND_H#define LINUX_LOCKD_BIND_H
struct file_lock;struct nfs_fh;struct svc_rqst;struct rpc_task;struct rpc_clnt;struct super_block;struct module;
/** * struct nlmsvc_binding - lockd -> nfsd callback table * @owner: module that provides this binding. * @fopen: open a file by NFS file handle on behalf of an NLM request. * @fclose: close a file that was previously opened via @fopen. * Implementations MUST be semantically equivalent to fput(). */struct nlmsvc_binding { struct module *owner; int (*fopen)(struct svc_rqst *rqstp, struct nfs_fh *f, struct file **filp, int flags); void (*fclose)(struct file *filp);};
extern const struct nlmsvc_binding __rcu *nlmsvc_ops;
/* * Similar to nfs_client_initdata, but without the NFS-specific * rpc_ops field. */struct nlmclnt_initdata { const char *hostname; const struct sockaddr *address; size_t addrlen; unsigned short protocol; u32 nfs_version; int noresvport; struct net *net; const struct nlmclnt_operations *nlmclnt_ops; const struct cred *cred;};
/* * Functions exported by the lockd module */
extern struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init);extern void nlmclnt_done(struct nlm_host *host);extern struct rpc_clnt *nlmclnt_rpc_clnt(struct nlm_host *host);extern void nlmclnt_shutdown_rpc_clnt(struct nlm_host *host);
/* * NLM client operations provide a means to modify RPC processing of NLM * requests. Callbacks receive a pointer to data passed into the call to * nlmclnt_proc(). */struct nlmclnt_operations { /* Called on successful allocation of nlm_rqst, use for allocation or * reference counting. */ void (*nlmclnt_alloc_call)(void *);
/* Called in rpc_task_prepare for unlock. A return value of true * indicates the callback has put the task to sleep on a waitqueue * and NLM should not call rpc_call_start(). */ bool (*nlmclnt_unlock_prepare)(struct rpc_task*, void *);
/* Called when the nlm_rqst is freed, callbacks should clean up here */ void (*nlmclnt_release_call)(void *);};
extern int nlmclnt_proc(struct nlm_host *host, int cmd, struct file_lock *fl, void *data);extern int lockd_up(struct net *net, const struct cred *cred);extern void lockd_down(struct net *net);
/* * Cluster failover support */int nlmsvc_unlock_all_by_sb(struct super_block *sb);int nlmsvc_unlock_all_by_ip(struct sockaddr *server_addr);
#endif /* LINUX_LOCKD_BIND_H */