diff options
Diffstat (limited to 'include/linux/sunrpc/cache.h')
| -rw-r--r-- | include/linux/sunrpc/cache.h | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index 2d8b211b9324..6f52b4d7c447 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
| @@ -59,6 +59,15 @@ struct cache_head { | |||
| 59 | 59 | ||
| 60 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ | 60 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ |
| 61 | 61 | ||
| 62 | struct cache_detail_procfs { | ||
| 63 | struct proc_dir_entry *proc_ent; | ||
| 64 | struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; | ||
| 65 | }; | ||
| 66 | |||
| 67 | struct cache_detail_pipefs { | ||
| 68 | struct dentry *dir; | ||
| 69 | }; | ||
| 70 | |||
| 62 | struct cache_detail { | 71 | struct cache_detail { |
| 63 | struct module * owner; | 72 | struct module * owner; |
| 64 | int hash_size; | 73 | int hash_size; |
| @@ -70,15 +79,17 @@ struct cache_detail { | |||
| 70 | char *name; | 79 | char *name; |
| 71 | void (*cache_put)(struct kref *); | 80 | void (*cache_put)(struct kref *); |
| 72 | 81 | ||
| 73 | void (*cache_request)(struct cache_detail *cd, | 82 | int (*cache_upcall)(struct cache_detail *, |
| 74 | struct cache_head *h, | 83 | struct cache_head *); |
| 75 | char **bpp, int *blen); | 84 | |
| 76 | int (*cache_parse)(struct cache_detail *, | 85 | int (*cache_parse)(struct cache_detail *, |
| 77 | char *buf, int len); | 86 | char *buf, int len); |
| 78 | 87 | ||
| 79 | int (*cache_show)(struct seq_file *m, | 88 | int (*cache_show)(struct seq_file *m, |
| 80 | struct cache_detail *cd, | 89 | struct cache_detail *cd, |
| 81 | struct cache_head *h); | 90 | struct cache_head *h); |
| 91 | void (*warn_no_listener)(struct cache_detail *cd, | ||
| 92 | int has_died); | ||
| 82 | 93 | ||
| 83 | struct cache_head * (*alloc)(void); | 94 | struct cache_head * (*alloc)(void); |
| 84 | int (*match)(struct cache_head *orig, struct cache_head *new); | 95 | int (*match)(struct cache_head *orig, struct cache_head *new); |
| @@ -96,13 +107,15 @@ struct cache_detail { | |||
| 96 | 107 | ||
| 97 | /* fields for communication over channel */ | 108 | /* fields for communication over channel */ |
| 98 | struct list_head queue; | 109 | struct list_head queue; |
| 99 | struct proc_dir_entry *proc_ent; | ||
| 100 | struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; | ||
| 101 | 110 | ||
| 102 | atomic_t readers; /* how many time is /chennel open */ | 111 | atomic_t readers; /* how many time is /chennel open */ |
| 103 | time_t last_close; /* if no readers, when did last close */ | 112 | time_t last_close; /* if no readers, when did last close */ |
| 104 | time_t last_warn; /* when we last warned about no readers */ | 113 | time_t last_warn; /* when we last warned about no readers */ |
| 105 | void (*warn_no_listener)(struct cache_detail *cd); | 114 | |
| 115 | union { | ||
| 116 | struct cache_detail_procfs procfs; | ||
| 117 | struct cache_detail_pipefs pipefs; | ||
| 118 | } u; | ||
| 106 | }; | 119 | }; |
| 107 | 120 | ||
| 108 | 121 | ||
| @@ -127,6 +140,10 @@ struct cache_deferred_req { | |||
| 127 | }; | 140 | }; |
| 128 | 141 | ||
| 129 | 142 | ||
| 143 | extern const struct file_operations cache_file_operations_pipefs; | ||
| 144 | extern const struct file_operations content_file_operations_pipefs; | ||
| 145 | extern const struct file_operations cache_flush_operations_pipefs; | ||
| 146 | |||
| 130 | extern struct cache_head * | 147 | extern struct cache_head * |
| 131 | sunrpc_cache_lookup(struct cache_detail *detail, | 148 | sunrpc_cache_lookup(struct cache_detail *detail, |
| 132 | struct cache_head *key, int hash); | 149 | struct cache_head *key, int hash); |
| @@ -134,6 +151,13 @@ extern struct cache_head * | |||
| 134 | sunrpc_cache_update(struct cache_detail *detail, | 151 | sunrpc_cache_update(struct cache_detail *detail, |
| 135 | struct cache_head *new, struct cache_head *old, int hash); | 152 | struct cache_head *new, struct cache_head *old, int hash); |
| 136 | 153 | ||
| 154 | extern int | ||
| 155 | sunrpc_cache_pipe_upcall(struct cache_detail *detail, struct cache_head *h, | ||
| 156 | void (*cache_request)(struct cache_detail *, | ||
| 157 | struct cache_head *, | ||
| 158 | char **, | ||
| 159 | int *)); | ||
| 160 | |||
| 137 | 161 | ||
| 138 | extern void cache_clean_deferred(void *owner); | 162 | extern void cache_clean_deferred(void *owner); |
| 139 | 163 | ||
| @@ -171,6 +195,10 @@ extern void cache_purge(struct cache_detail *detail); | |||
| 171 | extern int cache_register(struct cache_detail *cd); | 195 | extern int cache_register(struct cache_detail *cd); |
| 172 | extern void cache_unregister(struct cache_detail *cd); | 196 | extern void cache_unregister(struct cache_detail *cd); |
| 173 | 197 | ||
| 198 | extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *, | ||
| 199 | mode_t, struct cache_detail *); | ||
| 200 | extern void sunrpc_cache_unregister_pipefs(struct cache_detail *); | ||
| 201 | |||
| 174 | extern void qword_add(char **bpp, int *lp, char *str); | 202 | extern void qword_add(char **bpp, int *lp, char *str); |
| 175 | extern void qword_addhex(char **bpp, int *lp, char *buf, int blen); | 203 | extern void qword_addhex(char **bpp, int *lp, char *buf, int blen); |
| 176 | extern int qword_get(char **bpp, char *dest, int bufsize); | 204 | extern int qword_get(char **bpp, char *dest, int bufsize); |
