2005-04-17 02:20:36 +04:00
/*
* Request reply cache . This was heavily inspired by the
* implementation in 4.3 BSD / 4.4 BSD .
*
* Copyright ( C ) 1995 , 1996 Olaf Kirch < okir @ monad . swb . de >
*/
# ifndef NFSCACHE_H
# define NFSCACHE_H
2009-12-03 21:28:59 +03:00
# include <linux/sunrpc/svc.h>
2005-04-17 02:20:36 +04:00
/*
2009-04-01 00:28:13 +04:00
* Representation of a reply cache entry .
2013-01-28 23:41:07 +04:00
*
* Note that we use a sockaddr_in6 to hold the address instead of the more
* typical sockaddr_storage . This is for space reasons , since sockaddr_storage
* is much larger than a sockaddr_in6 .
2005-04-17 02:20:36 +04:00
*/
struct svc_cacherep {
struct hlist_node c_hash ;
struct list_head c_lru ;
unsigned char c_state , /* unused, inprog, done */
c_type , /* status, buffer */
c_secure : 1 ; /* req came from port < 1024 */
2013-01-28 23:41:07 +04:00
struct sockaddr_in6 c_addr ;
2006-10-20 10:29:02 +04:00
__be32 c_xid ;
2005-04-17 02:20:36 +04:00
u32 c_prot ;
u32 c_proc ;
u32 c_vers ;
2013-02-04 20:57:27 +04:00
unsigned int c_len ;
__wsum c_csum ;
2005-04-17 02:20:36 +04:00
unsigned long c_timestamp ;
union {
struct kvec u_vec ;
2006-10-20 10:29:02 +04:00
__be32 u_status ;
2005-04-17 02:20:36 +04:00
} c_u ;
} ;
# define c_replvec c_u.u_vec
# define c_replstat c_u.u_status
/* cache entry states */
enum {
RC_UNUSED ,
RC_INPROG ,
RC_DONE
} ;
/* return values */
enum {
RC_DROPIT ,
RC_REPLY ,
2013-01-28 23:41:09 +04:00
RC_DOIT
2005-04-17 02:20:36 +04:00
} ;
/*
* Cache types .
* We may want to add more types one day , e . g . for diropres and
* attrstat replies . Using cache entries with fixed length instead
* of buffer pointers may be more efficient .
*/
enum {
RC_NOCACHE ,
RC_REPLSTAT ,
RC_REPLBUFF ,
} ;
/*
* If requests are retransmitted within this interval , they ' re dropped .
*/
# define RC_DELAY (HZ / 5)
2013-01-28 23:41:13 +04:00
/* Cache entries expire after this time period */
# define RC_EXPIRE (120 * HZ)
2013-02-04 20:57:27 +04:00
/* Checksum this amount of the request */
# define RC_CSUMLEN (256U)
2007-11-09 22:10:56 +03:00
int nfsd_reply_cache_init ( void ) ;
void nfsd_reply_cache_shutdown ( void ) ;
2011-01-24 20:11:02 +03:00
int nfsd_cache_lookup ( struct svc_rqst * ) ;
2006-10-20 10:29:02 +04:00
void nfsd_cache_update ( struct svc_rqst * , int , __be32 * ) ;
2009-04-06 13:00:49 +04:00
# ifdef CONFIG_NFSD_V4
2009-04-03 09:28:15 +04:00
void nfsd4_set_statp ( struct svc_rqst * rqstp , __be32 * statp ) ;
2009-04-06 13:00:49 +04:00
# else /* CONFIG_NFSD_V4 */
static inline void nfsd4_set_statp ( struct svc_rqst * rqstp , __be32 * statp )
{
}
# endif /* CONFIG_NFSD_V4 */
2005-04-17 02:20:36 +04:00
# endif /* NFSCACHE_H */