Home | History | Annotate | Download | only in sharefs
      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	"@(#)sharefs.h	1.1	07/04/02 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