at v3.3 83 lines 1.7 kB view raw
1/* 2 * Request reply cache. This was heavily inspired by the 3 * implementation in 4.3BSD/4.4BSD. 4 * 5 * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> 6 */ 7 8#ifndef NFSCACHE_H 9#define NFSCACHE_H 10 11#include <linux/sunrpc/svc.h> 12 13/* 14 * Representation of a reply cache entry. 15 */ 16struct svc_cacherep { 17 struct hlist_node c_hash; 18 struct list_head c_lru; 19 20 unsigned char c_state, /* unused, inprog, done */ 21 c_type, /* status, buffer */ 22 c_secure : 1; /* req came from port < 1024 */ 23 struct sockaddr_in c_addr; 24 __be32 c_xid; 25 u32 c_prot; 26 u32 c_proc; 27 u32 c_vers; 28 unsigned long c_timestamp; 29 union { 30 struct kvec u_vec; 31 __be32 u_status; 32 } c_u; 33}; 34 35#define c_replvec c_u.u_vec 36#define c_replstat c_u.u_status 37 38/* cache entry states */ 39enum { 40 RC_UNUSED, 41 RC_INPROG, 42 RC_DONE 43}; 44 45/* return values */ 46enum { 47 RC_DROPIT, 48 RC_REPLY, 49 RC_DOIT, 50 RC_INTR 51}; 52 53/* 54 * Cache types. 55 * We may want to add more types one day, e.g. for diropres and 56 * attrstat replies. Using cache entries with fixed length instead 57 * of buffer pointers may be more efficient. 58 */ 59enum { 60 RC_NOCACHE, 61 RC_REPLSTAT, 62 RC_REPLBUFF, 63}; 64 65/* 66 * If requests are retransmitted within this interval, they're dropped. 67 */ 68#define RC_DELAY (HZ/5) 69 70int nfsd_reply_cache_init(void); 71void nfsd_reply_cache_shutdown(void); 72int nfsd_cache_lookup(struct svc_rqst *); 73void nfsd_cache_update(struct svc_rqst *, int, __be32 *); 74 75#ifdef CONFIG_NFSD_V4 76void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp); 77#else /* CONFIG_NFSD_V4 */ 78static inline void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp) 79{ 80} 81#endif /* CONFIG_NFSD_V4 */ 82 83#endif /* NFSCACHE_H */