mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	The zpool checkpoint feature in DxOS added a new field in the uberblock. The Multi-Modifier Protection Pull Request from ZoL adds three new fields in the uberblock (Reference: https://github.com/zfsonlinux/zfs/pull/6279). As these two changes come from two different sources and once upstreamed and deployed will introduce an incompatibility with each other we want to upstream a change that will reserve the padding for both of them so integration goes smoothly and everyone gets both features. Porting Notes: Preserved MMP comments in uberblock struct. Authored by: Serapheim Dimitropoulos <serapheim@delphix.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed by: Olaf Faaland <faaland1@llnl.gov> Approved by: Gordon Ross <gwr@nexenta.com> Ported-by: Giuseppe Di Natale <dinatale2@llnl.gov> OpenZFS-issue: https://www.illumos.org/issues/8491 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/d84fa5f Closes #6390
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * CDDL HEADER START
 | 
						|
 *
 | 
						|
 * The contents of this file are subject to the terms of the
 | 
						|
 * Common Development and Distribution License (the "License").
 | 
						|
 * You may not use this file except in compliance with the License.
 | 
						|
 *
 | 
						|
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 | 
						|
 * or http://www.opensolaris.org/os/licensing.
 | 
						|
 * See the License for the specific language governing permissions
 | 
						|
 * and limitations under the License.
 | 
						|
 *
 | 
						|
 * When distributing Covered Code, include this CDDL HEADER in each
 | 
						|
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 | 
						|
 * If applicable, add the following below this CDDL HEADER, with the
 | 
						|
 * fields enclosed by brackets "[]" replaced with your own identifying
 | 
						|
 * information: Portions Copyright [yyyy] [name of copyright owner]
 | 
						|
 *
 | 
						|
 * CDDL HEADER END
 | 
						|
 */
 | 
						|
/*
 | 
						|
 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
 | 
						|
 * Copyright (c) 2017 by Delphix. All rights reserved.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _SYS_UBERBLOCK_IMPL_H
 | 
						|
#define	_SYS_UBERBLOCK_IMPL_H
 | 
						|
 | 
						|
#include <sys/uberblock.h>
 | 
						|
 | 
						|
#ifdef	__cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/*
 | 
						|
 * The uberblock version is incremented whenever an incompatible on-disk
 | 
						|
 * format change is made to the SPA, DMU, or ZAP.
 | 
						|
 *
 | 
						|
 * Note: the first two fields should never be moved.  When a storage pool
 | 
						|
 * is opened, the uberblock must be read off the disk before the version
 | 
						|
 * can be checked.  If the ub_version field is moved, we may not detect
 | 
						|
 * version mismatch.  If the ub_magic field is moved, applications that
 | 
						|
 * expect the magic number in the first word won't work.
 | 
						|
 */
 | 
						|
#define	UBERBLOCK_MAGIC		0x00bab10c		/* oo-ba-bloc!	*/
 | 
						|
#define	UBERBLOCK_SHIFT		10			/* up to 1K	*/
 | 
						|
#define	MMP_MAGIC		0xa11cea11		/* all-see-all  */
 | 
						|
 | 
						|
struct uberblock {
 | 
						|
	uint64_t	ub_magic;	/* UBERBLOCK_MAGIC		*/
 | 
						|
	uint64_t	ub_version;	/* SPA_VERSION			*/
 | 
						|
	uint64_t	ub_txg;		/* txg of last sync		*/
 | 
						|
	uint64_t	ub_guid_sum;	/* sum of all vdev guids	*/
 | 
						|
	uint64_t	ub_timestamp;	/* UTC time of last sync	*/
 | 
						|
	blkptr_t	ub_rootbp;	/* MOS objset_phys_t		*/
 | 
						|
 | 
						|
	/* highest SPA_VERSION supported by software that wrote this txg */
 | 
						|
	uint64_t	ub_software_version;
 | 
						|
 | 
						|
	/* Maybe missing in uberblocks we read, but always written */
 | 
						|
	uint64_t	ub_mmp_magic;	/* MMP_MAGIC			*/
 | 
						|
	uint64_t	ub_mmp_delay;	/* nanosec since last MMP write	*/
 | 
						|
	uint64_t	ub_mmp_seq;	/* reserved for sequence number	*/
 | 
						|
	uint64_t	ub_checkpoint_txg;
 | 
						|
};
 | 
						|
 | 
						|
#ifdef	__cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif	/* _SYS_UBERBLOCK_IMPL_H */
 |