xref: /illumos-gate/usr/src/uts/common/sharefs/sharefs.h (revision 5422785d352a2bb398daceab3d1898a8aa64d006)
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 /*
23  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _SHAREFS_SHAREFS_H
28 #define	_SHAREFS_SHAREFS_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 /*
33  * This header provides service for the sharefs module.
34  */
35 
36 #include <sys/modctl.h>
37 #include <sys/vfs.h>
38 #include <sys/vnode.h>
39 #include <sys/gfs.h>
40 #include <sharefs/share.h>
41 #include <sharefs/sharetab.h>
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 #define	SHAREFS_ROOT	"/etc/dfs"
48 #define	SHAREFS_BASE	"sharetab"
49 
50 /*
51  * Lengths of strings.
52  */
53 typedef struct sharefs_lens {
54 	int	shl_path;
55 	int	shl_res;
56 	int	shl_fstype;
57 	int	shl_opts;
58 	int	shl_descr;
59 } sharefs_lens_t;
60 
61 /*
62  * VFS data object
63  */
64 typedef struct sharefs_vfs {
65 	vnode_t	*sharefs_vfs_root;
66 } sharefs_vfs_t;
67 
68 #define	SHAREFS_NAME_MAX	MAXNAMELEN
69 
70 /*
71  * The lock ordering whenever sharefs_lock and sharetab_lock both
72  * need to be held is: sharefs_lock and then sharetab_lock.
73  */
74 extern krwlock_t	sharefs_lock;	/* lock for the vnode ops */
75 extern sharetab_t	*sharefs_sharetab;	/* The sharetab. */
76 
77 extern uint_t		sharetab_count;	/* How many shares? */
78 extern krwlock_t	sharetab_lock;	/* lock for the cached sharetab */
79 extern size_t		sharetab_size;	/* How big is the sharetab file? */
80 
81 extern timestruc_t	sharetab_mtime;	/* Last mod to sharetab */
82 extern timestruc_t	sharetab_snap_time;	/* Last snap */
83 extern uint_t		sharetab_generation;	/* Which copy is it? */
84 
85 #define	SHAREFS_INO_FILE	0x80
86 
87 extern vnode_t *sharefs_create_root_file(vfs_t *);
88 
89 /*
90  * Sharetab file
91  *
92  * Note that even though the sharetab code does not explictly
93  * use 'sharefs_file', it is required by GFS that the first
94  * field of the private data be a gfs_file_t.
95  */
96 typedef struct shnode_t {
97 	gfs_file_t	sharefs_file;		/* gfs file */
98 	char		*sharefs_snap;		/* snapshot of the share */
99 	size_t		sharefs_size;		/* size of the snapshot */
100 	uint_t		sharefs_count;		/* number of shares */
101 	uint_t		sharefs_refs;		/* reference count */
102 	uint_t		sharefs_real_vp;	/* Are we a real or snap */
103 	uint_t		sharefs_generation;	/* Which copy are we? */
104 	timestruc_t	sharefs_snap_time;	/* When were we modded? */
105 } shnode_t;
106 
107 /*
108  * Some conversion macros:
109  */
110 #define	VTOSH(vp)	((shnode_t *)((vp)->v_data))
111 
112 extern const fs_operation_def_t	sharefs_tops_data[];
113 extern vnodeops_t		*sharefs_ops_data;
114 
115 extern void sharefs_data_init(void);
116 
117 extern void sharefs_sharetab_init(void);
118 
119 #ifdef __cplusplus
120 }
121 #endif
122 
123 #endif /* !_SHAREFS_SHAREFS_H */
124