diff options
Diffstat (limited to 'fs/nfs/callback.h')
-rw-r--r-- | fs/nfs/callback.h | 76 |
1 files changed, 68 insertions, 8 deletions
diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h index 85a7cfd1b8dd..b257383bb565 100644 --- a/fs/nfs/callback.h +++ b/fs/nfs/callback.h | |||
@@ -7,6 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | #ifndef __LINUX_FS_NFS_CALLBACK_H | 8 | #ifndef __LINUX_FS_NFS_CALLBACK_H |
9 | #define __LINUX_FS_NFS_CALLBACK_H | 9 | #define __LINUX_FS_NFS_CALLBACK_H |
10 | #include <linux/sunrpc/svc.h> | ||
10 | 11 | ||
11 | #define NFS4_CALLBACK 0x40000000 | 12 | #define NFS4_CALLBACK 0x40000000 |
12 | #define NFS4_CALLBACK_XDRSIZE 2048 | 13 | #define NFS4_CALLBACK_XDRSIZE 2048 |
@@ -34,10 +35,16 @@ enum nfs4_callback_opnum { | |||
34 | OP_CB_ILLEGAL = 10044, | 35 | OP_CB_ILLEGAL = 10044, |
35 | }; | 36 | }; |
36 | 37 | ||
38 | struct cb_process_state { | ||
39 | __be32 drc_status; | ||
40 | struct nfs_client *clp; | ||
41 | }; | ||
42 | |||
37 | struct cb_compound_hdr_arg { | 43 | struct cb_compound_hdr_arg { |
38 | unsigned int taglen; | 44 | unsigned int taglen; |
39 | const char *tag; | 45 | const char *tag; |
40 | unsigned int minorversion; | 46 | unsigned int minorversion; |
47 | unsigned int cb_ident; /* v4.0 callback identifier */ | ||
41 | unsigned nops; | 48 | unsigned nops; |
42 | }; | 49 | }; |
43 | 50 | ||
@@ -103,14 +110,23 @@ struct cb_sequenceres { | |||
103 | uint32_t csr_target_highestslotid; | 110 | uint32_t csr_target_highestslotid; |
104 | }; | 111 | }; |
105 | 112 | ||
106 | extern unsigned nfs4_callback_sequence(struct cb_sequenceargs *args, | 113 | extern __be32 nfs4_callback_sequence(struct cb_sequenceargs *args, |
107 | struct cb_sequenceres *res); | 114 | struct cb_sequenceres *res, |
115 | struct cb_process_state *cps); | ||
108 | 116 | ||
109 | extern int nfs41_validate_delegation_stateid(struct nfs_delegation *delegation, | 117 | extern int nfs41_validate_delegation_stateid(struct nfs_delegation *delegation, |
110 | const nfs4_stateid *stateid); | 118 | const nfs4_stateid *stateid); |
111 | 119 | ||
112 | #define RCA4_TYPE_MASK_RDATA_DLG 0 | 120 | #define RCA4_TYPE_MASK_RDATA_DLG 0 |
113 | #define RCA4_TYPE_MASK_WDATA_DLG 1 | 121 | #define RCA4_TYPE_MASK_WDATA_DLG 1 |
122 | #define RCA4_TYPE_MASK_DIR_DLG 2 | ||
123 | #define RCA4_TYPE_MASK_FILE_LAYOUT 3 | ||
124 | #define RCA4_TYPE_MASK_BLK_LAYOUT 4 | ||
125 | #define RCA4_TYPE_MASK_OBJ_LAYOUT_MIN 8 | ||
126 | #define RCA4_TYPE_MASK_OBJ_LAYOUT_MAX 9 | ||
127 | #define RCA4_TYPE_MASK_OTHER_LAYOUT_MIN 12 | ||
128 | #define RCA4_TYPE_MASK_OTHER_LAYOUT_MAX 15 | ||
129 | #define RCA4_TYPE_MASK_ALL 0xf31f | ||
114 | 130 | ||
115 | struct cb_recallanyargs { | 131 | struct cb_recallanyargs { |
116 | struct sockaddr *craa_addr; | 132 | struct sockaddr *craa_addr; |
@@ -118,25 +134,69 @@ struct cb_recallanyargs { | |||
118 | uint32_t craa_type_mask; | 134 | uint32_t craa_type_mask; |
119 | }; | 135 | }; |
120 | 136 | ||
121 | extern unsigned nfs4_callback_recallany(struct cb_recallanyargs *args, void *dummy); | 137 | extern __be32 nfs4_callback_recallany(struct cb_recallanyargs *args, |
138 | void *dummy, | ||
139 | struct cb_process_state *cps); | ||
122 | 140 | ||
123 | struct cb_recallslotargs { | 141 | struct cb_recallslotargs { |
124 | struct sockaddr *crsa_addr; | 142 | struct sockaddr *crsa_addr; |
125 | uint32_t crsa_target_max_slots; | 143 | uint32_t crsa_target_max_slots; |
126 | }; | 144 | }; |
127 | extern unsigned nfs4_callback_recallslot(struct cb_recallslotargs *args, | 145 | extern __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, |
128 | void *dummy); | 146 | void *dummy, |
147 | struct cb_process_state *cps); | ||
148 | |||
149 | struct cb_layoutrecallargs { | ||
150 | struct sockaddr *cbl_addr; | ||
151 | uint32_t cbl_recall_type; | ||
152 | uint32_t cbl_layout_type; | ||
153 | uint32_t cbl_layoutchanged; | ||
154 | union { | ||
155 | struct { | ||
156 | struct nfs_fh cbl_fh; | ||
157 | struct pnfs_layout_range cbl_range; | ||
158 | nfs4_stateid cbl_stateid; | ||
159 | }; | ||
160 | struct nfs_fsid cbl_fsid; | ||
161 | }; | ||
162 | }; | ||
129 | 163 | ||
130 | #endif /* CONFIG_NFS_V4_1 */ | 164 | extern unsigned nfs4_callback_layoutrecall( |
165 | struct cb_layoutrecallargs *args, | ||
166 | void *dummy, struct cb_process_state *cps); | ||
167 | |||
168 | extern void nfs4_check_drain_bc_complete(struct nfs4_session *ses); | ||
169 | extern void nfs4_cb_take_slot(struct nfs_client *clp); | ||
131 | 170 | ||
132 | extern __be32 nfs4_callback_getattr(struct cb_getattrargs *args, struct cb_getattrres *res); | 171 | struct cb_devicenotifyitem { |
133 | extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy); | 172 | uint32_t cbd_notify_type; |
173 | uint32_t cbd_layout_type; | ||
174 | struct nfs4_deviceid cbd_dev_id; | ||
175 | uint32_t cbd_immediate; | ||
176 | }; | ||
177 | |||
178 | struct cb_devicenotifyargs { | ||
179 | int ndevs; | ||
180 | struct cb_devicenotifyitem *devs; | ||
181 | }; | ||
134 | 182 | ||
183 | extern __be32 nfs4_callback_devicenotify( | ||
184 | struct cb_devicenotifyargs *args, | ||
185 | void *dummy, struct cb_process_state *cps); | ||
186 | |||
187 | #endif /* CONFIG_NFS_V4_1 */ | ||
188 | extern int check_gss_callback_principal(struct nfs_client *, struct svc_rqst *); | ||
189 | extern __be32 nfs4_callback_getattr(struct cb_getattrargs *args, | ||
190 | struct cb_getattrres *res, | ||
191 | struct cb_process_state *cps); | ||
192 | extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy, | ||
193 | struct cb_process_state *cps); | ||
135 | #ifdef CONFIG_NFS_V4 | 194 | #ifdef CONFIG_NFS_V4 |
136 | extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); | 195 | extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); |
137 | extern void nfs_callback_down(int minorversion); | 196 | extern void nfs_callback_down(int minorversion); |
138 | extern int nfs4_validate_delegation_stateid(struct nfs_delegation *delegation, | 197 | extern int nfs4_validate_delegation_stateid(struct nfs_delegation *delegation, |
139 | const nfs4_stateid *stateid); | 198 | const nfs4_stateid *stateid); |
199 | extern int nfs4_set_callback_sessionid(struct nfs_client *clp); | ||
140 | #endif /* CONFIG_NFS_V4 */ | 200 | #endif /* CONFIG_NFS_V4 */ |
141 | /* | 201 | /* |
142 | * nfs41: Callbacks are expected to not cause substantial latency, | 202 | * nfs41: Callbacks are expected to not cause substantial latency, |