usr/src/uts/common/fs/zfs/sys/zfs_vfsops.h
author ahrens
Fri, 29 Jun 2007 16:23:19 -0700
changeset 4577 ed36b0e652bc
parent 3461 c19b22f347d6
child 4720 8edc0d2e6f3f
permissions -rw-r--r--
PSARC/2007/328 zfs upgrade 6552536 'zpool status -v' doesn't work with new (type-bearing) directory entries 6559635 can not import pool whose front labels are gone 6572636 need "zfs upgrade" to change ZPL version number 6572637 store object type in directory entries. 6572648 ZPL's delete queue should not be processed if the filesystem is mounted read-only 6572650 ZFS_VERSION should be SPA_VERSION for readability
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     1
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     2
 * CDDL HEADER START
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     3
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
3461
c19b22f347d6 6514331 in-memory delete queue is not needed
ahrens
parents: 789
diff changeset
     5
 * Common Development and Distribution License (the "License").
c19b22f347d6 6514331 in-memory delete queue is not needed
ahrens
parents: 789
diff changeset
     6
 * You may not use this file except in compliance with the License.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     7
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    11
 * and limitations under the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    12
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    18
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    19
 * CDDL HEADER END
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    20
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    21
/*
3461
c19b22f347d6 6514331 in-memory delete queue is not needed
ahrens
parents: 789
diff changeset
    22
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 * Use is subject to license terms.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
#ifndef	_SYS_FS_ZFS_VFSOPS_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
#define	_SYS_FS_ZFS_VFSOPS_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    30
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
#include <sys/isa_defs.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    32
#include <sys/types32.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
#include <sys/list.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
#include <sys/vfs.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
#include <sys/zil.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
extern "C" {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
typedef struct zfsvfs zfsvfs_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
struct zfsvfs {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
	vfs_t		*z_vfs;		/* generic fs struct */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
	zfsvfs_t	*z_parent;	/* parent fs */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    46
	objset_t	*z_os;		/* objset reference */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    47
	uint64_t	z_root;		/* id of root znode */
3461
c19b22f347d6 6514331 in-memory delete queue is not needed
ahrens
parents: 789
diff changeset
    48
	uint64_t	z_unlinkedobj;	/* id of unlinked zapobj */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    49
	uint64_t	z_max_blksz;	/* maximum block size for files */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    50
	uint64_t	z_assign;	/* TXG_NOWAIT or set by zil_replay() */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    51
	zilog_t		*z_log;		/* intent log pointer */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    52
	uint_t		z_acl_mode;	/* acl chmod/mode behavior */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    53
	uint_t		z_acl_inherit;	/* acl inheritance behavior */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    54
	boolean_t	z_atime;	/* enable atimes mount option */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    55
	boolean_t	z_unmounted1;	/* unmounted phase 1 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    56
	boolean_t	z_unmounted2;	/* unmounted phase 2 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
	uint32_t	z_op_cnt;	/* vnode/vfs operations ref count */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    58
	krwlock_t	z_um_lock;	/* rw lock for umount phase 2 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    59
	list_t		z_all_znodes;	/* all vnodes in the fs */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    60
	kmutex_t	z_znodes_lock;	/* lock for z_all_znodes */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    61
	vnode_t		*z_ctldir;	/* .zfs directory pointer */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    62
	boolean_t	z_show_ctldir;	/* expose .zfs in the root dir */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    63
	boolean_t	z_issnap;	/* true if this is a snapshot */
4577
ed36b0e652bc PSARC/2007/328 zfs upgrade
ahrens
parents: 3461
diff changeset
    64
	uint64_t	z_version;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
#define	ZFS_OBJ_MTX_SZ	64
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    66
	kmutex_t	z_hold_mtx[ZFS_OBJ_MTX_SZ];	/* znode hold locks */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    67
};
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    68
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    69
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    70
 * The total file ID size is limited to 12 bytes (including the length
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    71
 * field) in the NFSv2 protocol.  For historical reasons, this same limit
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    72
 * is currently being imposed by the Solaris NFSv3 implementation...
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    73
 * although the protocol actually permits a maximum of 64 bytes.  It will
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    74
 * not be possible to expand beyond 12 bytes without abandoning support
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    75
 * of NFSv2 and making some changes to the Solaris NFSv3 implementation.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    76
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    77
 * For the time being, we will partition up the available space as follows:
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    78
 *	2 bytes		fid length (required)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    79
 *	6 bytes		object number (48 bits)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    80
 *	4 bytes		generation number (32 bits)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    81
 * We reserve only 48 bits for the object number, as this is the limit
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    82
 * currently defined and imposed by the DMU.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    83
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    84
typedef struct zfid_short {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    85
	uint16_t	zf_len;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    86
	uint8_t		zf_object[6];		/* obj[i] = obj >> (8 * i) */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    87
	uint8_t		zf_gen[4];		/* gen[i] = gen >> (8 * i) */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    88
} zfid_short_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    89
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    90
typedef struct zfid_long {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    91
	zfid_short_t	z_fid;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    92
	uint8_t		zf_setid[6];		/* obj[i] = obj >> (8 * i) */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    93
	uint8_t		zf_setgen[4];		/* gen[i] = gen >> (8 * i) */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    94
} zfid_long_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    95
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    96
#define	SHORT_FID_LEN	(sizeof (zfid_short_t) - sizeof (uint16_t))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    97
#define	LONG_FID_LEN	(sizeof (zfid_long_t) - sizeof (uint16_t))
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    98
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    99
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   100
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   101
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   102
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   103
#endif	/* _SYS_FS_ZFS_VFSOPS_H */