root/include/linux/sunrpc/rpc_pipe_fs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. RPC_I

   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

/* [<][>][^][v][top][bottom][index][help] */