1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _LINUX_SUNRPC_RPC_PIPE_FS_H 3 #define _LINUX_SUNRPC_RPC_PIPE_FS_H 4 5 #ifdef __KERNEL__ 6 7 #include <linux/workqueue.h> 8 9 struct rpc_pipe_dir_head { 10 struct list_head pdh_entries; 11 struct dentry *pdh_dentry; 12 }; 13 14 struct rpc_pipe_dir_object_ops; 15 struct rpc_pipe_dir_object { 16 struct list_head pdo_head; 17 const struct rpc_pipe_dir_object_ops *pdo_ops; 18 19 void *pdo_data; 20 }; 21 22 struct rpc_pipe_dir_object_ops { 23 int (*create)(struct dentry *dir, 24 struct rpc_pipe_dir_object *pdo); 25 void (*destroy)(struct dentry *dir, 26 struct rpc_pipe_dir_object *pdo); 27 }; 28 29 struct rpc_pipe_msg { 30 struct list_head list; 31 void *data; 32 size_t len; 33 size_t copied; 34 int errno; 35 }; 36 37 struct rpc_pipe_ops { 38 ssize_t (*upcall)(struct file *, struct rpc_pipe_msg *, char __user *, size_t); 39 ssize_t (*downcall)(struct file *, const char __user *, size_t); 40 void (*release_pipe)(struct inode *); 41 int (*open_pipe)(struct inode *); 42 void (*destroy_msg)(struct rpc_pipe_msg *); 43 }; 44 45 struct rpc_pipe { 46 struct list_head pipe; 47 struct list_head in_upcall; 48 struct list_head in_downcall; 49 int pipelen; 50 int nreaders; 51 int nwriters; 52 #define RPC_PIPE_WAIT_FOR_OPEN 1 53 int flags; 54 struct delayed_work queue_timeout; 55 const struct rpc_pipe_ops *ops; 56 spinlock_t lock; 57 struct dentry *dentry; 58 }; 59 60 struct rpc_inode { 61 struct inode vfs_inode; 62 void *private; 63 struct rpc_pipe *pipe; 64 wait_queue_head_t waitq; 65 }; 66 67 static inline struct rpc_inode * 68 RPC_I(struct inode *inode) 69 { 70 return container_of(inode, struct rpc_inode, vfs_inode); 71 } 72 73 enum { 74 SUNRPC_PIPEFS_NFS_PRIO, 75 SUNRPC_PIPEFS_RPC_PRIO, 76 }; 77 78 extern int rpc_pipefs_notifier_register(struct notifier_block *); 79 extern void rpc_pipefs_notifier_unregister(struct notifier_block *); 80 81 enum { 82 RPC_PIPEFS_MOUNT, 83 RPC_PIPEFS_UMOUNT, 84 }; 85 86 extern struct dentry *rpc_d_lookup_sb(const struct super_block *sb, 87 const unsigned char *dir_name); 88 extern int rpc_pipefs_init_net(struct net *net); 89 extern void rpc_pipefs_exit_net(struct net *net); 90 extern struct super_block *rpc_get_sb_net(const struct net *net); 91 extern void rpc_put_sb_net(const struct net *net); 92 93 extern ssize_t rpc_pipe_generic_upcall(struct file *, struct rpc_pipe_msg *, 94 char __user *, size_t); 95 extern int rpc_queue_upcall(struct rpc_pipe *, struct rpc_pipe_msg *); 96 97 struct rpc_clnt; 98 extern struct dentry *rpc_create_client_dir(struct dentry *, const char *, struct rpc_clnt *); 99 extern int rpc_remove_client_dir(struct rpc_clnt *); 100 101 extern void rpc_init_pipe_dir_head(struct rpc_pipe_dir_head *pdh); 102 extern void rpc_init_pipe_dir_object(struct rpc_pipe_dir_object *pdo, 103 const struct rpc_pipe_dir_object_ops *pdo_ops, 104 void *pdo_data); 105 extern int rpc_add_pipe_dir_object(struct net *net, 106 struct rpc_pipe_dir_head *pdh, 107 struct rpc_pipe_dir_object *pdo); 108 extern void rpc_remove_pipe_dir_object(struct net *net, 109 struct rpc_pipe_dir_head *pdh, 110 struct rpc_pipe_dir_object *pdo); 111 extern struct rpc_pipe_dir_object *rpc_find_or_alloc_pipe_dir_object( 112 struct net *net, 113 struct rpc_pipe_dir_head *pdh, 114 int (*match)(struct rpc_pipe_dir_object *, void *), 115 struct rpc_pipe_dir_object *(*alloc)(void *), 116 void *data); 117 118 struct cache_detail; 119 extern struct dentry *rpc_create_cache_dir(struct dentry *, 120 const char *, 121 umode_t umode, 122 struct cache_detail *); 123 extern void rpc_remove_cache_dir(struct dentry *); 124 125 struct rpc_pipe *rpc_mkpipe_data(const struct rpc_pipe_ops *ops, int flags); 126 void rpc_destroy_pipe_data(struct rpc_pipe *pipe); 127 extern struct dentry *rpc_mkpipe_dentry(struct dentry *, const char *, void *, 128 struct rpc_pipe *); 129 extern int rpc_unlink(struct dentry *); 130 extern int register_rpc_pipefs(void); 131 extern void unregister_rpc_pipefs(void); 132 133 extern bool gssd_running(struct net *net); 134 135 #endif 136 #endif 137