Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
423 | giacomo | 1 | /* |
2 | * include/linux/nfsd/cache.h |
||
3 | * |
||
4 | * Request reply cache. This was heavily inspired by the |
||
5 | * implementation in 4.3BSD/4.4BSD. |
||
6 | * |
||
7 | * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> |
||
8 | */ |
||
9 | |||
10 | #ifndef NFSCACHE_H |
||
11 | #define NFSCACHE_H |
||
12 | |||
13 | #ifdef __KERNEL__ |
||
14 | #include <linux/in.h> |
||
15 | #include <linux/uio.h> |
||
16 | |||
17 | /* |
||
18 | * Representation of a reply cache entry. The first two members *must* |
||
19 | * be hash_next and hash_prev. |
||
20 | */ |
||
21 | struct svc_cacherep { |
||
22 | struct svc_cacherep * c_hash_next; |
||
23 | struct svc_cacherep * c_hash_prev; |
||
24 | struct svc_cacherep * c_lru_next; |
||
25 | struct svc_cacherep * c_lru_prev; |
||
26 | unsigned char c_state, /* unused, inprog, done */ |
||
27 | c_type, /* status, buffer */ |
||
28 | c_secure : 1; /* req came from port < 1024 */ |
||
29 | struct sockaddr_in c_addr; |
||
30 | u32 c_xid; |
||
31 | u32 c_prot; |
||
32 | u32 c_proc; |
||
33 | u32 c_vers; |
||
34 | unsigned long c_timestamp; |
||
35 | union { |
||
36 | struct iovec u_vec; |
||
37 | u32 u_status; |
||
38 | } c_u; |
||
39 | }; |
||
40 | |||
41 | #define c_replvec c_u.u_vec |
||
42 | #define c_replstat c_u.u_status |
||
43 | |||
44 | /* cache entry states */ |
||
45 | enum { |
||
46 | RC_UNUSED, |
||
47 | RC_INPROG, |
||
48 | RC_DONE |
||
49 | }; |
||
50 | |||
51 | /* return values */ |
||
52 | enum { |
||
53 | RC_DROPIT, |
||
54 | RC_REPLY, |
||
55 | RC_DOIT, |
||
56 | RC_INTR |
||
57 | }; |
||
58 | |||
59 | /* |
||
60 | * Cache types. |
||
61 | * We may want to add more types one day, e.g. for diropres and |
||
62 | * attrstat replies. Using cache entries with fixed length instead |
||
63 | * of buffer pointers may be more efficient. |
||
64 | */ |
||
65 | enum { |
||
66 | RC_NOCACHE, |
||
67 | RC_REPLSTAT, |
||
68 | RC_REPLBUFF, |
||
69 | }; |
||
70 | |||
71 | /* |
||
72 | * If requests are retransmitted within this interval, they're dropped. |
||
73 | */ |
||
74 | #define RC_DELAY (HZ/5) |
||
75 | |||
76 | void nfsd_cache_init(void); |
||
77 | void nfsd_cache_shutdown(void); |
||
78 | int nfsd_cache_lookup(struct svc_rqst *, int); |
||
79 | void nfsd_cache_update(struct svc_rqst *, int, u32 *); |
||
80 | |||
81 | #endif /* __KERNEL__ */ |
||
82 | #endif /* NFSCACHE_H */ |