1789Sahrens /* 2789Sahrens * CDDL HEADER START 3789Sahrens * 4789Sahrens * The contents of this file are subject to the terms of the 51544Seschrock * Common Development and Distribution License (the "License"). 61544Seschrock * You may not use this file except in compliance with the License. 7789Sahrens * 8789Sahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9789Sahrens * or http://www.opensolaris.org/os/licensing. 10789Sahrens * See the License for the specific language governing permissions 11789Sahrens * and limitations under the License. 12789Sahrens * 13789Sahrens * When distributing Covered Code, include this CDDL HEADER in each 14789Sahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15789Sahrens * If applicable, add the following below this CDDL HEADER, with the 16789Sahrens * fields enclosed by brackets "[]" replaced with your own identifying 17789Sahrens * information: Portions Copyright [yyyy] [name of copyright owner] 18789Sahrens * 19789Sahrens * CDDL HEADER END 20789Sahrens */ 21789Sahrens /* 22*10922SJeff.Bonwick@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23789Sahrens * Use is subject to license terms. 24789Sahrens */ 25789Sahrens 26789Sahrens #ifndef _ZIO_IMPL_H 27789Sahrens #define _ZIO_IMPL_H 28789Sahrens 29789Sahrens #include <sys/zfs_context.h> 30789Sahrens #include <sys/zio.h> 31789Sahrens 32789Sahrens #ifdef __cplusplus 33789Sahrens extern "C" { 34789Sahrens #endif 35789Sahrens 36789Sahrens /* 37*10922SJeff.Bonwick@Sun.COM * zio pipeline stage definitions 38789Sahrens */ 39*10922SJeff.Bonwick@Sun.COM enum zio_stage { 40*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_OPEN = 1 << 0, /* RWFCI */ 417754SJeff.Bonwick@Sun.COM 42*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_READ_BP_INIT = 1 << 1, /* R---- */ 43*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_FREE_BP_INIT = 1 << 2, /* --F-- */ 44*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_ISSUE_ASYNC = 1 << 3, /* RWF-- */ 45*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_WRITE_BP_INIT = 1 << 4, /* -W--- */ 46789Sahrens 47*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_CHECKSUM_GENERATE = 1 << 5, /* -W--- */ 487754SJeff.Bonwick@Sun.COM 49*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DDT_READ_START = 1 << 6, /* R---- */ 50*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DDT_READ_DONE = 1 << 7, /* R---- */ 51*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DDT_WRITE = 1 << 8, /* -W--- */ 52*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DDT_FREE = 1 << 9, /* --F-- */ 53789Sahrens 54*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_GANG_ASSEMBLE = 1 << 10, /* RWFC- */ 55*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_GANG_ISSUE = 1 << 11, /* RWFC- */ 56789Sahrens 57*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DVA_ALLOCATE = 1 << 12, /* -W--- */ 58*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DVA_FREE = 1 << 13, /* --F-- */ 59*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DVA_CLAIM = 1 << 14, /* ---C- */ 60789Sahrens 61*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_READY = 1 << 15, /* RWFCI */ 62789Sahrens 63*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_VDEV_IO_START = 1 << 16, /* RW--I */ 64*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_VDEV_IO_DONE = 1 << 17, /* RW--I */ 65*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_VDEV_IO_ASSESS = 1 << 18, /* RW--I */ 66789Sahrens 67*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_CHECKSUM_VERIFY = 1 << 19, /* R---- */ 68789Sahrens 69*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DONE = 1 << 20 /* RWFCI */ 70*10922SJeff.Bonwick@Sun.COM }; 71789Sahrens 72*10922SJeff.Bonwick@Sun.COM #define ZIO_INTERLOCK_STAGES \ 73*10922SJeff.Bonwick@Sun.COM (ZIO_STAGE_READY | \ 74*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DONE) 75789Sahrens 76*10922SJeff.Bonwick@Sun.COM #define ZIO_INTERLOCK_PIPELINE \ 777754SJeff.Bonwick@Sun.COM ZIO_INTERLOCK_STAGES 787754SJeff.Bonwick@Sun.COM 79*10922SJeff.Bonwick@Sun.COM #define ZIO_VDEV_IO_STAGES \ 80*10922SJeff.Bonwick@Sun.COM (ZIO_STAGE_VDEV_IO_START | \ 81*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_VDEV_IO_DONE | \ 82*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_VDEV_IO_ASSESS) 83789Sahrens 84*10922SJeff.Bonwick@Sun.COM #define ZIO_VDEV_CHILD_PIPELINE \ 85*10922SJeff.Bonwick@Sun.COM (ZIO_VDEV_IO_STAGES | \ 86*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DONE) 877754SJeff.Bonwick@Sun.COM 88*10922SJeff.Bonwick@Sun.COM #define ZIO_READ_COMMON_STAGES \ 89*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 90*10922SJeff.Bonwick@Sun.COM ZIO_VDEV_IO_STAGES | \ 91*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_CHECKSUM_VERIFY) 92789Sahrens 93*10922SJeff.Bonwick@Sun.COM #define ZIO_READ_PHYS_PIPELINE \ 947754SJeff.Bonwick@Sun.COM ZIO_READ_COMMON_STAGES 955329Sgw25295 96*10922SJeff.Bonwick@Sun.COM #define ZIO_READ_PIPELINE \ 97*10922SJeff.Bonwick@Sun.COM (ZIO_READ_COMMON_STAGES | \ 98*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_READ_BP_INIT) 99*10922SJeff.Bonwick@Sun.COM 100*10922SJeff.Bonwick@Sun.COM #define ZIO_DDT_CHILD_READ_PIPELINE \ 101*10922SJeff.Bonwick@Sun.COM ZIO_READ_COMMON_STAGES 102789Sahrens 103*10922SJeff.Bonwick@Sun.COM #define ZIO_DDT_READ_PIPELINE \ 104*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 105*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_READ_BP_INIT | \ 106*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DDT_READ_START | \ 107*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DDT_READ_DONE) 1085530Sbonwick 109*10922SJeff.Bonwick@Sun.COM #define ZIO_WRITE_COMMON_STAGES \ 110*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 111*10922SJeff.Bonwick@Sun.COM ZIO_VDEV_IO_STAGES | \ 112*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_ISSUE_ASYNC | \ 113*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_CHECKSUM_GENERATE) 114*10922SJeff.Bonwick@Sun.COM 115*10922SJeff.Bonwick@Sun.COM #define ZIO_WRITE_PHYS_PIPELINE \ 1165530Sbonwick ZIO_WRITE_COMMON_STAGES 117789Sahrens 118*10922SJeff.Bonwick@Sun.COM #define ZIO_REWRITE_PIPELINE \ 119*10922SJeff.Bonwick@Sun.COM (ZIO_WRITE_COMMON_STAGES | \ 120*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_WRITE_BP_INIT) 121*10922SJeff.Bonwick@Sun.COM 122*10922SJeff.Bonwick@Sun.COM #define ZIO_WRITE_PIPELINE \ 123*10922SJeff.Bonwick@Sun.COM (ZIO_WRITE_COMMON_STAGES | \ 124*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_WRITE_BP_INIT | \ 125*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DVA_ALLOCATE) 1267754SJeff.Bonwick@Sun.COM 127*10922SJeff.Bonwick@Sun.COM #define ZIO_DDT_CHILD_WRITE_PIPELINE \ 128*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 129*10922SJeff.Bonwick@Sun.COM ZIO_VDEV_IO_STAGES | \ 130*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DVA_ALLOCATE) 131789Sahrens 132*10922SJeff.Bonwick@Sun.COM #define ZIO_DDT_WRITE_PIPELINE \ 133*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 134*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_ISSUE_ASYNC | \ 135*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_WRITE_BP_INIT | \ 136*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_CHECKSUM_GENERATE | \ 137*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DDT_WRITE) 138*10922SJeff.Bonwick@Sun.COM 139*10922SJeff.Bonwick@Sun.COM #define ZIO_GANG_STAGES \ 140*10922SJeff.Bonwick@Sun.COM (ZIO_STAGE_GANG_ASSEMBLE | \ 141*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_GANG_ISSUE) 1425530Sbonwick 143*10922SJeff.Bonwick@Sun.COM #define ZIO_FREE_PIPELINE \ 144*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 145*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_FREE_BP_INIT | \ 146*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DVA_FREE) 1475530Sbonwick 148*10922SJeff.Bonwick@Sun.COM #define ZIO_DDT_FREE_PIPELINE \ 149*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 150*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_FREE_BP_INIT | \ 151*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_ISSUE_ASYNC | \ 152*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DDT_FREE) 153789Sahrens 154*10922SJeff.Bonwick@Sun.COM #define ZIO_CLAIM_PIPELINE \ 155*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 156*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DVA_CLAIM) 1575530Sbonwick 158*10922SJeff.Bonwick@Sun.COM #define ZIO_IOCTL_PIPELINE \ 159*10922SJeff.Bonwick@Sun.COM (ZIO_INTERLOCK_STAGES | \ 160*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_VDEV_IO_START | \ 161*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_VDEV_IO_ASSESS) 162*10922SJeff.Bonwick@Sun.COM 163*10922SJeff.Bonwick@Sun.COM #define ZIO_BLOCKING_STAGES \ 164*10922SJeff.Bonwick@Sun.COM (ZIO_STAGE_DVA_ALLOCATE | \ 165*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_DVA_CLAIM | \ 166*10922SJeff.Bonwick@Sun.COM ZIO_STAGE_VDEV_IO_START) 167789Sahrens 1681544Seschrock extern void zio_inject_init(void); 1691544Seschrock extern void zio_inject_fini(void); 1701544Seschrock 171789Sahrens #ifdef __cplusplus 172789Sahrens } 173789Sahrens #endif 174789Sahrens 175789Sahrens #endif /* _ZIO_IMPL_H */ 176