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/sched.h>
15
16/*
17 * Representation of a reply cache entry. The first two members *must*
18 * be hash_next and hash_prev.
19 */
20struct svc_cacherep {
21	struct svc_cacherep *	c_hash_next;
22	struct svc_cacherep *	c_hash_prev;
23	struct svc_cacherep *	c_lru_next;
24	struct svc_cacherep *	c_lru_prev;
25	unsigned char		c_state,	/* unused, inprog, done */
26				c_type,		/* status, buffer */
27				c_secure : 1;	/* req came from port < 1024 */
28	struct sockaddr_in	c_addr;
29	u32			c_xid;
30	u32			c_prot;
31	u32			c_proc;
32	u32			c_vers;
33	unsigned long		c_timestamp;
34	union {
35		struct svc_buf	u_buffer;
36		u32		u_status;
37	}			c_u;
38};
39
40#define c_replbuf		c_u.u_buffer
41#define c_replstat		c_u.u_status
42
43/* cache entry states */
44enum {
45	RC_UNUSED,
46	RC_INPROG,
47	RC_DONE
48};
49
50/* return values */
51enum {
52	RC_DROPIT,
53	RC_REPLY,
54	RC_DOIT,
55	RC_INTR
56};
57
58/*
59 * Cache types.
60 * We may want to add more types one day, e.g. for diropres and
61 * attrstat replies. Using cache entries with fixed length instead
62 * of buffer pointers may be more efficient.
63 */
64enum {
65	RC_NOCACHE,
66	RC_REPLSTAT,
67	RC_REPLBUFF,
68};
69
70/*
71 * If requests are retransmitted within this interval, they're dropped.
72 */
73#define RC_DELAY		(HZ/5)
74
75void	nfsd_cache_init(void);
76void	nfsd_cache_shutdown(void);
77int	nfsd_cache_lookup(struct svc_rqst *, int);
78void	nfsd_cache_update(struct svc_rqst *, int, u32 *);
79
80#endif /* __KERNEL__ */
81#endif /* NFSCACHE_H */
82