root/fs/nfsd/cache.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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  */
  22 struct svc_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 */
  50 enum {
  51         RC_UNUSED,
  52         RC_INPROG,
  53         RC_DONE
  54 };
  55 
  56 /* return values */
  57 enum {
  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  */
  69 enum {
  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 
  81 int     nfsd_reply_cache_init(struct nfsd_net *);
  82 void    nfsd_reply_cache_shutdown(struct nfsd_net *);
  83 int     nfsd_cache_lookup(struct svc_rqst *);
  84 void    nfsd_cache_update(struct svc_rqst *, int, __be32 *);
  85 int     nfsd_reply_cache_stats_open(struct inode *, struct file *);
  86 
  87 #endif /* NFSCACHE_H */

/* [<][>][^][v][top][bottom][index][help] */