author | Neil Perrin <Neil.Perrin@Sun.COM> |
Thu, 18 Sep 2008 17:18:10 -0600 | |
changeset 7638 | 5505e89fa6c8 |
parent 7294 | c9c31ef4c960 |
child 8227 | f7d7be9b1f56 |
permissions | -rw-r--r-- |
789 | 1 |
/* |
2 |
* CDDL HEADER START |
|
3 |
* |
|
4 |
* The contents of this file are subject to the terms of the |
|
1646
b4e43ae19fff
6393443 Remove remaining txg_wait_synced() from zfs unmount path.
perrin
parents:
789
diff
changeset
|
5 |
* Common Development and Distribution License (the "License"). |
b4e43ae19fff
6393443 Remove remaining txg_wait_synced() from zfs unmount path.
perrin
parents:
789
diff
changeset
|
6 |
* You may not use this file except in compliance with the License. |
789 | 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 |
/* |
|
6101
915df4cedbc9
6658511 zl_itx_list_sz incorrect for WR_NEED_COPY writes
perrin
parents:
5688
diff
changeset
|
22 |
* Copyright 2008 Sun Microsystems, Inc. All rights reserved. |
789 | 23 |
* Use is subject to license terms. |
24 |
*/ |
|
25 |
||
26 |
#ifndef _SYS_ZIL_H |
|
27 |
#define _SYS_ZIL_H |
|
28 |
||
29 |
#include <sys/types.h> |
|
30 |
#include <sys/spa.h> |
|
31 |
#include <sys/zio.h> |
|
32 |
#include <sys/dmu.h> |
|
33 |
||
34 |
#ifdef __cplusplus |
|
35 |
extern "C" { |
|
36 |
#endif |
|
37 |
||
38 |
/* |
|
39 |
* Intent log format: |
|
40 |
* |
|
41 |
* Each objset has its own intent log. The log header (zil_header_t) |
|
42 |
* for objset N's intent log is kept in the Nth object of the SPA's |
|
43 |
* intent_log objset. The log header points to a chain of log blocks, |
|
44 |
* each of which contains log records (i.e., transactions) followed by |
|
45 |
* a log block trailer (zil_trailer_t). The format of a log record |
|
46 |
* depends on the record (or transaction) type, but all records begin |
|
47 |
* with a common structure that defines the type, length, and txg. |
|
48 |
*/ |
|
49 |
||
50 |
/* |
|
51 |
* Intent log header - this on disk structure holds fields to manage |
|
52 |
* the log. All fields are 64 bit to easily handle cross architectures. |
|
53 |
*/ |
|
54 |
typedef struct zil_header { |
|
55 |
uint64_t zh_claim_txg; /* txg in which log blocks were claimed */ |
|
56 |
uint64_t zh_replay_seq; /* highest replayed sequence number */ |
|
57 |
blkptr_t zh_log; /* log chain */ |
|
1807
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
58 |
uint64_t zh_claim_seq; /* highest claimed sequence number */ |
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
59 |
uint64_t zh_pad[5]; |
789 | 60 |
} zil_header_t; |
61 |
||
62 |
/* |
|
63 |
* Log block trailer - structure at the end of the header and each log block |
|
64 |
* |
|
65 |
* The zit_bt contains a zbt_cksum which for the intent log is |
|
66 |
* the sequence number of this log block. A seq of 0 is invalid. |
|
67 |
* The zbt_cksum is checked by the SPA against the sequence |
|
68 |
* number passed in the blk_cksum field of the blkptr_t |
|
69 |
*/ |
|
70 |
typedef struct zil_trailer { |
|
71 |
uint64_t zit_pad; |
|
72 |
blkptr_t zit_next_blk; /* next block in chain */ |
|
73 |
uint64_t zit_nused; /* bytes in log block used */ |
|
74 |
zio_block_tail_t zit_bt; /* block trailer */ |
|
75 |
} zil_trailer_t; |
|
76 |
||
1842
1712a484fc9d
6413731 pathologically slower fsync on 32 bit systems
perrin
parents:
1807
diff
changeset
|
77 |
#define ZIL_MIN_BLKSZ 4096ULL |
789 | 78 |
#define ZIL_MAX_BLKSZ SPA_MAXBLOCKSIZE |
79 |
#define ZIL_BLK_DATA_SZ(lwb) ((lwb)->lwb_sz - sizeof (zil_trailer_t)) |
|
80 |
||
81 |
/* |
|
1807
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
82 |
* The words of a log block checksum. |
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
83 |
*/ |
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
84 |
#define ZIL_ZC_GUID_0 0 |
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
85 |
#define ZIL_ZC_GUID_1 1 |
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
86 |
#define ZIL_ZC_OBJSET 2 |
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
87 |
#define ZIL_ZC_SEQ 3 |
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
88 |
|
5331 | 89 |
typedef enum zil_create { |
90 |
Z_FILE, |
|
91 |
Z_DIR, |
|
92 |
Z_XATTRDIR, |
|
93 |
} zil_create_t; |
|
94 |
||
95 |
/* |
|
96 |
* size of xvattr log section. |
|
97 |
* its composed of lr_attr_t + xvattr bitmap + 2 64 bit timestamps |
|
98 |
* for create time and a single 64 bit integer for all of the attributes, |
|
99 |
* and 4 64 bit integers (32 bytes) for the scanstamp. |
|
100 |
* |
|
101 |
*/ |
|
102 |
||
103 |
#define ZIL_XVAT_SIZE(mapsize) \ |
|
104 |
sizeof (lr_attr_t) + (sizeof (uint32_t) * (mapsize - 1)) + \ |
|
105 |
(sizeof (uint64_t) * 7) |
|
5435 | 106 |
|
107 |
/* |
|
108 |
* Size of ACL in log. The ACE data is padded out to properly align |
|
109 |
* on 8 byte boundary. |
|
110 |
*/ |
|
111 |
||
112 |
#define ZIL_ACE_LENGTH(x) (roundup(x, sizeof (uint64_t))) |
|
113 |
||
1807
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
114 |
/* |
789 | 115 |
* Intent log transaction types and record structures |
116 |
*/ |
|
5331 | 117 |
#define TX_CREATE 1 /* Create file */ |
118 |
#define TX_MKDIR 2 /* Make directory */ |
|
119 |
#define TX_MKXATTR 3 /* Make XATTR directory */ |
|
120 |
#define TX_SYMLINK 4 /* Create symbolic link to a file */ |
|
121 |
#define TX_REMOVE 5 /* Remove file */ |
|
122 |
#define TX_RMDIR 6 /* Remove directory */ |
|
123 |
#define TX_LINK 7 /* Create hard link to a file */ |
|
124 |
#define TX_RENAME 8 /* Rename a file */ |
|
125 |
#define TX_WRITE 9 /* File write */ |
|
126 |
#define TX_TRUNCATE 10 /* Truncate a file */ |
|
127 |
#define TX_SETATTR 11 /* Set file attributes */ |
|
128 |
#define TX_ACL_V0 12 /* Set old formatted ACL */ |
|
129 |
#define TX_ACL 13 /* Set ACL */ |
|
130 |
#define TX_CREATE_ACL 14 /* create with ACL */ |
|
131 |
#define TX_CREATE_ATTR 15 /* create + attrs */ |
|
132 |
#define TX_CREATE_ACL_ATTR 16 /* create with ACL + attrs */ |
|
133 |
#define TX_MKDIR_ACL 17 /* mkdir with ACL */ |
|
134 |
#define TX_MKDIR_ATTR 18 /* mkdir with attr */ |
|
135 |
#define TX_MKDIR_ACL_ATTR 19 /* mkdir with ACL + attrs */ |
|
136 |
#define TX_MAX_TYPE 20 /* Max transaction type */ |
|
137 |
||
138 |
/* |
|
139 |
* The transactions for mkdir, symlink, remove, rmdir, link, and rename |
|
140 |
* may have the following bit set, indicating the original request |
|
141 |
* specified case-insensitive handling of names. |
|
142 |
*/ |
|
143 |
#define TX_CI ((uint64_t)0x1 << 63) /* case-insensitive behavior requested */ |
|
789 | 144 |
|
145 |
/* |
|
146 |
* Format of log records. |
|
147 |
* The fields are carefully defined to allow them to be aligned |
|
148 |
* and sized the same on sparc & intel architectures. |
|
149 |
* Each log record has a common structure at the beginning. |
|
2638
4f583dfeae92
6413510 zfs: writing to ZFS filesystem slows down fsync() on other files in the same FS
perrin
parents:
2237
diff
changeset
|
150 |
* |
4f583dfeae92
6413510 zfs: writing to ZFS filesystem slows down fsync() on other files in the same FS
perrin
parents:
2237
diff
changeset
|
151 |
* Note, lrc_seq holds two different sequence numbers. Whilst in memory |
4f583dfeae92
6413510 zfs: writing to ZFS filesystem slows down fsync() on other files in the same FS
perrin
parents:
2237
diff
changeset
|
152 |
* it contains the transaction sequence number. The log record on |
4f583dfeae92
6413510 zfs: writing to ZFS filesystem slows down fsync() on other files in the same FS
perrin
parents:
2237
diff
changeset
|
153 |
* disk holds the sequence number of all log records which is used to |
4f583dfeae92
6413510 zfs: writing to ZFS filesystem slows down fsync() on other files in the same FS
perrin
parents:
2237
diff
changeset
|
154 |
* ensure we don't replay the same record. The two sequence numbers are |
4f583dfeae92
6413510 zfs: writing to ZFS filesystem slows down fsync() on other files in the same FS
perrin
parents:
2237
diff
changeset
|
155 |
* different because the transactions can now be pushed out of order. |
789 | 156 |
*/ |
157 |
typedef struct { /* common log record header */ |
|
158 |
uint64_t lrc_txtype; /* intent log transaction type */ |
|
159 |
uint64_t lrc_reclen; /* transaction record length */ |
|
160 |
uint64_t lrc_txg; /* dmu transaction group number */ |
|
2638
4f583dfeae92
6413510 zfs: writing to ZFS filesystem slows down fsync() on other files in the same FS
perrin
parents:
2237
diff
changeset
|
161 |
uint64_t lrc_seq; /* see comment above */ |
789 | 162 |
} lr_t; |
163 |
||
5331 | 164 |
/* |
165 |
* Handle option extended vattr attributes. |
|
166 |
* |
|
167 |
* Whenever new attributes are added the version number |
|
168 |
* will need to be updated as will code in |
|
169 |
* zfs_log.c and zfs_replay.c |
|
170 |
*/ |
|
171 |
typedef struct { |
|
172 |
uint32_t lr_attr_masksize; /* number of elements in array */ |
|
173 |
uint32_t lr_attr_bitmap; /* First entry of array */ |
|
174 |
/* remainder of array and any additional fields */ |
|
175 |
} lr_attr_t; |
|
176 |
||
177 |
/* |
|
178 |
* log record for creates without optional ACL. |
|
179 |
* This log record does support optional xvattr_t attributes. |
|
180 |
*/ |
|
789 | 181 |
typedef struct { |
182 |
lr_t lr_common; /* common portion of log record */ |
|
183 |
uint64_t lr_doid; /* object id of directory */ |
|
184 |
uint64_t lr_foid; /* object id of created file object */ |
|
185 |
uint64_t lr_mode; /* mode of object */ |
|
186 |
uint64_t lr_uid; /* uid of object */ |
|
187 |
uint64_t lr_gid; /* gid of object */ |
|
188 |
uint64_t lr_gen; /* generation (txg of creation) */ |
|
189 |
uint64_t lr_crtime[2]; /* creation time */ |
|
190 |
uint64_t lr_rdev; /* rdev of object to create */ |
|
191 |
/* name of object to create follows this */ |
|
192 |
/* for symlinks, link content follows name */ |
|
5331 | 193 |
/* for creates with xvattr data, the name follows the xvattr info */ |
789 | 194 |
} lr_create_t; |
195 |
||
5331 | 196 |
/* |
197 |
* FUID ACL record will be an array of ACEs from the original ACL. |
|
198 |
* If this array includes ephemeral IDs, the record will also include |
|
199 |
* an array of log-specific FUIDs to replace the ephemeral IDs. |
|
200 |
* Only one copy of each unique domain will be present, so the log-specific |
|
201 |
* FUIDs will use an index into a compressed domain table. On replay this |
|
202 |
* information will be used to construct real FUIDs (and bypass idmap, |
|
203 |
* since it may not be available). |
|
204 |
*/ |
|
205 |
||
206 |
/* |
|
207 |
* Log record for creates with optional ACL |
|
208 |
* This log record is also used for recording any FUID |
|
209 |
* information needed for replaying the create. If the |
|
210 |
* file doesn't have any actual ACEs then the lr_aclcnt |
|
211 |
* would be zero. |
|
212 |
*/ |
|
213 |
typedef struct { |
|
214 |
lr_create_t lr_create; /* common create portion */ |
|
215 |
uint64_t lr_aclcnt; /* number of ACEs in ACL */ |
|
216 |
uint64_t lr_domcnt; /* number of unique domains */ |
|
217 |
uint64_t lr_fuidcnt; /* number of real fuids */ |
|
218 |
uint64_t lr_acl_bytes; /* number of bytes in ACL */ |
|
219 |
uint64_t lr_acl_flags; /* ACL flags */ |
|
220 |
/* lr_acl_bytes number of variable sized ace's follows */ |
|
221 |
/* if create is also setting xvattr's, then acl data follows xvattr */ |
|
222 |
/* if ACE FUIDs are needed then they will follow the xvattr_t */ |
|
223 |
/* Following the FUIDs will be the domain table information. */ |
|
224 |
/* The FUIDs for the owner and group will be in the lr_create */ |
|
225 |
/* portion of the record. */ |
|
226 |
/* name follows ACL data */ |
|
227 |
} lr_acl_create_t; |
|
228 |
||
789 | 229 |
typedef struct { |
230 |
lr_t lr_common; /* common portion of log record */ |
|
231 |
uint64_t lr_doid; /* obj id of directory */ |
|
232 |
/* name of object to remove follows this */ |
|
233 |
} lr_remove_t; |
|
234 |
||
235 |
typedef struct { |
|
236 |
lr_t lr_common; /* common portion of log record */ |
|
237 |
uint64_t lr_doid; /* obj id of directory */ |
|
238 |
uint64_t lr_link_obj; /* obj id of link */ |
|
239 |
/* name of object to link follows this */ |
|
240 |
} lr_link_t; |
|
241 |
||
242 |
typedef struct { |
|
243 |
lr_t lr_common; /* common portion of log record */ |
|
244 |
uint64_t lr_sdoid; /* obj id of source directory */ |
|
245 |
uint64_t lr_tdoid; /* obj id of target directory */ |
|
246 |
/* 2 strings: names of source and destination follow this */ |
|
247 |
} lr_rename_t; |
|
248 |
||
249 |
typedef struct { |
|
250 |
lr_t lr_common; /* common portion of log record */ |
|
251 |
uint64_t lr_foid; /* file object to write */ |
|
252 |
uint64_t lr_offset; /* offset to write to */ |
|
253 |
uint64_t lr_length; /* user data length to write */ |
|
254 |
uint64_t lr_blkoff; /* offset represented by lr_blkptr */ |
|
255 |
blkptr_t lr_blkptr; /* spa block pointer for replay */ |
|
256 |
/* write data will follow for small writes */ |
|
257 |
} lr_write_t; |
|
258 |
||
259 |
typedef struct { |
|
260 |
lr_t lr_common; /* common portion of log record */ |
|
261 |
uint64_t lr_foid; /* object id of file to truncate */ |
|
262 |
uint64_t lr_offset; /* offset to truncate from */ |
|
263 |
uint64_t lr_length; /* length to truncate */ |
|
264 |
} lr_truncate_t; |
|
265 |
||
266 |
typedef struct { |
|
267 |
lr_t lr_common; /* common portion of log record */ |
|
268 |
uint64_t lr_foid; /* file object to change attributes */ |
|
269 |
uint64_t lr_mask; /* mask of attributes to set */ |
|
270 |
uint64_t lr_mode; /* mode to set */ |
|
271 |
uint64_t lr_uid; /* uid to set */ |
|
272 |
uint64_t lr_gid; /* gid to set */ |
|
273 |
uint64_t lr_size; /* size to set */ |
|
274 |
uint64_t lr_atime[2]; /* access time */ |
|
275 |
uint64_t lr_mtime[2]; /* modification time */ |
|
5331 | 276 |
/* optional attribute lr_attr_t may be here */ |
789 | 277 |
} lr_setattr_t; |
278 |
||
279 |
typedef struct { |
|
280 |
lr_t lr_common; /* common portion of log record */ |
|
281 |
uint64_t lr_foid; /* obj id of file */ |
|
282 |
uint64_t lr_aclcnt; /* number of acl entries */ |
|
283 |
/* lr_aclcnt number of ace_t entries follow this */ |
|
5331 | 284 |
} lr_acl_v0_t; |
285 |
||
286 |
typedef struct { |
|
287 |
lr_t lr_common; /* common portion of log record */ |
|
288 |
uint64_t lr_foid; /* obj id of file */ |
|
289 |
uint64_t lr_aclcnt; /* number of ACEs in ACL */ |
|
290 |
uint64_t lr_domcnt; /* number of unique domains */ |
|
291 |
uint64_t lr_fuidcnt; /* number of real fuids */ |
|
292 |
uint64_t lr_acl_bytes; /* number of bytes in ACL */ |
|
293 |
uint64_t lr_acl_flags; /* ACL flags */ |
|
294 |
/* lr_acl_bytes number of variable sized ace's follows */ |
|
789 | 295 |
} lr_acl_t; |
296 |
||
297 |
/* |
|
298 |
* ZIL structure definitions, interface function prototype and globals. |
|
299 |
*/ |
|
300 |
||
301 |
/* |
|
302 |
* ZFS intent log transaction structure |
|
303 |
*/ |
|
1669 | 304 |
typedef enum { |
305 |
WR_INDIRECT, /* indirect - a large write (dmu_sync() data */ |
|
306 |
/* and put blkptr in log, rather than actual data) */ |
|
307 |
WR_COPIED, /* immediate - data is copied into lr_write_t */ |
|
308 |
WR_NEED_COPY, /* immediate - data needs to be copied if pushed */ |
|
309 |
} itx_wr_state_t; |
|
310 |
||
789 | 311 |
typedef struct itx { |
312 |
list_node_t itx_node; /* linkage on zl_itx_list */ |
|
313 |
void *itx_private; /* type-specific opaque data */ |
|
1669 | 314 |
itx_wr_state_t itx_wr_state; /* write state */ |
3063
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
315 |
uint8_t itx_sync; /* synchronous transaction */ |
6101
915df4cedbc9
6658511 zl_itx_list_sz incorrect for WR_NEED_COPY writes
perrin
parents:
5688
diff
changeset
|
316 |
uint64_t itx_sod; /* record size on disk */ |
789 | 317 |
lr_t itx_lr; /* common part of log record */ |
318 |
/* followed by type-specific part of lr_xx_t and its immediate data */ |
|
319 |
} itx_t; |
|
320 |
||
3063
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
321 |
|
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
322 |
/* |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
323 |
* zgd_t is passed through dmu_sync() to the callback routine zfs_get_done() |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
324 |
* to handle the cleanup of the dmu_sync() buffer write |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
325 |
*/ |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
326 |
typedef struct { |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
327 |
zilog_t *zgd_zilog; /* zilog */ |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
328 |
blkptr_t *zgd_bp; /* block pointer */ |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
329 |
struct rl *zgd_rl; /* range lock */ |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
330 |
} zgd_t; |
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
331 |
|
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
332 |
|
789 | 333 |
typedef void zil_parse_blk_func_t(zilog_t *zilog, blkptr_t *bp, void *arg, |
334 |
uint64_t txg); |
|
335 |
typedef void zil_parse_lr_func_t(zilog_t *zilog, lr_t *lr, void *arg, |
|
336 |
uint64_t txg); |
|
337 |
typedef int zil_replay_func_t(); |
|
7638
5505e89fa6c8
6741237 zfs hang in txg_wait_open() on boot
Neil Perrin <Neil.Perrin@Sun.COM>
parents:
7294
diff
changeset
|
338 |
typedef void zil_replay_cleaner_t(); |
2237 | 339 |
typedef int zil_get_data_t(void *arg, lr_write_t *lr, char *dbuf, zio_t *zio); |
789 | 340 |
|
1807
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
341 |
extern uint64_t zil_parse(zilog_t *zilog, zil_parse_blk_func_t *parse_blk_func, |
789 | 342 |
zil_parse_lr_func_t *parse_lr_func, void *arg, uint64_t txg); |
343 |
||
344 |
extern void zil_init(void); |
|
345 |
extern void zil_fini(void); |
|
346 |
||
347 |
extern zilog_t *zil_alloc(objset_t *os, zil_header_t *zh_phys); |
|
348 |
extern void zil_free(zilog_t *zilog); |
|
349 |
||
350 |
extern zilog_t *zil_open(objset_t *os, zil_get_data_t *get_data); |
|
351 |
extern void zil_close(zilog_t *zilog); |
|
352 |
||
353 |
extern void zil_replay(objset_t *os, void *arg, uint64_t *txgp, |
|
7638
5505e89fa6c8
6741237 zfs hang in txg_wait_open() on boot
Neil Perrin <Neil.Perrin@Sun.COM>
parents:
7294
diff
changeset
|
354 |
zil_replay_func_t *replay_func[TX_MAX_TYPE], |
5505e89fa6c8
6741237 zfs hang in txg_wait_open() on boot
Neil Perrin <Neil.Perrin@Sun.COM>
parents:
7294
diff
changeset
|
355 |
zil_replay_cleaner_t *replay_cleaner); |
1807
35c8b566d7af
6410711 intent log blocks don't get invited to pool parties
bonwick
parents:
1669
diff
changeset
|
356 |
extern void zil_destroy(zilog_t *zilog, boolean_t keep_first); |
4935
c80bf0e6f4aa
6534949 Stale need for range locking comment in zvol.c
perrin
parents:
3461
diff
changeset
|
357 |
extern void zil_rollback_destroy(zilog_t *zilog, dmu_tx_t *tx); |
789 | 358 |
|
5331 | 359 |
extern itx_t *zil_itx_create(uint64_t txtype, size_t lrsize); |
789 | 360 |
extern uint64_t zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx); |
361 |
||
2638
4f583dfeae92
6413510 zfs: writing to ZFS filesystem slows down fsync() on other files in the same FS
perrin
parents:
2237
diff
changeset
|
362 |
extern void zil_commit(zilog_t *zilog, uint64_t seq, uint64_t oid); |
789 | 363 |
|
2199 | 364 |
extern int zil_claim(char *osname, void *txarg); |
7294 | 365 |
extern int zil_check_log_chain(char *osname, void *txarg); |
366 |
extern int zil_clear_log_chain(char *osname, void *txarg); |
|
789 | 367 |
extern void zil_sync(zilog_t *zilog, dmu_tx_t *tx); |
368 |
extern void zil_clean(zilog_t *zilog); |
|
1646
b4e43ae19fff
6393443 Remove remaining txg_wait_synced() from zfs unmount path.
perrin
parents:
789
diff
changeset
|
369 |
extern int zil_is_committed(zilog_t *zilog); |
789 | 370 |
|
371 |
extern int zil_suspend(zilog_t *zilog); |
|
372 |
extern void zil_resume(zilog_t *zilog); |
|
373 |
||
5688
c0b02c8fd2c0
6640580 spa_get_random() is insanely slow in userland
bonwick
parents:
5435
diff
changeset
|
374 |
extern void zil_add_block(zilog_t *zilog, blkptr_t *bp); |
3063
b252896b372b
6341569 zio_alloc_blk() vdev distribution performs badly
perrin
parents:
2638
diff
changeset
|
375 |
|
789 | 376 |
extern int zil_disable; |
377 |
||
378 |
#ifdef __cplusplus |
|
379 |
} |
|
380 |
#endif |
|
381 |
||
382 |
#endif /* _SYS_ZIL_H */ |