1 #ifndef _LINUX_SUNRPC_RPC_PIPE_FS_H 2 #define _LINUX_SUNRPC_RPC_PIPE_FS_H 3 4 #ifdef __KERNEL__ 5 6 #include <linux/workqueue.h> 7 8 struct rpc_pipe_msg { 9 struct list_head list; 10 void *data; 11 size_t len; 12 size_t copied; 13 int errno; 14 }; 15 16 struct rpc_pipe_ops { 17 ssize_t (*upcall)(struct file *, struct rpc_pipe_msg *, char __user *, size_t); 18 ssize_t (*downcall)(struct file *, const char __user *, size_t); 19 void (*release_pipe)(struct inode *); 20 int (*open_pipe)(struct inode *); 21 void (*destroy_msg)(struct rpc_pipe_msg *); 22 }; 23 24 struct rpc_pipe { 25 struct list_head pipe; 26 struct list_head in_upcall; 27 struct list_head in_downcall; 28 int pipelen; 29 int nreaders; 30 int nwriters; 31 #define RPC_PIPE_WAIT_FOR_OPEN 1 32 int flags; 33 struct delayed_work queue_timeout; 34 const struct rpc_pipe_ops *ops; 35 spinlock_t lock; 36 struct dentry *dentry; 37 }; 38 39 struct rpc_inode { 40 struct inode vfs_inode; 41 void *private; 42 struct rpc_pipe *pipe; 43 wait_queue_head_t waitq; 44 }; 45 46 static inline struct rpc_inode * 47 RPC_I(struct inode *inode) 48 { 49 return container_of(inode, struct rpc_inode, vfs_inode); 50 } 51 52 enum { 53 SUNRPC_PIPEFS_NFS_PRIO, 54 SUNRPC_PIPEFS_RPC_PRIO, 55 }; 56 57 extern int rpc_pipefs_notifier_register(struct notifier_block *); 58 extern void rpc_pipefs_notifier_unregister(struct notifier_block *); 59 60 enum { 61 RPC_PIPEFS_MOUNT, 62 RPC_PIPEFS_UMOUNT, 63 }; 64 65 extern struct dentry *rpc_d_lookup_sb(const struct super_block *sb, 66 const unsigned char *dir_name); 67 extern void rpc_pipefs_init_net(struct net *net); 68 extern struct super_block *rpc_get_sb_net(const struct net *net); 69 extern void rpc_put_sb_net(const struct net *net); 70 71 extern ssize_t rpc_pipe_generic_upcall(struct file *, struct rpc_pipe_msg *, 72 char __user *, size_t); 73 extern int rpc_queue_upcall(struct rpc_pipe *, struct rpc_pipe_msg *); 74 75 struct rpc_clnt; 76 extern struct dentry *rpc_create_client_dir(struct dentry *, struct qstr *, struct rpc_clnt *); 77 extern int rpc_remove_client_dir(struct dentry *); 78 79 struct cache_detail; 80 extern struct dentry *rpc_create_cache_dir(struct dentry *, 81 struct qstr *, 82 umode_t umode, 83 struct cache_detail *); 84 extern void rpc_remove_cache_dir(struct dentry *); 85 86 extern int rpc_rmdir(struct dentry *dentry); 87 88 struct rpc_pipe *rpc_mkpipe_data(const struct rpc_pipe_ops *ops, int flags); 89 void rpc_destroy_pipe_data(struct rpc_pipe *pipe); 90 extern struct dentry *rpc_mkpipe_dentry(struct dentry *, const char *, void *, 91 struct rpc_pipe *); 92 extern int rpc_unlink(struct dentry *); 93 extern int register_rpc_pipefs(void); 94 extern void unregister_rpc_pipefs(void); 95 96 #endif 97 #endif 98