Home | History | Annotate | Download | only in nfs
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 /*
     22  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 #ifndef _NFS4_DRC_H
     27 #define	_NFS4_DRC_H
     28 
     29 #pragma ident	"@(#)nfs4_drc.h	1.2	06/09/25 SMI"
     30 
     31 #ifdef	__cplusplus
     32 extern "C" {
     33 #endif
     34 
     35 /*
     36  * NFSv4 Duplicate Request cache.
     37  */
     38 typedef struct rfs4_drc {
     39 	kmutex_t 	lock;
     40 	uint32_t	dr_hash;
     41 	uint32_t 	max_size;
     42 	uint32_t 	in_use;
     43 	list_t		dr_cache;
     44 	list_t  	*dr_buckets;
     45 } rfs4_drc_t;
     46 
     47 /*
     48  * NFSv4 Duplicate request cache entry.
     49  */
     50 typedef struct rfs4_dupreq {
     51 	list_node_t 	dr_bkt_next;
     52 	list_node_t	dr_next;
     53 	list_t		*dr_bkt;
     54 	rfs4_drc_t	*drc;
     55 	int		dr_state;
     56 	timestruc_t 	dr_time_created;
     57 	timestruc_t 	dr_time_used;
     58 	uint32_t	dr_xid;
     59 	struct netbuf	dr_addr;
     60 	COMPOUND4res 	dr_res;
     61 } rfs4_dupreq_t;
     62 
     63 /*
     64  *  State of rfs4_dupreq.
     65  */
     66 #define	NFS4_DUP_ERROR		-1
     67 #define	NFS4_NOT_DUP		0
     68 #define	NFS4_DUP_NEW		1
     69 #define	NFS4_DUP_PENDING	2
     70 #define	NFS4_DUP_FREE		3
     71 
     72 #define	NFS4_DUP_REPLAY 	4
     73 #define	NFS4_DUP_INUSE		5
     74 
     75 extern rfs4_drc_t *nfs4_drc;
     76 extern unsigned nfs4_drc_lifetime;
     77 extern uint32_t nfs4_drc_max;
     78 extern uint32_t nfs4_drc_hash;
     79 
     80 rfs4_drc_t *rfs4_init_drc(uint32_t, uint32_t);
     81 void rfs4_fini_drc(rfs4_drc_t *);
     82 void rfs4_dr_chstate(rfs4_dupreq_t *, int);
     83 rfs4_dupreq_t *rfs4_alloc_dr(rfs4_drc_t *);
     84 int rfs4_find_dr(struct svc_req *, rfs4_drc_t *, rfs4_dupreq_t **);
     85 
     86 #ifdef	__cplusplus
     87 }
     88 #endif
     89 
     90 #endif /* _NFS4_DRC_H */
     91