]>
Commit | Line | Data |
---|---|---|
34dc7c2f BB |
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 | /* | |
428870ff | 22 | * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. |
d2734cce | 23 | * Copyright (c) 2016, 2017 by Delphix. All rights reserved. |
34dc7c2f BB |
24 | */ |
25 | ||
26 | #ifndef _SYS_UBERBLOCK_IMPL_H | |
27 | #define _SYS_UBERBLOCK_IMPL_H | |
28 | ||
34dc7c2f BB |
29 | #include <sys/uberblock.h> |
30 | ||
31 | #ifdef __cplusplus | |
32 | extern "C" { | |
33 | #endif | |
34 | ||
35 | /* | |
36 | * The uberblock version is incremented whenever an incompatible on-disk | |
37 | * format change is made to the SPA, DMU, or ZAP. | |
38 | * | |
39 | * Note: the first two fields should never be moved. When a storage pool | |
40 | * is opened, the uberblock must be read off the disk before the version | |
41 | * can be checked. If the ub_version field is moved, we may not detect | |
42 | * version mismatch. If the ub_magic field is moved, applications that | |
43 | * expect the magic number in the first word won't work. | |
44 | */ | |
45 | #define UBERBLOCK_MAGIC 0x00bab10c /* oo-ba-bloc! */ | |
46 | #define UBERBLOCK_SHIFT 10 /* up to 1K */ | |
379ca9cf | 47 | #define MMP_MAGIC 0xa11cea11 /* all-see-all */ |
34dc7c2f BB |
48 | |
49 | struct uberblock { | |
50 | uint64_t ub_magic; /* UBERBLOCK_MAGIC */ | |
51 | uint64_t ub_version; /* SPA_VERSION */ | |
52 | uint64_t ub_txg; /* txg of last sync */ | |
53 | uint64_t ub_guid_sum; /* sum of all vdev guids */ | |
54 | uint64_t ub_timestamp; /* UTC time of last sync */ | |
55 | blkptr_t ub_rootbp; /* MOS objset_phys_t */ | |
428870ff BB |
56 | |
57 | /* highest SPA_VERSION supported by software that wrote this txg */ | |
58 | uint64_t ub_software_version; | |
379ca9cf OF |
59 | |
60 | /* Maybe missing in uberblocks we read, but always written */ | |
61 | uint64_t ub_mmp_magic; /* MMP_MAGIC */ | |
62 | uint64_t ub_mmp_delay; /* nanosec since last MMP write */ | |
63 | uint64_t ub_mmp_seq; /* reserved for sequence number */ | |
d2734cce SD |
64 | |
65 | /* | |
66 | * ub_checkpoint_txg indicates two things about the current uberblock: | |
67 | * | |
68 | * 1] If it is not zero then this uberblock is a checkpoint. If it is | |
69 | * zero, then this uberblock is not a checkpoint. | |
70 | * | |
71 | * 2] On checkpointed uberblocks, the value of ub_checkpoint_txg is | |
72 | * the ub_txg that the uberblock had at the time we moved it to | |
73 | * the MOS config. | |
74 | * | |
75 | * The field is set when we checkpoint the uberblock and continues to | |
76 | * hold that value even after we've rewound (unlike the ub_txg that | |
77 | * is reset to a higher value). | |
78 | * | |
79 | * Besides checks used to determine whether we are reopening the | |
80 | * pool from a checkpointed uberblock [see spa_ld_select_uberblock()], | |
81 | * the value of the field is used to determine which ZIL blocks have | |
82 | * been allocated according to the ms_sm when we are rewinding to a | |
83 | * checkpoint. Specifically, if blk_birth > ub_checkpoint_txg, then | |
84 | * the ZIL block is not allocated [see uses of spa_min_claim_txg()]. | |
85 | */ | |
829f9251 | 86 | uint64_t ub_checkpoint_txg; |
34dc7c2f BB |
87 | }; |
88 | ||
89 | #ifdef __cplusplus | |
90 | } | |
91 | #endif | |
92 | ||
93 | #endif /* _SYS_UBERBLOCK_IMPL_H */ |