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 8struct rpc_pipe_msg { 9 struct list_head list; 10 void *data; 11 size_t len; 12 size_t copied; 13 int errno; 14}; 15 16struct 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 24struct rpc_inode { 25 struct inode vfs_inode; 26 void *private; 27 struct list_head pipe; 28 struct list_head in_upcall; 29 struct list_head in_downcall; 30 int pipelen; 31 int nreaders; 32 int nwriters; 33 int nkern_readwriters; 34 wait_queue_head_t waitq; 35#define RPC_PIPE_WAIT_FOR_OPEN 1 36 int flags; 37 struct delayed_work queue_timeout; 38 const struct rpc_pipe_ops *ops; 39}; 40 41static inline struct rpc_inode * 42RPC_I(struct inode *inode) 43{ 44 return container_of(inode, struct rpc_inode, vfs_inode); 45} 46 47extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); 48 49struct rpc_clnt; 50extern struct dentry *rpc_create_client_dir(struct dentry *, struct qstr *, struct rpc_clnt *); 51extern int rpc_remove_client_dir(struct dentry *); 52 53struct cache_detail; 54extern struct dentry *rpc_create_cache_dir(struct dentry *, 55 struct qstr *, 56 mode_t umode, 57 struct cache_detail *); 58extern void rpc_remove_cache_dir(struct dentry *); 59 60extern struct dentry *rpc_mkpipe(struct dentry *, const char *, void *, 61 const struct rpc_pipe_ops *, int flags); 62extern int rpc_unlink(struct dentry *); 63extern struct vfsmount *rpc_get_mount(void); 64extern void rpc_put_mount(void); 65extern int register_rpc_pipefs(void); 66extern void unregister_rpc_pipefs(void); 67 68#endif 69#endif 70