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