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