Blame view
fs/nfsd/state.h
15.1 KB
1da177e4c Linux-2.6.12-rc2 |
1 |
/* |
1da177e4c Linux-2.6.12-rc2 |
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
* Copyright (c) 2001 The Regents of the University of Michigan. * All rights reserved. * * Kendrick Smith <kmsmith@umich.edu> * Andy Adamson <andros@umich.edu> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #ifndef _NFSD4_STATE_H #define _NFSD4_STATE_H |
38c2f4b12 nfsd4: look up st... |
37 |
#include <linux/idr.h> |
19cf5c026 nfsd4: use callba... |
38 |
#include <linux/sunrpc/svc_xprt.h> |
72579ac9c nfsd: Headers Ind... |
39 |
#include <linux/nfsd/nfsfh.h> |
1557aca79 nfsd: move most o... |
40 |
#include "nfsfh.h" |
1da177e4c Linux-2.6.12-rc2 |
41 |
|
1da177e4c Linux-2.6.12-rc2 |
42 43 44 45 46 47 |
typedef struct { u32 cl_boot; u32 cl_id; } clientid_t; typedef struct { |
d3b313a46 nfsd4: construct ... |
48 49 |
clientid_t so_clid; u32 so_id; |
1da177e4c Linux-2.6.12-rc2 |
50 51 52 53 54 55 |
} stateid_opaque_t; typedef struct { u32 si_generation; stateid_opaque_t si_opaque; } stateid_t; |
1da177e4c Linux-2.6.12-rc2 |
56 |
|
8c10cbdb4 nfsd: use STATEID... |
57 58 |
#define STATEID_FMT "(%08x/%08x/%08x/%08x)" #define STATEID_VAL(s) \ |
d3b313a46 nfsd4: construct ... |
59 60 61 |
(s)->si_opaque.so_clid.cl_boot, \ (s)->si_opaque.so_clid.cl_id, \ (s)->si_opaque.so_id, \ |
8c10cbdb4 nfsd: use STATEID... |
62 |
(s)->si_generation |
227f98d98 nfsd4: preallocat... |
63 |
struct nfsd4_callback { |
fb0039232 nfsd4: remove sep... |
64 65 |
void *cb_op; struct nfs4_client *cb_clp; |
5ce8ba25d nfsd4: allow rest... |
66 |
struct list_head cb_per_client; |
fb0039232 nfsd4: remove sep... |
67 |
u32 cb_minorversion; |
5878453db nfsd4: generic ca... |
68 69 |
struct rpc_message cb_msg; const struct rpc_call_ops *cb_ops; |
b5a1a81e5 nfsd4: don't slee... |
70 |
struct work_struct cb_work; |
5ce8ba25d nfsd4: allow rest... |
71 |
bool cb_done; |
227f98d98 nfsd4: preallocat... |
72 |
}; |
d5477a8db nfsd4: add common... |
73 74 75 76 |
struct nfs4_stid { #define NFS4_OPEN_STID 1 #define NFS4_LOCK_STID 2 #define NFS4_DELEG_STID 4 |
f7a4d8720 nfsd4: hash close... |
77 78 79 |
/* For an open stateid kept around *only* to process close replays: */ #define NFS4_CLOSED_STID 8 unsigned char sc_type; |
d5477a8db nfsd4: add common... |
80 |
stateid_t sc_stateid; |
2a74aba79 nfsd4: move clien... |
81 |
struct nfs4_client *sc_client; |
d5477a8db nfsd4: add common... |
82 |
}; |
1da177e4c Linux-2.6.12-rc2 |
83 |
struct nfs4_delegation { |
996e09385 nfsd4: do idr pre... |
84 |
struct nfs4_stid dl_stid; /* must be first field */ |
ea1da636e [PATCH] knfsd: nf... |
85 86 |
struct list_head dl_perfile; struct list_head dl_perclnt; |
1da177e4c Linux-2.6.12-rc2 |
87 88 |
struct list_head dl_recall_lru; /* delegation recalled */ atomic_t dl_count; /* ref count */ |
1da177e4c Linux-2.6.12-rc2 |
89 |
struct nfs4_file *dl_file; |
1da177e4c Linux-2.6.12-rc2 |
90 91 |
u32 dl_type; time_t dl_time; |
b53d40c50 nfsd4: eliminate ... |
92 |
/* For recall: */ |
b53d40c50 nfsd4: eliminate ... |
93 |
struct knfsd_fh dl_fh; |
3aea09dc9 nfsd4: track reca... |
94 |
int dl_retries; |
227f98d98 nfsd4: preallocat... |
95 |
struct nfsd4_callback dl_recall; |
1da177e4c Linux-2.6.12-rc2 |
96 |
}; |
1da177e4c Linux-2.6.12-rc2 |
97 |
/* client delegation callback info */ |
c237dc030 nfsd4: rename cal... |
98 |
struct nfs4_cb_conn { |
1da177e4c Linux-2.6.12-rc2 |
99 |
/* SETCLIENTID info */ |
aa9a4ec77 nfsd: convert nfs... |
100 |
struct sockaddr_storage cb_addr; |
6f3d772fb nfs4: set source ... |
101 |
struct sockaddr_storage cb_saddr; |
aa9a4ec77 nfsd: convert nfs... |
102 |
size_t cb_addrlen; |
8b5ce5cd4 nfsd4: callback p... |
103 104 |
u32 cb_prog; /* used only in 4.0 case; per-session otherwise */ |
ab52ae6db nfsd41: Backchann... |
105 |
u32 cb_ident; /* minorversion 0 only */ |
2bf23875f nfsd4: rearrange ... |
106 |
struct svc_xprt *cb_xprt; /* minorversion 1 only */ |
1da177e4c Linux-2.6.12-rc2 |
107 |
}; |
f459e4535 nfsd4: hash deleg... |
108 109 110 111 |
static inline struct nfs4_delegation *delegstateid(struct nfs4_stid *s) { return container_of(s, struct nfs4_delegation, dl_stid); } |
a649637c7 nfsd41: bound for... |
112 113 |
/* Maximum number of slots per session. 160 is useful for long haul TCP */ #define NFSD_MAX_SLOTS_PER_SESSION 160 |
ec6b5d7b5 nfsd41: create_se... |
114 115 |
/* Maximum number of operations per session compound */ #define NFSD_MAX_OPS_PER_COMPOUND 16 |
557ce2646 nfsd41: replace p... |
116 117 |
/* Maximum session per slot cache size */ #define NFSD_SLOT_CACHE_SIZE 1024 |
a649637c7 nfsd41: bound for... |
118 119 120 121 |
/* Maximum number of NFSD_SLOT_CACHE_SIZE slots per session */ #define NFSD_CACHE_SIZE_SLOTS_PER_SESSION 32 #define NFSD_MAX_MEM_PER_SESSION \ (NFSD_CACHE_SIZE_SLOTS_PER_SESSION * NFSD_SLOT_CACHE_SIZE) |
074fe8975 nfsd41: DRC save,... |
122 |
|
7116ed6b9 nfsd41: sessions ... |
123 |
struct nfsd4_slot { |
557ce2646 nfsd41: replace p... |
124 125 126 127 128 129 130 |
bool sl_inuse; bool sl_cachethis; u16 sl_opcnt; u32 sl_seqid; __be32 sl_status; u32 sl_datalen; char sl_data[]; |
7116ed6b9 nfsd41: sessions ... |
131 |
}; |
6c18ba9f5 nfsd41: move chan... |
132 133 134 135 136 137 138 139 140 141 |
struct nfsd4_channel_attrs { u32 headerpadsz; u32 maxreq_sz; u32 maxresp_sz; u32 maxresp_cached; u32 maxops; u32 maxreqs; u32 nr_rdma_attrs; u32 rdma_attrs; }; |
49557cc74 nfsd41: Use separ... |
142 143 144 145 146 147 148 149 150 151 152 |
struct nfsd4_create_session { clientid_t clientid; struct nfs4_sessionid sessionid; u32 seqid; u32 flags; struct nfsd4_channel_attrs fore_channel; struct nfsd4_channel_attrs back_channel; u32 callback_prog; u32 uid; u32 gid; }; |
1d1bc8f20 nfsd4: support BI... |
153 154 155 156 |
struct nfsd4_bind_conn_to_session { struct nfs4_sessionid sessionid; u32 dir; }; |
49557cc74 nfsd41: Use separ... |
157 158 159 160 161 162 |
/* The single slot clientid cache structure */ struct nfsd4_clid_slot { u32 sl_seqid; __be32 sl_status; struct nfsd4_create_session sl_cr_ses; }; |
c7662518c nfsd4: keep per-s... |
163 164 165 |
struct nfsd4_conn { struct list_head cn_persession; struct svc_xprt *cn_xprt; |
19cf5c026 nfsd4: use callba... |
166 167 |
struct svc_xpt_user cn_xpt_user; struct nfsd4_session *cn_session; |
c7662518c nfsd4: keep per-s... |
168 169 170 |
/* CDFC4_FORE, CDFC4_BACK: */ unsigned char cn_flags; }; |
7116ed6b9 nfsd41: sessions ... |
171 172 173 174 175 |
struct nfsd4_session { struct kref se_ref; struct list_head se_hash; /* hash by sessionid */ struct list_head se_perclnt; u32 se_flags; |
07cd4909a nfsd4: mark_clien... |
176 |
struct nfs4_client *se_client; |
7116ed6b9 nfsd41: sessions ... |
177 |
struct nfs4_sessionid se_sessionid; |
6c18ba9f5 nfsd41: move chan... |
178 179 |
struct nfsd4_channel_attrs se_fchannel; struct nfsd4_channel_attrs se_bchannel; |
c7662518c nfsd4: keep per-s... |
180 |
struct list_head se_conns; |
8b5ce5cd4 nfsd4: callback p... |
181 |
u32 se_cb_prog; |
ac7c46f29 nfsd4: make backc... |
182 |
u32 se_cb_seq_nr; |
557ce2646 nfsd41: replace p... |
183 |
struct nfsd4_slot *se_slots[]; /* forward channel slots */ |
7116ed6b9 nfsd41: sessions ... |
184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
}; static inline void nfsd4_put_session(struct nfsd4_session *ses) { extern void free_session(struct kref *kref); kref_put(&ses->se_ref, free_session); } static inline void nfsd4_get_session(struct nfsd4_session *ses) { kref_get(&ses->se_ref); } |
5282fd724 nfsd41: sessionid... |
198 199 200 201 202 203 |
/* formatted contents of nfs4_sessionid */ struct nfsd4_sessionid { clientid_t clientid; u32 sequence; u32 reserved; }; |
a55370a3c [PATCH] knfsd: nf... |
204 |
#define HEXDIR_LEN 33 /* hex version of 16 byte md5 of cl_name plus '\0' */ |
1da177e4c Linux-2.6.12-rc2 |
205 206 207 208 209 210 211 212 213 214 215 216 217 |
/* * struct nfs4_client - one per client. Clientids live here. * o Each nfs4_client is hashed by clientid. * * o Each nfs4_clients is also hashed by name * (the opaque quantity initially sent by the client to identify itself). * * o cl_perclient list is used to ensure no dangling stateowner references * when we expire the nfs4_client */ struct nfs4_client { struct list_head cl_idhash; /* hash by cl_clientid.id */ struct list_head cl_strhash; /* hash by cl_name */ |
ea1da636e [PATCH] knfsd: nf... |
218 |
struct list_head cl_openowners; |
38c2f4b12 nfsd4: look up st... |
219 |
struct idr cl_stateids; /* stateid lookup */ |
ea1da636e [PATCH] knfsd: nf... |
220 |
struct list_head cl_delegations; |
1da177e4c Linux-2.6.12-rc2 |
221 222 |
struct list_head cl_lru; /* tail queue */ struct xdr_netobj cl_name; /* id generated by client */ |
a55370a3c [PATCH] knfsd: nf... |
223 |
char cl_recdir[HEXDIR_LEN]; /* recovery dir */ |
1da177e4c Linux-2.6.12-rc2 |
224 225 |
nfs4_verifier cl_verifier; /* generated by client */ time_t cl_time; /* time of last lease renewal */ |
363168b4e nfsd: make nfs4_c... |
226 |
struct sockaddr_storage cl_addr; /* client ipaddress */ |
61054b14d nfsd: support cal... |
227 |
u32 cl_flavor; /* setclientid pseudoflavor */ |
68e76ad0b nfsd: pass client... |
228 |
char *cl_principal; /* setclientid principal name */ |
1da177e4c Linux-2.6.12-rc2 |
229 230 231 |
struct svc_cred cl_cred; /* setclientid principal */ clientid_t cl_clientid; /* generated by server */ nfs4_verifier cl_confirm; /* generated by server */ |
c7b9a4592 [PATCH] knfsd: nf... |
232 |
u32 cl_firststate; /* recovery dir creation */ |
8323c3b2a nfsd4: move minor... |
233 |
u32 cl_minorversion; |
9fb870702 nfsd41: introduce... |
234 |
|
2bf23875f nfsd4: rearrange ... |
235 236 |
/* for v4.0 and v4.1 callbacks: */ struct nfs4_cb_conn cl_cb_conn; |
6ff8da088 nfsd4: Move callb... |
237 238 239 |
#define NFSD4_CLIENT_CB_UPDATE 1 #define NFSD4_CLIENT_KILL 2 unsigned long cl_cb_flags; |
2bf23875f nfsd4: rearrange ... |
240 |
struct rpc_clnt *cl_cb_client; |
6ff8da088 nfsd4: Move callb... |
241 |
u32 cl_cb_ident; |
77a3569d6 nfsd4: keep finer... |
242 243 244 |
#define NFSD4_CB_UP 0 #define NFSD4_CB_UNKNOWN 1 #define NFSD4_CB_DOWN 2 |
5423732a7 nfsd41: use SEQ4_... |
245 |
#define NFSD4_CB_FAULT 3 |
77a3569d6 nfsd4: keep finer... |
246 |
int cl_cb_state; |
cee277d92 nfsd4: use generi... |
247 |
struct nfsd4_callback cl_cb_null; |
edd767866 nfsd4: move callb... |
248 |
struct nfsd4_session *cl_cb_session; |
5ce8ba25d nfsd4: allow rest... |
249 |
struct list_head cl_callbacks; /* list of in-progress callbacks */ |
2bf23875f nfsd4: rearrange ... |
250 |
|
6ff8da088 nfsd4: Move callb... |
251 252 |
/* for all client information that callback code might need: */ spinlock_t cl_lock; |
9fb870702 nfsd41: introduce... |
253 254 |
/* for nfs41 */ struct list_head cl_sessions; |
49557cc74 nfsd41: Use separ... |
255 |
struct nfsd4_clid_slot cl_cs_slot; /* create_session slot */ |
0733d2133 nfsd41: exchange_... |
256 |
u32 cl_exchange_flags; |
46583e259 nfsd4: introduce ... |
257 258 |
/* number of rpc's in progress over an associated session: */ atomic_t cl_refcount; |
38524ab38 nfsd41: Backchann... |
259 260 |
/* for nfs41 callbacks */ |
199ff35e1 nfsd41: Backchann... |
261 262 |
/* We currently support a single back channel with a single slot */ unsigned long cl_cb_slot_busy; |
199ff35e1 nfsd41: Backchann... |
263 264 |
struct rpc_wait_queue cl_cb_waitq; /* backchannel callers may */ /* wait here for slots */ |
1da177e4c Linux-2.6.12-rc2 |
265 |
}; |
07cd4909a nfsd4: mark_clien... |
266 267 268 269 270 271 272 273 274 275 276 |
static inline void mark_client_expired(struct nfs4_client *clp) { clp->cl_time = 0; } static inline bool is_client_expired(struct nfs4_client *clp) { return clp->cl_time == 0; } |
1da177e4c Linux-2.6.12-rc2 |
277 278 279 280 281 282 283 |
/* struct nfs4_client_reset * one per old client. Populates reset_str_hashtbl. Filled from conf_id_hashtbl * upon lease reset, or from upcall to state_daemon (to read in state * from non-volitile storage) upon reboot. */ struct nfs4_client_reclaim { struct list_head cr_strhash; /* hash by cr_name */ |
a55370a3c [PATCH] knfsd: nf... |
284 |
char cr_recdir[HEXDIR_LEN]; /* recover dir */ |
1da177e4c Linux-2.6.12-rc2 |
285 286 287 288 289 290 |
}; static inline void update_stateid(stateid_t *stateid) { stateid->si_generation++; |
81b829655 nfsd4: simplify s... |
291 292 293 |
/* Wraparound recommendation from 3530bis-13 9.1.3.2: */ if (stateid->si_generation == 0) stateid->si_generation = 1; |
1da177e4c Linux-2.6.12-rc2 |
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 |
} /* A reasonable value for REPLAY_ISIZE was estimated as follows: * The OPEN response, typically the largest, requires * 4(status) + 8(stateid) + 20(changeinfo) + 4(rflags) + 8(verifier) + * 4(deleg. type) + 8(deleg. stateid) + 4(deleg. recall flag) + * 20(deleg. space limit) + ~32(deleg. ace) = 112 bytes */ #define NFSD4_REPLAY_ISIZE 112 /* * Replay buffer, where the result of the last seqid-mutating operation * is cached. */ struct nfs4_replay { |
b37ad28bc [PATCH] nfsd: nfs... |
310 |
__be32 rp_status; |
1da177e4c Linux-2.6.12-rc2 |
311 312 |
unsigned int rp_buflen; char *rp_buf; |
a4773c08f nfsd4: use helper... |
313 |
struct knfsd_fh rp_openfh; |
1da177e4c Linux-2.6.12-rc2 |
314 315 |
char rp_ibuf[NFSD4_REPLAY_ISIZE]; }; |
1da177e4c Linux-2.6.12-rc2 |
316 |
struct nfs4_stateowner { |
1da177e4c Linux-2.6.12-rc2 |
317 |
struct list_head so_strhash; /* hash by op_name */ |
ea1da636e [PATCH] knfsd: nf... |
318 |
struct list_head so_stateids; |
1da177e4c Linux-2.6.12-rc2 |
319 |
struct nfs4_client * so_client; |
7fb64cee3 [PATCH] nfsd4: se... |
320 321 322 |
/* after increment in ENCODE_SEQID_OP_TAIL, represents the next * sequence id expected from the client: */ u32 so_seqid; |
1da177e4c Linux-2.6.12-rc2 |
323 |
struct xdr_netobj so_owner; /* open owner name */ |
1da177e4c Linux-2.6.12-rc2 |
324 |
struct nfs4_replay so_replay; |
3557e43b8 nfsd4: make is_op... |
325 |
bool so_is_open_owner; |
1da177e4c Linux-2.6.12-rc2 |
326 |
}; |
fe0750e5c nfsd4: split stat... |
327 328 329 |
struct nfs4_openowner { struct nfs4_stateowner oo_owner; /* must be first field */ struct list_head oo_perclient; |
b31b30e5c nfsd4: cleanup st... |
330 331 332 333 334 335 336 337 |
/* * We keep around openowners a little while after last close, * which saves clients from having to confirm, and allows us to * handle close replays if they come soon enough. The close_lru * is a list of such openowners, to be reaped by the laundromat * thread eventually if they remain unused: */ struct list_head oo_close_lru; |
38c387b52 nfsd4: match clos... |
338 |
struct nfs4_ol_stateid *oo_last_closed_stid; |
fe0750e5c nfsd4: split stat... |
339 |
time_t oo_time; /* time of placement on so_close_lru */ |
dad1c067e nfsd4: replace oo... |
340 |
#define NFS4_OO_CONFIRMED 1 |
38c387b52 nfsd4: match clos... |
341 |
#define NFS4_OO_PURGE_CLOSE 2 |
d29b20cd5 nfsd4: clean up o... |
342 |
#define NFS4_OO_NEW 4 |
dad1c067e nfsd4: replace oo... |
343 |
unsigned char oo_flags; |
fe0750e5c nfsd4: split stat... |
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 |
}; struct nfs4_lockowner { struct nfs4_stateowner lo_owner; /* must be first element */ struct list_head lo_perstateid; /* for lockowners only */ struct list_head lo_list; /* for temporary uses */ }; static inline struct nfs4_openowner * openowner(struct nfs4_stateowner *so) { return container_of(so, struct nfs4_openowner, oo_owner); } static inline struct nfs4_lockowner * lockowner(struct nfs4_stateowner *so) { return container_of(so, struct nfs4_lockowner, lo_owner); } |
1da177e4c Linux-2.6.12-rc2 |
361 362 363 364 365 366 |
/* * nfs4_file: a file opened by some number of (open) nfs4_stateowners. * o fi_perfile list is used to search for conflicting * share_acces, share_deny on the file. */ struct nfs4_file { |
8b671b807 nfsd4: remove use... |
367 |
atomic_t fi_ref; |
1da177e4c Linux-2.6.12-rc2 |
368 |
struct list_head fi_hash; /* hash by "struct inode *" */ |
8beefa249 [PATCH] nfsd4: re... |
369 370 |
struct list_head fi_stateids; struct list_head fi_delegations; |
f9d7562fd nfsd4: share file... |
371 372 |
/* One each for O_RDONLY, O_WRONLY, O_RDWR: */ struct file * fi_fds[3]; |
f9d7562fd nfsd4: share file... |
373 |
/* |
6409a5a65 nfsd4: clean up d... |
374 375 376 377 378 |
* Each open or lock stateid contributes 0-4 to the counts * below depending on which bits are set in st_access_bitmap: * 1 to fi_access[O_RDONLY] if NFS4_SHARE_ACCES_READ is set * + 1 to fi_access[O_WRONLY] if NFS4_SHARE_ACCESS_WRITE is set * + 1 to both of the above if NFS4_SHARE_ACCESS_BOTH is set. |
f9d7562fd nfsd4: share file... |
379 |
*/ |
9ae78bcc0 nfsd4: fix commen... |
380 |
atomic_t fi_access[2]; |
acfdf5c38 nfsd4: acquire on... |
381 382 383 |
struct file *fi_deleg_file; struct file_lock *fi_lease; atomic_t fi_delegees; |
1da177e4c Linux-2.6.12-rc2 |
384 |
struct inode *fi_inode; |
47f9940c5 knfsd: nfsd4: don... |
385 |
bool fi_had_conflict; |
1da177e4c Linux-2.6.12-rc2 |
386 |
}; |
f9d7562fd nfsd4: share file... |
387 388 389 390 |
/* XXX: for first cut may fall back on returning file that doesn't work * at all? */ static inline struct file *find_writeable_file(struct nfs4_file *f) { |
7d9478429 nfsd4: fix downgr... |
391 392 393 |
if (f->fi_fds[O_WRONLY]) return f->fi_fds[O_WRONLY]; return f->fi_fds[O_RDWR]; |
f9d7562fd nfsd4: share file... |
394 395 396 397 |
} static inline struct file *find_readable_file(struct nfs4_file *f) { |
7d9478429 nfsd4: fix downgr... |
398 399 400 |
if (f->fi_fds[O_RDONLY]) return f->fi_fds[O_RDONLY]; return f->fi_fds[O_RDWR]; |
f9d7562fd nfsd4: share file... |
401 402 403 404 405 406 |
} static inline struct file *find_any_file(struct nfs4_file *f) { if (f->fi_fds[O_RDWR]) return f->fi_fds[O_RDWR]; |
18608ad49 nfsd4: typo fix i... |
407 |
else if (f->fi_fds[O_WRONLY]) |
f9d7562fd nfsd4: share file... |
408 409 410 411 |
return f->fi_fds[O_WRONLY]; else return f->fi_fds[O_RDONLY]; } |
d5477a8db nfsd4: add common... |
412 |
/* "ol" stands for "Open or Lock". Better suggestions welcome. */ |
dcef0413d nfsd4: move some ... |
413 |
struct nfs4_ol_stateid { |
996e09385 nfsd4: do idr pre... |
414 |
struct nfs4_stid st_stid; /* must be first field */ |
1da177e4c Linux-2.6.12-rc2 |
415 |
struct list_head st_perfile; |
ea1da636e [PATCH] knfsd: nf... |
416 417 |
struct list_head st_perstateowner; struct list_head st_lockowners; |
1da177e4c Linux-2.6.12-rc2 |
418 419 |
struct nfs4_stateowner * st_stateowner; struct nfs4_file * st_file; |
1da177e4c Linux-2.6.12-rc2 |
420 421 |
unsigned long st_access_bmap; unsigned long st_deny_bmap; |
dcef0413d nfsd4: move some ... |
422 |
struct nfs4_ol_stateid * st_openstp; |
1da177e4c Linux-2.6.12-rc2 |
423 |
}; |
dcef0413d nfsd4: move some ... |
424 425 426 427 |
static inline struct nfs4_ol_stateid *openlockstateid(struct nfs4_stid *s) { return container_of(s, struct nfs4_ol_stateid, st_stid); } |
1da177e4c Linux-2.6.12-rc2 |
428 |
/* flags for preprocess_seqid_op() */ |
1da177e4c Linux-2.6.12-rc2 |
429 430 |
#define RD_STATE 0x00000010 #define WR_STATE 0x00000020 |
1da177e4c Linux-2.6.12-rc2 |
431 |
|
dd453dfd7 nfsd: pass nfsd4_... |
432 433 434 |
struct nfsd4_compound_state; extern __be32 nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate, |
1da177e4c Linux-2.6.12-rc2 |
435 |
stateid_t *stateid, int flags, struct file **filp); |
1da177e4c Linux-2.6.12-rc2 |
436 437 438 |
extern void nfs4_lock_state(void); extern void nfs4_unlock_state(void); extern int nfs4_in_grace(void); |
b37ad28bc [PATCH] nfsd: nfs... |
439 |
extern __be32 nfs4_check_open_reclaim(clientid_t *clid); |
fe0750e5c nfsd4: split stat... |
440 441 |
extern void nfs4_free_openowner(struct nfs4_openowner *); extern void nfs4_free_lockowner(struct nfs4_lockowner *); |
80fc015bd nfsd4: use common... |
442 |
extern int set_callback_cred(void); |
5a3c9d713 nfsd4: separate c... |
443 |
extern void nfsd4_probe_callback(struct nfs4_client *clp); |
84f5f7ccc nfsd4: make sure ... |
444 |
extern void nfsd4_probe_callback_sync(struct nfs4_client *clp); |
5a3c9d713 nfsd4: separate c... |
445 |
extern void nfsd4_change_callback(struct nfs4_client *clp, struct nfs4_cb_conn *); |
b5a1a81e5 nfsd4: don't slee... |
446 |
extern void nfsd4_do_callback_rpc(struct work_struct *); |
1da177e4c Linux-2.6.12-rc2 |
447 |
extern void nfsd4_cb_recall(struct nfs4_delegation *dp); |
b5a1a81e5 nfsd4: don't slee... |
448 449 |
extern int nfsd4_create_callback_queue(void); extern void nfsd4_destroy_callback_queue(void); |
6ff8da088 nfsd4: Move callb... |
450 |
extern void nfsd4_shutdown_callback(struct nfs4_client *); |
1da177e4c Linux-2.6.12-rc2 |
451 |
extern void nfs4_put_delegation(struct nfs4_delegation *dp); |
b37ad28bc [PATCH] nfsd: nfs... |
452 |
extern __be32 nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname); |
48483bf23 nfsd4: simplify r... |
453 |
extern void nfsd4_init_recdir(void); |
190e4fbf9 [PATCH] knfsd: nf... |
454 455 456 |
extern int nfsd4_recdir_load(void); extern void nfsd4_shutdown_recdir(void); extern int nfs4_client_to_reclaim(const char *name); |
a1bcecd29 nfsd41: match cli... |
457 |
extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id); |
c7b9a4592 [PATCH] knfsd: nf... |
458 459 460 |
extern void nfsd4_recdir_purge_old(void); extern int nfsd4_create_clid_dir(struct nfs4_client *clp); extern void nfsd4_remove_clid_dir(struct nfs4_client *clp); |
d76829889 nfsd4: keep a ref... |
461 |
extern void release_session_client(struct nfsd4_session *); |
38c2f4b12 nfsd4: look up st... |
462 |
extern __be32 nfs4_validate_stateid(struct nfs4_client *, stateid_t *); |
38c387b52 nfsd4: match clos... |
463 |
extern void nfsd4_purge_closed_stateid(struct nfs4_stateowner *); |
1da177e4c Linux-2.6.12-rc2 |
464 |
|
1da177e4c Linux-2.6.12-rc2 |
465 |
#endif /* NFSD4_STATE_H */ |