diff options
Diffstat (limited to 'fs/nfsd/state.h')
| -rw-r--r-- | fs/nfsd/state.h | 64 |
1 files changed, 51 insertions, 13 deletions
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h index e036894bce57..d1c229feed52 100644 --- a/fs/nfsd/state.h +++ b/fs/nfsd/state.h | |||
| @@ -150,6 +150,12 @@ struct nfsd4_channel_attrs { | |||
| 150 | u32 rdma_attrs; | 150 | u32 rdma_attrs; |
| 151 | }; | 151 | }; |
| 152 | 152 | ||
| 153 | struct nfsd4_cb_sec { | ||
| 154 | u32 flavor; /* (u32)(-1) used to mean "no valid flavor" */ | ||
| 155 | u32 uid; | ||
| 156 | u32 gid; | ||
| 157 | }; | ||
| 158 | |||
| 153 | struct nfsd4_create_session { | 159 | struct nfsd4_create_session { |
| 154 | clientid_t clientid; | 160 | clientid_t clientid; |
| 155 | struct nfs4_sessionid sessionid; | 161 | struct nfs4_sessionid sessionid; |
| @@ -158,8 +164,12 @@ struct nfsd4_create_session { | |||
| 158 | struct nfsd4_channel_attrs fore_channel; | 164 | struct nfsd4_channel_attrs fore_channel; |
| 159 | struct nfsd4_channel_attrs back_channel; | 165 | struct nfsd4_channel_attrs back_channel; |
| 160 | u32 callback_prog; | 166 | u32 callback_prog; |
| 161 | u32 uid; | 167 | struct nfsd4_cb_sec cb_sec; |
| 162 | u32 gid; | 168 | }; |
| 169 | |||
| 170 | struct nfsd4_backchannel_ctl { | ||
| 171 | u32 bc_cb_program; | ||
| 172 | struct nfsd4_cb_sec bc_cb_sec; | ||
| 163 | }; | 173 | }; |
| 164 | 174 | ||
| 165 | struct nfsd4_bind_conn_to_session { | 175 | struct nfsd4_bind_conn_to_session { |
| @@ -192,6 +202,7 @@ struct nfsd4_session { | |||
| 192 | struct nfs4_sessionid se_sessionid; | 202 | struct nfs4_sessionid se_sessionid; |
| 193 | struct nfsd4_channel_attrs se_fchannel; | 203 | struct nfsd4_channel_attrs se_fchannel; |
| 194 | struct nfsd4_channel_attrs se_bchannel; | 204 | struct nfsd4_channel_attrs se_bchannel; |
| 205 | struct nfsd4_cb_sec se_cb_sec; | ||
| 195 | struct list_head se_conns; | 206 | struct list_head se_conns; |
| 196 | u32 se_cb_prog; | 207 | u32 se_cb_prog; |
| 197 | u32 se_cb_seq_nr; | 208 | u32 se_cb_seq_nr; |
| @@ -221,13 +232,12 @@ struct nfsd4_sessionid { | |||
| 221 | */ | 232 | */ |
| 222 | struct nfs4_client { | 233 | struct nfs4_client { |
| 223 | struct list_head cl_idhash; /* hash by cl_clientid.id */ | 234 | struct list_head cl_idhash; /* hash by cl_clientid.id */ |
| 224 | struct list_head cl_strhash; /* hash by cl_name */ | 235 | struct rb_node cl_namenode; /* link into by-name trees */ |
| 225 | struct list_head cl_openowners; | 236 | struct list_head cl_openowners; |
| 226 | struct idr cl_stateids; /* stateid lookup */ | 237 | struct idr cl_stateids; /* stateid lookup */ |
| 227 | struct list_head cl_delegations; | 238 | struct list_head cl_delegations; |
| 228 | struct list_head cl_lru; /* tail queue */ | 239 | struct list_head cl_lru; /* tail queue */ |
| 229 | struct xdr_netobj cl_name; /* id generated by client */ | 240 | struct xdr_netobj cl_name; /* id generated by client */ |
| 230 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ | ||
| 231 | nfs4_verifier cl_verifier; /* generated by client */ | 241 | nfs4_verifier cl_verifier; /* generated by client */ |
| 232 | time_t cl_time; /* time of last lease renewal */ | 242 | time_t cl_time; /* time of last lease renewal */ |
| 233 | struct sockaddr_storage cl_addr; /* client ipaddress */ | 243 | struct sockaddr_storage cl_addr; /* client ipaddress */ |
| @@ -242,9 +252,11 @@ struct nfs4_client { | |||
| 242 | #define NFSD4_CLIENT_CB_KILL (1) | 252 | #define NFSD4_CLIENT_CB_KILL (1) |
| 243 | #define NFSD4_CLIENT_STABLE (2) /* client on stable storage */ | 253 | #define NFSD4_CLIENT_STABLE (2) /* client on stable storage */ |
| 244 | #define NFSD4_CLIENT_RECLAIM_COMPLETE (3) /* reclaim_complete done */ | 254 | #define NFSD4_CLIENT_RECLAIM_COMPLETE (3) /* reclaim_complete done */ |
| 255 | #define NFSD4_CLIENT_CONFIRMED (4) /* client is confirmed */ | ||
| 245 | #define NFSD4_CLIENT_CB_FLAG_MASK (1 << NFSD4_CLIENT_CB_UPDATE | \ | 256 | #define NFSD4_CLIENT_CB_FLAG_MASK (1 << NFSD4_CLIENT_CB_UPDATE | \ |
| 246 | 1 << NFSD4_CLIENT_CB_KILL) | 257 | 1 << NFSD4_CLIENT_CB_KILL) |
| 247 | unsigned long cl_flags; | 258 | unsigned long cl_flags; |
| 259 | struct rpc_cred *cl_cb_cred; | ||
| 248 | struct rpc_clnt *cl_cb_client; | 260 | struct rpc_clnt *cl_cb_client; |
| 249 | u32 cl_cb_ident; | 261 | u32 cl_cb_ident; |
| 250 | #define NFSD4_CB_UP 0 | 262 | #define NFSD4_CB_UP 0 |
| @@ -271,6 +283,7 @@ struct nfs4_client { | |||
| 271 | unsigned long cl_cb_slot_busy; | 283 | unsigned long cl_cb_slot_busy; |
| 272 | struct rpc_wait_queue cl_cb_waitq; /* backchannel callers may */ | 284 | struct rpc_wait_queue cl_cb_waitq; /* backchannel callers may */ |
| 273 | /* wait here for slots */ | 285 | /* wait here for slots */ |
| 286 | struct net *net; | ||
| 274 | }; | 287 | }; |
| 275 | 288 | ||
| 276 | static inline void | 289 | static inline void |
| @@ -292,6 +305,7 @@ is_client_expired(struct nfs4_client *clp) | |||
| 292 | */ | 305 | */ |
| 293 | struct nfs4_client_reclaim { | 306 | struct nfs4_client_reclaim { |
| 294 | struct list_head cr_strhash; /* hash by cr_name */ | 307 | struct list_head cr_strhash; /* hash by cr_name */ |
| 308 | struct nfs4_client *cr_clp; /* pointer to associated clp */ | ||
| 295 | char cr_recdir[HEXDIR_LEN]; /* recover dir */ | 309 | char cr_recdir[HEXDIR_LEN]; /* recover dir */ |
| 296 | }; | 310 | }; |
| 297 | 311 | ||
| @@ -452,25 +466,26 @@ extern __be32 nfs4_preprocess_stateid_op(struct net *net, | |||
| 452 | stateid_t *stateid, int flags, struct file **filp); | 466 | stateid_t *stateid, int flags, struct file **filp); |
| 453 | extern void nfs4_lock_state(void); | 467 | extern void nfs4_lock_state(void); |
| 454 | extern void nfs4_unlock_state(void); | 468 | extern void nfs4_unlock_state(void); |
| 455 | extern int nfs4_in_grace(void); | 469 | void nfs4_remove_reclaim_record(struct nfs4_client_reclaim *, struct nfsd_net *); |
| 456 | extern void nfs4_release_reclaim(void); | 470 | extern void nfs4_release_reclaim(struct nfsd_net *); |
| 457 | extern struct nfs4_client_reclaim *nfsd4_find_reclaim_client(struct nfs4_client *crp); | 471 | extern struct nfs4_client_reclaim *nfsd4_find_reclaim_client(const char *recdir, |
| 458 | extern __be32 nfs4_check_open_reclaim(clientid_t *clid, bool sessions); | 472 | struct nfsd_net *nn); |
| 473 | extern __be32 nfs4_check_open_reclaim(clientid_t *clid, bool sessions, struct nfsd_net *nn); | ||
| 459 | extern void nfs4_free_openowner(struct nfs4_openowner *); | 474 | extern void nfs4_free_openowner(struct nfs4_openowner *); |
| 460 | extern void nfs4_free_lockowner(struct nfs4_lockowner *); | 475 | extern void nfs4_free_lockowner(struct nfs4_lockowner *); |
| 461 | extern int set_callback_cred(void); | 476 | extern int set_callback_cred(void); |
| 477 | extern void nfsd4_init_callback(struct nfsd4_callback *); | ||
| 462 | extern void nfsd4_probe_callback(struct nfs4_client *clp); | 478 | extern void nfsd4_probe_callback(struct nfs4_client *clp); |
| 463 | extern void nfsd4_probe_callback_sync(struct nfs4_client *clp); | 479 | extern void nfsd4_probe_callback_sync(struct nfs4_client *clp); |
| 464 | extern void nfsd4_change_callback(struct nfs4_client *clp, struct nfs4_cb_conn *); | 480 | extern void nfsd4_change_callback(struct nfs4_client *clp, struct nfs4_cb_conn *); |
| 465 | extern void nfsd4_do_callback_rpc(struct work_struct *); | ||
| 466 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); | 481 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); |
| 467 | extern int nfsd4_create_callback_queue(void); | 482 | extern int nfsd4_create_callback_queue(void); |
| 468 | extern void nfsd4_destroy_callback_queue(void); | 483 | extern void nfsd4_destroy_callback_queue(void); |
| 469 | extern void nfsd4_shutdown_callback(struct nfs4_client *); | 484 | extern void nfsd4_shutdown_callback(struct nfs4_client *); |
| 470 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); | 485 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); |
| 471 | extern __be32 nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname); | 486 | extern struct nfs4_client_reclaim *nfs4_client_to_reclaim(const char *name, |
| 472 | extern int nfs4_client_to_reclaim(const char *name); | 487 | struct nfsd_net *nn); |
| 473 | extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id); | 488 | extern bool nfs4_has_reclaimed_state(const char *name, struct nfsd_net *nn); |
| 474 | extern void release_session_client(struct nfsd4_session *); | 489 | extern void release_session_client(struct nfsd4_session *); |
| 475 | extern void nfsd4_purge_closed_stateid(struct nfs4_stateowner *); | 490 | extern void nfsd4_purge_closed_stateid(struct nfs4_stateowner *); |
| 476 | 491 | ||
| @@ -480,5 +495,28 @@ extern void nfsd4_client_tracking_exit(struct net *net); | |||
| 480 | extern void nfsd4_client_record_create(struct nfs4_client *clp); | 495 | extern void nfsd4_client_record_create(struct nfs4_client *clp); |
| 481 | extern void nfsd4_client_record_remove(struct nfs4_client *clp); | 496 | extern void nfsd4_client_record_remove(struct nfs4_client *clp); |
| 482 | extern int nfsd4_client_record_check(struct nfs4_client *clp); | 497 | extern int nfsd4_client_record_check(struct nfs4_client *clp); |
| 483 | extern void nfsd4_record_grace_done(struct net *net, time_t boot_time); | 498 | extern void nfsd4_record_grace_done(struct nfsd_net *nn, time_t boot_time); |
| 499 | |||
| 500 | /* nfs fault injection functions */ | ||
| 501 | #ifdef CONFIG_NFSD_FAULT_INJECTION | ||
| 502 | int nfsd_fault_inject_init(void); | ||
| 503 | void nfsd_fault_inject_cleanup(void); | ||
| 504 | u64 nfsd_for_n_state(u64, u64 (*)(struct nfs4_client *, u64)); | ||
| 505 | struct nfs4_client *nfsd_find_client(struct sockaddr_storage *, size_t); | ||
| 506 | |||
| 507 | u64 nfsd_forget_client(struct nfs4_client *, u64); | ||
| 508 | u64 nfsd_forget_client_locks(struct nfs4_client*, u64); | ||
| 509 | u64 nfsd_forget_client_openowners(struct nfs4_client *, u64); | ||
| 510 | u64 nfsd_forget_client_delegations(struct nfs4_client *, u64); | ||
| 511 | u64 nfsd_recall_client_delegations(struct nfs4_client *, u64); | ||
| 512 | |||
| 513 | u64 nfsd_print_client(struct nfs4_client *, u64); | ||
| 514 | u64 nfsd_print_client_locks(struct nfs4_client *, u64); | ||
| 515 | u64 nfsd_print_client_openowners(struct nfs4_client *, u64); | ||
| 516 | u64 nfsd_print_client_delegations(struct nfs4_client *, u64); | ||
| 517 | #else /* CONFIG_NFSD_FAULT_INJECTION */ | ||
| 518 | static inline int nfsd_fault_inject_init(void) { return 0; } | ||
| 519 | static inline void nfsd_fault_inject_cleanup(void) {} | ||
| 520 | #endif /* CONFIG_NFSD_FAULT_INJECTION */ | ||
| 521 | |||
| 484 | #endif /* NFSD4_STATE_H */ | 522 | #endif /* NFSD4_STATE_H */ |
