xref: /rk3399_rockchip-uboot/include/zfs/uberblock_impl.h (revision 326ea986ac150acdc7656d57fca647db80b50158)
14d3c95f5SJorgen Lundman /*
24d3c95f5SJorgen Lundman  *  GRUB  --  GRand Unified Bootloader
34d3c95f5SJorgen Lundman  *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
44d3c95f5SJorgen Lundman  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
64d3c95f5SJorgen Lundman  */
74d3c95f5SJorgen Lundman /*
84d3c95f5SJorgen Lundman  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
94d3c95f5SJorgen Lundman  * Use is subject to license terms.
104d3c95f5SJorgen Lundman  */
114d3c95f5SJorgen Lundman 
124d3c95f5SJorgen Lundman #ifndef _SYS_UBERBLOCK_IMPL_H
134d3c95f5SJorgen Lundman #define	_SYS_UBERBLOCK_IMPL_H
144d3c95f5SJorgen Lundman 
154d3c95f5SJorgen Lundman #define UBMAX(a, b) ((a) > (b) ? (a) : (b))
164d3c95f5SJorgen Lundman 
174d3c95f5SJorgen Lundman /*
184d3c95f5SJorgen Lundman  * The uberblock version is incremented whenever an incompatible on-disk
194d3c95f5SJorgen Lundman  * format change is made to the SPA, DMU, or ZAP.
204d3c95f5SJorgen Lundman  *
214d3c95f5SJorgen Lundman  * Note: the first two fields should never be moved.  When a storage pool
224d3c95f5SJorgen Lundman  * is opened, the uberblock must be read off the disk before the version
234d3c95f5SJorgen Lundman  * can be checked.	If the ub_version field is moved, we may not detect
244d3c95f5SJorgen Lundman  * version mismatch.  If the ub_magic field is moved, applications that
254d3c95f5SJorgen Lundman  * expect the magic number in the first word won't work.
264d3c95f5SJorgen Lundman  */
274d3c95f5SJorgen Lundman #define	UBERBLOCK_MAGIC		0x00bab10c		/* oo-ba-bloc!	*/
284d3c95f5SJorgen Lundman #define	UBERBLOCK_SHIFT		10			/* up to 1K	*/
294d3c95f5SJorgen Lundman 
304d3c95f5SJorgen Lundman typedef struct uberblock {
314d3c95f5SJorgen Lundman 	uint64_t	ub_magic;	/* UBERBLOCK_MAGIC		*/
324d3c95f5SJorgen Lundman 	uint64_t	ub_version;	/* ZFS_VERSION			*/
334d3c95f5SJorgen Lundman 	uint64_t	ub_txg;		/* txg of last sync		*/
344d3c95f5SJorgen Lundman 	uint64_t	ub_guid_sum;	/* sum of all vdev guids	*/
354d3c95f5SJorgen Lundman 	uint64_t	ub_timestamp;	/* UTC time of last sync	*/
364d3c95f5SJorgen Lundman 	blkptr_t	ub_rootbp;	/* MOS objset_phys_t		*/
374d3c95f5SJorgen Lundman } uberblock_t;
384d3c95f5SJorgen Lundman 
394d3c95f5SJorgen Lundman #define	VDEV_UBERBLOCK_SHIFT(as)	UBMAX(as, UBERBLOCK_SHIFT)
404d3c95f5SJorgen Lundman #define	UBERBLOCK_SIZE(as)		(1ULL << VDEV_UBERBLOCK_SHIFT(as))
414d3c95f5SJorgen Lundman 
424d3c95f5SJorgen Lundman /* Number of uberblocks that can fit in the ring at a given ashift */
434d3c95f5SJorgen Lundman #define UBERBLOCK_COUNT(as) (VDEV_UBERBLOCK_RING >> VDEV_UBERBLOCK_SHIFT(as))
444d3c95f5SJorgen Lundman 
454d3c95f5SJorgen Lundman #endif	/* _SYS_UBERBLOCK_IMPL_H */
46