zio.h revision 44cd46cadd9aab751dae6a4023c1cb5bf316d274
2N/A * The contents of this file are subject to the terms of the 2N/A * Common Development and Distribution License (the "License"). 2N/A * You may not use this file except in compliance with the License. 2N/A * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 2N/A * If applicable, add the following below this CDDL HEADER, with the 2N/A * fields enclosed by brackets "[]" replaced with your own identifying 2N/A * information: Portions Copyright [yyyy] [name of copyright owner] 2N/A * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 2N/A * Use is subject to license terms. 2N/A#
pragma ident "%Z%%M% %I% %E% SMI" 2N/A#
define ZBT_MAGIC 0x210da7ab10c7a11ULL /* zio data bloc tail */ 2N/A * Gang block headers are self-checksumming and contain an array 2N/A * of block pointers. 2N/A * We'll take the unused errno 'EBADE' (from the Convergent graveyard) 2N/A * to indicate checksum errors. 2N/A * A bookmark is a four-tuple <objset, object, level, blkid> that uniquely 2N/A * identifies any block in the pool. By convention, the meta-objset (MOS) 2N/A * is objset 0, the meta-dnode is object 0, the root block (osphys_t) is 2N/A * level -1 of the meta-dnode, and intent log blocks (which are chained 2N/A * off the root block) have blkid == sequence number. In summary: 2N/A * meta-dnode is object 0 2N/A * root block is <objset, 0, -1, 0> 2N/A * intent log is <objset, 0, -1, ZIL sequence number> 2N/A * Note: this structure is called a bookmark because its first purpose was 2N/A * to remember where to resume a pool-wide traverse. The absolute ordering 2N/A * for block visitation during traversal is defined in compare_bookmark(). 2N/A * Note: this structure is passed between userland and the kernel. 2N/A * Therefore it must not change size or alignment between 32/64 bit 2N/A * compilation options. 2N/A /* Core information about this I/O */ /* Data represented by this I/O */ /* Stuff for the vdev stack */ /* Internal pipeline state */ * Move an I/O to the next stage of the pipeline and execute that stage. * There's no locking on io_stage because there's no legitimate way for * multiple threads to be attempting to process the same I/O. * Delegate I/O to a child vdev. * Initial setup and teardown.