1*fa9e4066Sahrens /*
2*fa9e4066Sahrens  * CDDL HEADER START
3*fa9e4066Sahrens  *
4*fa9e4066Sahrens  * The contents of this file are subject to the terms of the
5*fa9e4066Sahrens  * Common Development and Distribution License, Version 1.0 only
6*fa9e4066Sahrens  * (the "License").  You may not use this file except in compliance
7*fa9e4066Sahrens  * with the License.
8*fa9e4066Sahrens  *
9*fa9e4066Sahrens  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*fa9e4066Sahrens  * or http://www.opensolaris.org/os/licensing.
11*fa9e4066Sahrens  * See the License for the specific language governing permissions
12*fa9e4066Sahrens  * and limitations under the License.
13*fa9e4066Sahrens  *
14*fa9e4066Sahrens  * When distributing Covered Code, include this CDDL HEADER in each
15*fa9e4066Sahrens  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*fa9e4066Sahrens  * If applicable, add the following below this CDDL HEADER, with the
17*fa9e4066Sahrens  * fields enclosed by brackets "[]" replaced with your own identifying
18*fa9e4066Sahrens  * information: Portions Copyright [yyyy] [name of copyright owner]
19*fa9e4066Sahrens  *
20*fa9e4066Sahrens  * CDDL HEADER END
21*fa9e4066Sahrens  */
22*fa9e4066Sahrens /*
23*fa9e4066Sahrens  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*fa9e4066Sahrens  * Use is subject to license terms.
25*fa9e4066Sahrens  */
26*fa9e4066Sahrens 
27*fa9e4066Sahrens #ifndef _SYS_UBERBLOCK_IMPL_H
28*fa9e4066Sahrens #define	_SYS_UBERBLOCK_IMPL_H
29*fa9e4066Sahrens 
30*fa9e4066Sahrens #pragma ident	"%Z%%M%	%I%	%E% SMI"
31*fa9e4066Sahrens 
32*fa9e4066Sahrens #include <sys/uberblock.h>
33*fa9e4066Sahrens 
34*fa9e4066Sahrens #ifdef	__cplusplus
35*fa9e4066Sahrens extern "C" {
36*fa9e4066Sahrens #endif
37*fa9e4066Sahrens 
38*fa9e4066Sahrens /*
39*fa9e4066Sahrens  * The uberblock version is incremented whenever an incompatible on-disk
40*fa9e4066Sahrens  * format change is made to the SPA, DMU, or ZAP.
41*fa9e4066Sahrens  *
42*fa9e4066Sahrens  * Note: the first two fields should never be moved.  When a storage pool
43*fa9e4066Sahrens  * is opened, the uberblock must be read off the disk before the version
44*fa9e4066Sahrens  * can be checked.  If the ub_version field is moved, we may not detect
45*fa9e4066Sahrens  * version mismatch.  If the ub_magic field is moved, applications that
46*fa9e4066Sahrens  * expect the magic number in the first word won't work.
47*fa9e4066Sahrens  */
48*fa9e4066Sahrens 
49*fa9e4066Sahrens #define	UBERBLOCK_SHIFT		(10)
50*fa9e4066Sahrens #define	UBERBLOCK_SIZE		(1ULL << UBERBLOCK_SHIFT)
51*fa9e4066Sahrens 
52*fa9e4066Sahrens #define	UBERBLOCK_MAGIC		0x00bab10c		/* oo-ba-bloc!	*/
53*fa9e4066Sahrens 
54*fa9e4066Sahrens #define	UBERBLOCK_VERSION	1ULL
55*fa9e4066Sahrens 
56*fa9e4066Sahrens struct uberblock {
57*fa9e4066Sahrens 	uint64_t	ub_magic;	/* UBERBLOCK_MAGIC		*/
58*fa9e4066Sahrens 	uint64_t	ub_version;	/* UBERBLOCK_VERSION		*/
59*fa9e4066Sahrens 	uint64_t	ub_txg;		/* txg of last sync		*/
60*fa9e4066Sahrens 	uint64_t	ub_guid_sum;	/* sum of all vdev guids	*/
61*fa9e4066Sahrens 	uint64_t	ub_timestamp;	/* UTC time of last sync	*/
62*fa9e4066Sahrens 	blkptr_t	ub_rootbp;	/* MOS objset_phys_t		*/
63*fa9e4066Sahrens };
64*fa9e4066Sahrens 
65*fa9e4066Sahrens typedef struct uberblock_phys {
66*fa9e4066Sahrens 	uberblock_t	ubp_uberblock;
67*fa9e4066Sahrens 	char		ubp_pad[UBERBLOCK_SIZE - sizeof (uberblock_t) -
68*fa9e4066Sahrens 	    sizeof (zio_block_tail_t)];
69*fa9e4066Sahrens 	zio_block_tail_t ubp_zbt;
70*fa9e4066Sahrens } uberblock_phys_t;
71*fa9e4066Sahrens 
72*fa9e4066Sahrens #ifdef	__cplusplus
73*fa9e4066Sahrens }
74*fa9e4066Sahrens #endif
75*fa9e4066Sahrens 
76*fa9e4066Sahrens #endif	/* _SYS_UBERBLOCK_IMPL_H */
77