1 /* 2 * Copyright (c) 1989 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Rick Macklem at The University of Guelph. 7 * 8 * %sccs.include.redist.c% 9 * 10 * @(#)nfsrvcache.h 7.3 (Berkeley) 06/28/90 11 */ 12 13 /* 14 * Definitions for the server recent request cache 15 */ 16 17 #define NFSRVCACHESIZ 128 18 #define NFSRCHSZ 32 19 20 struct nfsrvcache { 21 struct nfsrvcache *rc_chain[2]; /* Hash chain links */ 22 struct nfsrvcache *rc_next; /* Lru list */ 23 struct nfsrvcache *rc_prev; 24 int rc_state; /* Current state of request */ 25 int rc_flag; /* Flag bits */ 26 struct mbuf rc_nam; /* Sockaddr of requestor */ 27 u_long rc_xid; /* rpc id number */ 28 int rc_proc; /* rpc proc number */ 29 long rc_timestamp; /* Time stamp */ 30 union { 31 struct mbuf *rc_repmb; /* Reply mbuf list OR */ 32 int rc_repstat; /* Reply status */ 33 } rc_un; 34 }; 35 36 #define rc_forw rc_chain[0] 37 #define rc_back rc_chain[1] 38 #define rc_status rc_un.rc_repstat 39 #define rc_reply rc_un.rc_repmb 40 41 #define put_at_head(rp) \ 42 (rp)->rc_prev->rc_next = (rp)->rc_next; \ 43 (rp)->rc_next->rc_prev = (rp)->rc_prev; \ 44 (rp)->rc_next = nfsrvcachehead.rc_next; \ 45 (rp)->rc_next->rc_prev = (rp); \ 46 nfsrvcachehead.rc_next = (rp); \ 47 (rp)->rc_prev = &nfsrvcachehead 48 49 /* Cache entry states */ 50 #define RC_UNUSED 0 51 #define RC_INPROG 1 52 #define RC_DONE 2 53 54 /* Return values */ 55 #define RC_DROPIT 0 56 #define RC_REPLY 1 57 #define RC_DOIT 2 58 59 /* Flag bits */ 60 #define RC_LOCKED 0x1 61 #define RC_WANTED 0x2 62 #define RC_REPSTATUS 0x4 63 #define RC_REPMBUF 0x8 64 65 /* Delay time after completion that request is dropped */ 66 #define RC_DELAY 2 /* seconds */ 67 68