1168404Spjd/*-
2168404Spjd * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org>
3168404Spjd * All rights reserved.
4168404Spjd *
5168404Spjd * Redistribution and use in source and binary forms, with or without
6168404Spjd * modification, are permitted provided that the following conditions
7168404Spjd * are met:
8168404Spjd * 1. Redistributions of source code must retain the above copyright
9168404Spjd *    notice, this list of conditions and the following disclaimer.
10168404Spjd * 2. Redistributions in binary form must reproduce the above copyright
11168404Spjd *    notice, this list of conditions and the following disclaimer in the
12168404Spjd *    documentation and/or other materials provided with the distribution.
13168404Spjd *
14168404Spjd * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
15168404Spjd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16168404Spjd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17168404Spjd * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
18168404Spjd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19168404Spjd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20168404Spjd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21168404Spjd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22168404Spjd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23168404Spjd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24168404Spjd * SUCH DAMAGE.
25168404Spjd *
26168404Spjd * $FreeBSD$
27168404Spjd */
28168404Spjd
29168404Spjd#ifndef _OPENSOLARIS_SYS_VFS_H_
30168404Spjd#define	_OPENSOLARIS_SYS_VFS_H_
31168404Spjd
32168404Spjd#include <sys/param.h>
33168404Spjd
34168404Spjd#ifdef _KERNEL
35168404Spjd
36168404Spjd#include <sys/mount.h>
37168404Spjd#include <sys/vnode.h>
38168404Spjd
39168404Spjd#define	rootdir	rootvnode
40168404Spjd
41168404Spjdtypedef	struct mount	vfs_t;
42168404Spjd
43168404Spjd#define	vfs_flag	mnt_flag
44168404Spjd#define	vfs_data	mnt_data
45168404Spjd#define	vfs_count	mnt_ref
46168404Spjd#define	vfs_fsid	mnt_stat.f_fsid
47168404Spjd#define	vfs_bsize	mnt_stat.f_bsize
48185029Spjd#define	vfs_resource	mnt_stat.f_mntfromname
49168404Spjd
50168404Spjd#define	v_flag		v_vflag
51168404Spjd#define	v_vfsp		v_mount
52168404Spjd
53168404Spjd#define	VFS_RDONLY	MNT_RDONLY
54168404Spjd#define	VFS_NOSETUID	MNT_NOSUID
55168404Spjd#define	VFS_NOEXEC	MNT_NOEXEC
56168404Spjd
57185029Spjd#define	fs_vscan(vp, cr, async)	(0)
58185029Spjd
59168404Spjd#define	VROOT		VV_ROOT
60168404Spjd
61168404Spjd/*
62168404Spjd * Structure defining a mount option for a filesystem.
63168404Spjd * option names are found in mntent.h
64168404Spjd */
65168404Spjdtypedef struct mntopt {
66168404Spjd	char	*mo_name;	/* option name */
67168404Spjd	char	**mo_cancel;	/* list of options cancelled by this one */
68168404Spjd	char	*mo_arg;	/* argument string for this option */
69168404Spjd	int	mo_flags;	/* flags for this mount option */
70168404Spjd	void	*mo_data;	/* filesystem specific data */
71168404Spjd} mntopt_t;
72168404Spjd
73168404Spjd/*
74168404Spjd * Flags that apply to mount options
75168404Spjd */
76168404Spjd
77168404Spjd#define	MO_SET		0x01		/* option is set */
78168404Spjd#define	MO_NODISPLAY	0x02		/* option not listed in mnttab */
79168404Spjd#define	MO_HASVALUE	0x04		/* option takes a value */
80168404Spjd#define	MO_IGNORE	0x08		/* option ignored by parser */
81168404Spjd#define	MO_DEFAULT	MO_SET		/* option is on by default */
82168404Spjd#define	MO_TAG		0x10		/* flags a tag set by user program */
83168404Spjd#define	MO_EMPTY	0x20		/* empty space in option table */
84168404Spjd
85168404Spjd#define	VFS_NOFORCEOPT	0x01		/* honor MO_IGNORE (don't set option) */
86168404Spjd#define	VFS_DISPLAY	0x02		/* Turn off MO_NODISPLAY bit for opt */
87168404Spjd#define	VFS_NODISPLAY	0x04		/* Turn on MO_NODISPLAY bit for opt */
88168404Spjd#define	VFS_CREATEOPT	0x08		/* Create the opt if it's not there */
89168404Spjd
90168404Spjd/*
91168404Spjd * Structure holding mount option strings for the mounted file system.
92168404Spjd */
93168404Spjdtypedef struct mntopts {
94168404Spjd	uint_t		mo_count;		/* number of entries in table */
95168404Spjd	mntopt_t	*mo_list;		/* list of mount options */
96168404Spjd} mntopts_t;
97168404Spjd
98168404Spjdvoid vfs_setmntopt(vfs_t *vfsp, const char *name, const char *arg,
99168404Spjd    int flags __unused);
100168404Spjdvoid vfs_clearmntopt(vfs_t *vfsp, const char *name);
101168404Spjdint vfs_optionisset(const vfs_t *vfsp, const char *opt, char **argp);
102197201Spjdint mount_snapshot(kthread_t *td, vnode_t **vpp, const char *fstype,
103197201Spjd    char *fspath, char *fspec, int fsflags);
104168404Spjd
105185029Spjdtypedef	uint64_t	vfs_feature_t;
106185029Spjd
107185029Spjd#define	VFSFT_XVATTR		0x100000001	/* Supports xvattr for attrs */
108185029Spjd#define	VFSFT_CASEINSENSITIVE	0x100000002	/* Supports case-insensitive */
109185029Spjd#define	VFSFT_NOCASESENSITIVE	0x100000004	/* NOT case-sensitive */
110185029Spjd#define	VFSFT_DIRENTFLAGS	0x100000008	/* Supports dirent flags */
111185029Spjd#define	VFSFT_ACLONCREATE	0x100000010	/* Supports ACL on create */
112185029Spjd#define	VFSFT_ACEMASKONACCESS	0x100000020	/* Can use ACEMASK for access */
113219089Spjd#define	VFSFT_SYSATTR_VIEWS	0x100000040	/* Supports sysattr view i/f */
114219089Spjd#define	VFSFT_ACCESS_FILTER	0x100000080	/* dirents filtered by access */
115219089Spjd#define	VFSFT_REPARSE		0x100000100	/* Supports reparse point */
116219089Spjd#define	VFSFT_ZEROCOPY_SUPPORTED	0x100000200
117219089Spjd				/* Support loaning /returning cache buffer */
118185029Spjd
119219089Spjd#define	vfs_set_feature(vfsp, feature)		do { } while (0)
120219089Spjd#define	vfs_clear_feature(vfsp, feature)	do { } while (0)
121219089Spjd#define	vfs_has_feature(vfsp, feature)		(0)
122185029Spjd
123168404Spjd#endif	/* _KERNEL */
124168404Spjd
125168404Spjd#endif	/* _OPENSOLARIS_SYS_VFS_H_ */
126