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