Linux Audio

Check our new training course

Yocto distribution development and maintenance

Need a Yocto distribution for your embedded project?
Loading...
v4.17
 1/* SPDX-License-Identifier: GPL-2.0 */
 2/*
 3 * Request reply cache. This was heavily inspired by the
 4 * implementation in 4.3BSD/4.4BSD.
 5 *
 6 * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
 7 */
 8
 9#ifndef NFSCACHE_H
10#define NFSCACHE_H
11
12#include <linux/sunrpc/svc.h>
 
13
14/*
15 * Representation of a reply cache entry.
16 *
17 * Note that we use a sockaddr_in6 to hold the address instead of the more
18 * typical sockaddr_storage. This is for space reasons, since sockaddr_storage
19 * is much larger than a sockaddr_in6.
20 */
21struct svc_cacherep {
22	struct list_head	c_lru;
 
 
 
 
 
 
 
 
 
23
 
 
24	unsigned char		c_state,	/* unused, inprog, done */
25				c_type,		/* status, buffer */
26				c_secure : 1;	/* req came from port < 1024 */
27	struct sockaddr_in6	c_addr;
28	__be32			c_xid;
29	u32			c_prot;
30	u32			c_proc;
31	u32			c_vers;
32	unsigned int		c_len;
33	__wsum			c_csum;
34	unsigned long		c_timestamp;
35	union {
36		struct kvec	u_vec;
37		__be32		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 */
45enum {
46	RC_UNUSED,
47	RC_INPROG,
48	RC_DONE
49};
50
51/* return values */
52enum {
53	RC_DROPIT,
54	RC_REPLY,
55	RC_DOIT
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
75/* Cache entries expire after this time period */
76#define RC_EXPIRE		(120 * HZ)
77
78/* Checksum this amount of the request */
79#define RC_CSUMLEN		(256U)
80
81int	nfsd_reply_cache_init(void);
82void	nfsd_reply_cache_shutdown(void);
83int	nfsd_cache_lookup(struct svc_rqst *);
84void	nfsd_cache_update(struct svc_rqst *, int, __be32 *);
85int	nfsd_reply_cache_stats_open(struct inode *, struct file *);
 
 
 
 
86
87#endif /* NFSCACHE_H */
v6.9.4
 1/* SPDX-License-Identifier: GPL-2.0 */
 2/*
 3 * Request reply cache. This was heavily inspired by the
 4 * implementation in 4.3BSD/4.4BSD.
 5 *
 6 * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
 7 */
 8
 9#ifndef NFSCACHE_H
10#define NFSCACHE_H
11
12#include <linux/sunrpc/svc.h>
13#include "netns.h"
14
15/*
16 * Representation of a reply cache entry.
17 *
18 * Note that we use a sockaddr_in6 to hold the address instead of the more
19 * typical sockaddr_storage. This is for space reasons, since sockaddr_storage
20 * is much larger than a sockaddr_in6.
21 */
22struct nfsd_cacherep {
23	struct {
24		/* Keep often-read xid, csum in the same cache line: */
25		__be32			k_xid;
26		__wsum			k_csum;
27		u32			k_proc;
28		u32			k_prot;
29		u32			k_vers;
30		unsigned int		k_len;
31		struct sockaddr_in6	k_addr;
32	} c_key;
33
34	struct rb_node		c_node;
35	struct list_head	c_lru;
36	unsigned char		c_state,	/* unused, inprog, done */
37				c_type,		/* status, buffer */
38				c_secure : 1;	/* req came from port < 1024 */
 
 
 
 
 
 
 
39	unsigned long		c_timestamp;
40	union {
41		struct kvec	u_vec;
42		__be32		u_status;
43	}			c_u;
44};
45
46#define c_replvec		c_u.u_vec
47#define c_replstat		c_u.u_status
48
49/* cache entry states */
50enum {
51	RC_UNUSED,
52	RC_INPROG,
53	RC_DONE
54};
55
56/* return values */
57enum {
58	RC_DROPIT,
59	RC_REPLY,
60	RC_DOIT
61};
62
63/*
64 * Cache types.
65 * We may want to add more types one day, e.g. for diropres and
66 * attrstat replies. Using cache entries with fixed length instead
67 * of buffer pointers may be more efficient.
68 */
69enum {
70	RC_NOCACHE,
71	RC_REPLSTAT,
72	RC_REPLBUFF,
73};
74
 
 
 
 
 
75/* Cache entries expire after this time period */
76#define RC_EXPIRE		(120 * HZ)
77
78/* Checksum this amount of the request */
79#define RC_CSUMLEN		(256U)
80
81int	nfsd_drc_slab_create(void);
82void	nfsd_drc_slab_free(void);
83int	nfsd_reply_cache_init(struct nfsd_net *);
84void	nfsd_reply_cache_shutdown(struct nfsd_net *);
85int	nfsd_cache_lookup(struct svc_rqst *rqstp, unsigned int start,
86			  unsigned int len, struct nfsd_cacherep **cacherep);
87void	nfsd_cache_update(struct svc_rqst *rqstp, struct nfsd_cacherep *rp,
88			  int cachetype, __be32 *statp);
89int	nfsd_reply_cache_stats_show(struct seq_file *m, void *v);
90
91#endif /* NFSCACHE_H */