rpc_pipe_fs.h (3741B)
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