]>
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 2009 Sun Microsystems, Inc. All rights reserved. |
34dc7c2f BB |
23 | * Use is subject to license terms. |
24 | */ | |
25 | ||
55d85d5a GW |
26 | /* |
27 | * Copyright (c) 2012 by Delphix. All rights reserved. | |
28 | */ | |
29 | ||
34dc7c2f BB |
30 | #ifndef _ZIO_IMPL_H |
31 | #define _ZIO_IMPL_H | |
32 | ||
34dc7c2f BB |
33 | #include <sys/zfs_context.h> |
34 | #include <sys/zio.h> | |
35 | ||
36 | #ifdef __cplusplus | |
37 | extern "C" { | |
38 | #endif | |
39 | ||
40 | /* | |
428870ff | 41 | * zio pipeline stage definitions |
34dc7c2f | 42 | */ |
428870ff BB |
43 | enum zio_stage { |
44 | ZIO_STAGE_OPEN = 1 << 0, /* RWFCI */ | |
34dc7c2f | 45 | |
428870ff BB |
46 | ZIO_STAGE_READ_BP_INIT = 1 << 1, /* R---- */ |
47 | ZIO_STAGE_FREE_BP_INIT = 1 << 2, /* --F-- */ | |
48 | ZIO_STAGE_ISSUE_ASYNC = 1 << 3, /* RWF-- */ | |
49 | ZIO_STAGE_WRITE_BP_INIT = 1 << 4, /* -W--- */ | |
b128c09f | 50 | |
428870ff | 51 | ZIO_STAGE_CHECKSUM_GENERATE = 1 << 5, /* -W--- */ |
b128c09f | 52 | |
428870ff BB |
53 | ZIO_STAGE_DDT_READ_START = 1 << 6, /* R---- */ |
54 | ZIO_STAGE_DDT_READ_DONE = 1 << 7, /* R---- */ | |
55 | ZIO_STAGE_DDT_WRITE = 1 << 8, /* -W--- */ | |
56 | ZIO_STAGE_DDT_FREE = 1 << 9, /* --F-- */ | |
34dc7c2f | 57 | |
428870ff BB |
58 | ZIO_STAGE_GANG_ASSEMBLE = 1 << 10, /* RWFC- */ |
59 | ZIO_STAGE_GANG_ISSUE = 1 << 11, /* RWFC- */ | |
34dc7c2f | 60 | |
428870ff BB |
61 | ZIO_STAGE_DVA_ALLOCATE = 1 << 12, /* -W--- */ |
62 | ZIO_STAGE_DVA_FREE = 1 << 13, /* --F-- */ | |
63 | ZIO_STAGE_DVA_CLAIM = 1 << 14, /* ---C- */ | |
34dc7c2f | 64 | |
428870ff | 65 | ZIO_STAGE_READY = 1 << 15, /* RWFCI */ |
34dc7c2f | 66 | |
428870ff BB |
67 | ZIO_STAGE_VDEV_IO_START = 1 << 16, /* RW--I */ |
68 | ZIO_STAGE_VDEV_IO_DONE = 1 << 17, /* RW--I */ | |
69 | ZIO_STAGE_VDEV_IO_ASSESS = 1 << 18, /* RW--I */ | |
34dc7c2f | 70 | |
428870ff | 71 | ZIO_STAGE_CHECKSUM_VERIFY = 1 << 19, /* R---- */ |
34dc7c2f | 72 | |
428870ff BB |
73 | ZIO_STAGE_DONE = 1 << 20 /* RWFCI */ |
74 | }; | |
34dc7c2f | 75 | |
428870ff BB |
76 | #define ZIO_INTERLOCK_STAGES \ |
77 | (ZIO_STAGE_READY | \ | |
78 | ZIO_STAGE_DONE) | |
34dc7c2f | 79 | |
428870ff | 80 | #define ZIO_INTERLOCK_PIPELINE \ |
b128c09f BB |
81 | ZIO_INTERLOCK_STAGES |
82 | ||
428870ff BB |
83 | #define ZIO_VDEV_IO_STAGES \ |
84 | (ZIO_STAGE_VDEV_IO_START | \ | |
85 | ZIO_STAGE_VDEV_IO_DONE | \ | |
86 | ZIO_STAGE_VDEV_IO_ASSESS) | |
34dc7c2f | 87 | |
428870ff BB |
88 | #define ZIO_VDEV_CHILD_PIPELINE \ |
89 | (ZIO_VDEV_IO_STAGES | \ | |
90 | ZIO_STAGE_DONE) | |
b128c09f | 91 | |
428870ff BB |
92 | #define ZIO_READ_COMMON_STAGES \ |
93 | (ZIO_INTERLOCK_STAGES | \ | |
94 | ZIO_VDEV_IO_STAGES | \ | |
95 | ZIO_STAGE_CHECKSUM_VERIFY) | |
34dc7c2f | 96 | |
428870ff | 97 | #define ZIO_READ_PHYS_PIPELINE \ |
b128c09f | 98 | ZIO_READ_COMMON_STAGES |
34dc7c2f | 99 | |
428870ff BB |
100 | #define ZIO_READ_PIPELINE \ |
101 | (ZIO_READ_COMMON_STAGES | \ | |
102 | ZIO_STAGE_READ_BP_INIT) | |
34dc7c2f | 103 | |
428870ff BB |
104 | #define ZIO_DDT_CHILD_READ_PIPELINE \ |
105 | ZIO_READ_COMMON_STAGES | |
b128c09f | 106 | |
428870ff BB |
107 | #define ZIO_DDT_READ_PIPELINE \ |
108 | (ZIO_INTERLOCK_STAGES | \ | |
109 | ZIO_STAGE_READ_BP_INIT | \ | |
110 | ZIO_STAGE_DDT_READ_START | \ | |
111 | ZIO_STAGE_DDT_READ_DONE) | |
34dc7c2f | 112 | |
428870ff BB |
113 | #define ZIO_WRITE_COMMON_STAGES \ |
114 | (ZIO_INTERLOCK_STAGES | \ | |
115 | ZIO_VDEV_IO_STAGES | \ | |
116 | ZIO_STAGE_ISSUE_ASYNC | \ | |
117 | ZIO_STAGE_CHECKSUM_GENERATE) | |
34dc7c2f | 118 | |
428870ff BB |
119 | #define ZIO_WRITE_PHYS_PIPELINE \ |
120 | ZIO_WRITE_COMMON_STAGES | |
34dc7c2f | 121 | |
428870ff BB |
122 | #define ZIO_REWRITE_PIPELINE \ |
123 | (ZIO_WRITE_COMMON_STAGES | \ | |
124 | ZIO_STAGE_WRITE_BP_INIT) | |
125 | ||
126 | #define ZIO_WRITE_PIPELINE \ | |
127 | (ZIO_WRITE_COMMON_STAGES | \ | |
128 | ZIO_STAGE_WRITE_BP_INIT | \ | |
129 | ZIO_STAGE_DVA_ALLOCATE) | |
130 | ||
131 | #define ZIO_DDT_CHILD_WRITE_PIPELINE \ | |
132 | (ZIO_INTERLOCK_STAGES | \ | |
133 | ZIO_VDEV_IO_STAGES | \ | |
134 | ZIO_STAGE_DVA_ALLOCATE) | |
135 | ||
136 | #define ZIO_DDT_WRITE_PIPELINE \ | |
137 | (ZIO_INTERLOCK_STAGES | \ | |
138 | ZIO_STAGE_ISSUE_ASYNC | \ | |
139 | ZIO_STAGE_WRITE_BP_INIT | \ | |
140 | ZIO_STAGE_CHECKSUM_GENERATE | \ | |
141 | ZIO_STAGE_DDT_WRITE) | |
142 | ||
143 | #define ZIO_GANG_STAGES \ | |
144 | (ZIO_STAGE_GANG_ASSEMBLE | \ | |
145 | ZIO_STAGE_GANG_ISSUE) | |
146 | ||
147 | #define ZIO_FREE_PIPELINE \ | |
148 | (ZIO_INTERLOCK_STAGES | \ | |
149 | ZIO_STAGE_FREE_BP_INIT | \ | |
55d85d5a | 150 | ZIO_STAGE_ISSUE_ASYNC | \ |
428870ff BB |
151 | ZIO_STAGE_DVA_FREE) |
152 | ||
153 | #define ZIO_DDT_FREE_PIPELINE \ | |
154 | (ZIO_INTERLOCK_STAGES | \ | |
155 | ZIO_STAGE_FREE_BP_INIT | \ | |
156 | ZIO_STAGE_ISSUE_ASYNC | \ | |
157 | ZIO_STAGE_DDT_FREE) | |
158 | ||
159 | #define ZIO_CLAIM_PIPELINE \ | |
160 | (ZIO_INTERLOCK_STAGES | \ | |
161 | ZIO_STAGE_DVA_CLAIM) | |
162 | ||
163 | #define ZIO_IOCTL_PIPELINE \ | |
164 | (ZIO_INTERLOCK_STAGES | \ | |
165 | ZIO_STAGE_VDEV_IO_START | \ | |
166 | ZIO_STAGE_VDEV_IO_ASSESS) | |
167 | ||
168 | #define ZIO_BLOCKING_STAGES \ | |
169 | (ZIO_STAGE_DVA_ALLOCATE | \ | |
170 | ZIO_STAGE_DVA_CLAIM | \ | |
171 | ZIO_STAGE_VDEV_IO_START) | |
34dc7c2f BB |
172 | |
173 | extern void zio_inject_init(void); | |
174 | extern void zio_inject_fini(void); | |
175 | ||
176 | #ifdef __cplusplus | |
177 | } | |
178 | #endif | |
179 | ||
180 | #endif /* _ZIO_IMPL_H */ |