/* SPDX-License-Identifier: GPL-2.0 */ /* * Entry points by which the knfsd core drives the optional NFSv4 * subsystem: state lifecycle, the laundromat workqueue, the recovery * directory, junctions, the CLD notifier, and leases-net setup. * * Separated from nfsd.h so that the many translation units that * include nfsd.h but call none of these -- among them the NFSv2 and * NFSv3 paths -- do not have to parse them. The CONFIG_NFSD_V4=n * stubs let the version-agnostic callers invoke the routines * unconditionally. */ #ifndef LINUX_NFSD_NFS4CTL_H #define LINUX_NFSD_NFS4CTL_H #include #include struct net; struct inode; struct dentry; struct svc_rqst; struct nfsd_net; #ifdef CONFIG_NFSD_V4 extern unsigned long max_delegations; int nfsd4_init_slabs(void); void nfsd4_free_slabs(void); int nfs4_state_start(void); int nfs4_state_start_net(struct net *net); void nfs4_state_shutdown(void); void nfs4_state_shutdown_net(struct net *net); int nfs4_reset_recoverydir(char *recdir); char * nfs4_recoverydir(void); bool nfsd4_spo_must_allow(struct svc_rqst *rqstp); int nfsd4_create_laundry_wq(void); void nfsd4_destroy_laundry_wq(void); bool nfsd_wait_for_delegreturn(struct svc_rqst *rqstp, struct inode *inode); extern int nfsd4_is_junction(struct dentry *dentry); extern int register_cld_notifier(void); extern void unregister_cld_notifier(void); #ifdef CONFIG_NFSD_V4_2_INTER_SSC extern void nfsd4_ssc_init_umount_work(struct nfsd_net *nn); #endif extern void nfsd4_init_leases_net(struct nfsd_net *nn); #else /* CONFIG_NFSD_V4 */ static inline int nfsd4_init_slabs(void) { return 0; } static inline void nfsd4_free_slabs(void) { } static inline int nfs4_state_start(void) { return 0; } static inline int nfs4_state_start_net(struct net *net) { return 0; } static inline void nfs4_state_shutdown(void) { } static inline void nfs4_state_shutdown_net(struct net *net) { } static inline int nfs4_reset_recoverydir(char *recdir) { return 0; } static inline char * nfs4_recoverydir(void) {return NULL; } static inline bool nfsd4_spo_must_allow(struct svc_rqst *rqstp) { return false; } static inline int nfsd4_create_laundry_wq(void) { return 0; }; static inline void nfsd4_destroy_laundry_wq(void) {}; static inline bool nfsd_wait_for_delegreturn(struct svc_rqst *rqstp, struct inode *inode) { return false; } static inline int nfsd4_is_junction(struct dentry *dentry) { return 0; } static inline void nfsd4_init_leases_net(struct nfsd_net *nn) { }; #define register_cld_notifier() 0 #define unregister_cld_notifier() do { } while(0) #endif /* CONFIG_NFSD_V4 */ #endif /* LINUX_NFSD_NFS4CTL_H */