linux/fs/nfsd/cache.h
<<
>>
Prefs
   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 *
  16 * Note that we use a sockaddr_in6 to hold the address instead of the more
  17 * typical sockaddr_storage. This is for space reasons, since sockaddr_storage
  18 * is much larger than a sockaddr_in6.
  19 */
  20struct svc_cacherep {
  21        struct hlist_node       c_hash;
  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 */
  88