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 /* 22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #pragma ident "%Z%%M% %I% %E% SMI" 27 28 #include <sys/zfs_context.h> 29 #include <sys/fm/fs/zfs.h> 30 #include <sys/spa.h> 31 #include <sys/txg.h> 32 #include <sys/spa_impl.h> 33 #include <sys/vdev_impl.h> 34 #include <sys/zio_impl.h> 35 #include <sys/zio_compress.h> 36 #include <sys/zio_checksum.h> 37 38 /* 39 * ========================================================================== 40 * I/O priority table 41 * ========================================================================== 42 */ 43 uint8_t zio_priority_table[ZIO_PRIORITY_TABLE_SIZE] = { 44 0, /* ZIO_PRIORITY_NOW */ 45 0, /* ZIO_PRIORITY_SYNC_READ */ 46 0, /* ZIO_PRIORITY_SYNC_WRITE */ 47 6, /* ZIO_PRIORITY_ASYNC_READ */ 48 4, /* ZIO_PRIORITY_ASYNC_WRITE */ 49 4, /* ZIO_PRIORITY_FREE */ 50 0, /* ZIO_PRIORITY_CACHE_FILL */ 51 0, /* ZIO_PRIORITY_LOG_WRITE */ 52 10, /* ZIO_PRIORITY_RESILVER */ 53 20, /* ZIO_PRIORITY_SCRUB */ 54 }; 55 56 /* 57 * ========================================================================== 58 * I/O type descriptions 59 * ========================================================================== 60 */ 61 char *zio_type_name[ZIO_TYPES] = { 62 "null", "read", "write", "free", "claim", "ioctl" }; 63 64 /* Force an allocation failure when non-zero */ 65 uint16_t zio_zil_fail_shift = 0; 66 uint16_t zio_io_fail_shift = 0; 67 68 /* Enable/disable the write-retry logic */ 69 int zio_write_retry = 1; 70 71 /* Taskq to handle reissuing of I/Os */ 72 taskq_t *zio_taskq; 73 int zio_resume_threads = 4; 74 75 typedef struct zio_sync_pass { 76 int zp_defer_free; /* defer frees after this pass */ 77 int zp_dontcompress; /* don't compress after this pass */ 78 int zp_rewrite; /* rewrite new bps after this pass */ 79 } zio_sync_pass_t; 80 81 zio_sync_pass_t zio_sync_pass = { 82 1, /* zp_defer_free */ 83 4, /* zp_dontcompress */ 84 1, /* zp_rewrite */ 85 }; 86 87 static boolean_t zio_io_should_fail(uint16_t); 88 89 /* 90 * ========================================================================== 91 * I/O kmem caches 92 * ========================================================================== 93 */ 94 kmem_cache_t *zio_cache; 95 kmem_cache_t *zio_buf_cache[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT]; 96 kmem_cache_t *zio_data_buf_cache[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT]; 97 98 #ifdef _KERNEL 99 extern vmem_t *zio_alloc_arena; 100 #endif 101 102 /* 103 * Determine if we are allowed to issue the IO based on the 104 * pool state. If we must wait then block until we are told 105 * that we may continue. 106 */ 107 #define ZIO_ENTER(spa) { \ 108 if (spa->spa_state == POOL_STATE_IO_FAILURE) { \ 109 mutex_enter(&spa->spa_zio_lock); \ 110 while (spa->spa_state == POOL_STATE_IO_FAILURE) \ 111 cv_wait(&spa->spa_zio_cv, &spa->spa_zio_lock); \ 112 mutex_exit(&spa->spa_zio_lock); \ 113 } \ 114 } 115 116 /* 117 * An allocation zio is one that either currently has the DVA allocate 118 * stage set or will have it later in it's lifetime. 119 */ 120 #define IO_IS_ALLOCATING(zio) \ 121 ((zio)->io_orig_pipeline & (1U << ZIO_STAGE_DVA_ALLOCATE)) 122 123 void 124 zio_init(void) 125 { 126 size_t c; 127 vmem_t *data_alloc_arena = NULL; 128 129 #ifdef _KERNEL 130 data_alloc_arena = zio_alloc_arena; 131 #endif 132 133 zio_cache = kmem_cache_create("zio_cache", sizeof (zio_t), 0, 134 NULL, NULL, NULL, NULL, NULL, 0); 135 136 /* 137 * For small buffers, we want a cache for each multiple of 138 * SPA_MINBLOCKSIZE. For medium-size buffers, we want a cache 139 * for each quarter-power of 2. For large buffers, we want 140 * a cache for each multiple of PAGESIZE. 141 */ 142 for (c = 0; c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; c++) { 143 size_t size = (c + 1) << SPA_MINBLOCKSHIFT; 144 size_t p2 = size; 145 size_t align = 0; 146 147 while (p2 & (p2 - 1)) 148 p2 &= p2 - 1; 149 150 if (size <= 4 * SPA_MINBLOCKSIZE) { 151 align = SPA_MINBLOCKSIZE; 152 } else if (P2PHASE(size, PAGESIZE) == 0) { 153 align = PAGESIZE; 154 } else if (P2PHASE(size, p2 >> 2) == 0) { 155 align = p2 >> 2; 156 } 157 158 if (align != 0) { 159 char name[36]; 160 (void) sprintf(name, "zio_buf_%lu", (ulong_t)size); 161 zio_buf_cache[c] = kmem_cache_create(name, size, 162 align, NULL, NULL, NULL, NULL, NULL, KMC_NODEBUG); 163 164 (void) sprintf(name, "zio_data_buf_%lu", (ulong_t)size); 165 zio_data_buf_cache[c] = kmem_cache_create(name, size, 166 align, NULL, NULL, NULL, NULL, data_alloc_arena, 167 KMC_NODEBUG); 168 169 } 170 } 171 172 while (--c != 0) { 173 ASSERT(zio_buf_cache[c] != NULL); 174 if (zio_buf_cache[c - 1] == NULL) 175 zio_buf_cache[c - 1] = zio_buf_cache[c]; 176 177 ASSERT(zio_data_buf_cache[c] != NULL); 178 if (zio_data_buf_cache[c - 1] == NULL) 179 zio_data_buf_cache[c - 1] = zio_data_buf_cache[c]; 180 } 181 182 zio_taskq = taskq_create("zio_taskq", zio_resume_threads, 183 maxclsyspri, 50, INT_MAX, TASKQ_PREPOPULATE); 184 185 zio_inject_init(); 186 } 187 188 void 189 zio_fini(void) 190 { 191 size_t c; 192 kmem_cache_t *last_cache = NULL; 193 kmem_cache_t *last_data_cache = NULL; 194 195 for (c = 0; c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT; c++) { 196 if (zio_buf_cache[c] != last_cache) { 197 last_cache = zio_buf_cache[c]; 198 kmem_cache_destroy(zio_buf_cache[c]); 199 } 200 zio_buf_cache[c] = NULL; 201 202 if (zio_data_buf_cache[c] != last_data_cache) { 203 last_data_cache = zio_data_buf_cache[c]; 204 kmem_cache_destroy(zio_data_buf_cache[c]); 205 } 206 zio_data_buf_cache[c] = NULL; 207 } 208 209 taskq_destroy(zio_taskq); 210 211 kmem_cache_destroy(zio_cache); 212 213 zio_inject_fini(); 214 } 215 216 /* 217 * ========================================================================== 218 * Allocate and free I/O buffers 219 * ========================================================================== 220 */ 221 222 /* 223 * Use zio_buf_alloc to allocate ZFS metadata. This data will appear in a 224 * crashdump if the kernel panics, so use it judiciously. Obviously, it's 225 * useful to inspect ZFS metadata, but if possible, we should avoid keeping 226 * excess / transient data in-core during a crashdump. 227 */ 228 void * 229 zio_buf_alloc(size_t size) 230 { 231 size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; 232 233 ASSERT(c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); 234 235 return (kmem_cache_alloc(zio_buf_cache[c], KM_SLEEP)); 236 } 237 238 /* 239 * Use zio_data_buf_alloc to allocate data. The data will not appear in a 240 * crashdump if the kernel panics. This exists so that we will limit the amount 241 * of ZFS data that shows up in a kernel crashdump. (Thus reducing the amount 242 * of kernel heap dumped to disk when the kernel panics) 243 */ 244 void * 245 zio_data_buf_alloc(size_t size) 246 { 247 size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; 248 249 ASSERT(c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); 250 251 return (kmem_cache_alloc(zio_data_buf_cache[c], KM_SLEEP)); 252 } 253 254 void 255 zio_buf_free(void *buf, size_t size) 256 { 257 size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; 258 259 ASSERT(c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); 260 261 kmem_cache_free(zio_buf_cache[c], buf); 262 } 263 264 void 265 zio_data_buf_free(void *buf, size_t size) 266 { 267 size_t c = (size - 1) >> SPA_MINBLOCKSHIFT; 268 269 ASSERT(c < SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT); 270 271 kmem_cache_free(zio_data_buf_cache[c], buf); 272 } 273 274 /* 275 * ========================================================================== 276 * Push and pop I/O transform buffers 277 * ========================================================================== 278 */ 279 static void 280 zio_push_transform(zio_t *zio, void *data, uint64_t size, uint64_t bufsize) 281 { 282 zio_transform_t *zt = kmem_alloc(sizeof (zio_transform_t), KM_SLEEP); 283 284 zt->zt_data = data; 285 zt->zt_size = size; 286 zt->zt_bufsize = bufsize; 287 288 zt->zt_next = zio->io_transform_stack; 289 zio->io_transform_stack = zt; 290 291 zio->io_data = data; 292 zio->io_size = size; 293 } 294 295 static void 296 zio_pop_transform(zio_t *zio, void **data, uint64_t *size, uint64_t *bufsize) 297 { 298 zio_transform_t *zt = zio->io_transform_stack; 299 300 *data = zt->zt_data; 301 *size = zt->zt_size; 302 *bufsize = zt->zt_bufsize; 303 304 zio->io_transform_stack = zt->zt_next; 305 kmem_free(zt, sizeof (zio_transform_t)); 306 307 if ((zt = zio->io_transform_stack) != NULL) { 308 zio->io_data = zt->zt_data; 309 zio->io_size = zt->zt_size; 310 } 311 } 312 313 static void 314 zio_clear_transform_stack(zio_t *zio) 315 { 316 void *data; 317 uint64_t size, bufsize; 318 319 ASSERT(zio->io_transform_stack != NULL); 320 321 zio_pop_transform(zio, &data, &size, &bufsize); 322 while (zio->io_transform_stack != NULL) { 323 zio_buf_free(data, bufsize); 324 zio_pop_transform(zio, &data, &size, &bufsize); 325 } 326 } 327 328 /* 329 * ========================================================================== 330 * Create the various types of I/O (read, write, free) 331 * ========================================================================== 332 */ 333 static zio_t * 334 zio_create(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, 335 void *data, uint64_t size, zio_done_func_t *done, void *private, 336 zio_type_t type, int priority, int flags, uint8_t stage, uint32_t pipeline) 337 { 338 zio_t *zio; 339 340 ASSERT3U(size, <=, SPA_MAXBLOCKSIZE); 341 ASSERT(P2PHASE(size, SPA_MINBLOCKSIZE) == 0); 342 343 zio = kmem_cache_alloc(zio_cache, KM_SLEEP); 344 bzero(zio, sizeof (zio_t)); 345 zio->io_parent = pio; 346 zio->io_spa = spa; 347 zio->io_txg = txg; 348 zio->io_flags = flags; 349 if (bp != NULL) { 350 zio->io_bp = bp; 351 zio->io_bp_copy = *bp; 352 zio->io_bp_orig = *bp; 353 } 354 zio->io_done = done; 355 zio->io_private = private; 356 zio->io_type = type; 357 zio->io_priority = priority; 358 zio->io_stage = stage; 359 zio->io_pipeline = pipeline; 360 zio->io_timestamp = lbolt64; 361 mutex_init(&zio->io_lock, NULL, MUTEX_DEFAULT, NULL); 362 cv_init(&zio->io_cv, NULL, CV_DEFAULT, NULL); 363 zio_push_transform(zio, data, size, size); 364 365 /* 366 * Note on config lock: 367 * 368 * If CONFIG_HELD is set, then the caller already has the config 369 * lock, so we don't need it for this io. 370 * 371 * We set CONFIG_GRABBED to indicate that we have grabbed the 372 * config lock on behalf of this io, so it should be released 373 * in zio_done. 374 * 375 * Unless CONFIG_HELD is set, we will grab the config lock for 376 * any top-level (parent-less) io, *except* NULL top-level ios. 377 * The NULL top-level ios rarely have any children, so we delay 378 * grabbing the lock until the first child is added (but it is 379 * still grabbed on behalf of the top-level i/o, so additional 380 * children don't need to also grab it). This greatly reduces 381 * contention on the config lock. 382 */ 383 if (pio == NULL) { 384 if (type != ZIO_TYPE_NULL && 385 !(flags & ZIO_FLAG_CONFIG_HELD)) { 386 spa_config_enter(spa, RW_READER, zio); 387 zio->io_flags |= ZIO_FLAG_CONFIG_GRABBED; 388 } 389 zio->io_root = zio; 390 } else { 391 zio->io_root = pio->io_root; 392 if (!(flags & ZIO_FLAG_NOBOOKMARK)) 393 zio->io_logical = pio->io_logical; 394 mutex_enter(&pio->io_lock); 395 if (pio->io_parent == NULL && 396 pio->io_type == ZIO_TYPE_NULL && 397 !(pio->io_flags & ZIO_FLAG_CONFIG_GRABBED) && 398 !(pio->io_flags & ZIO_FLAG_CONFIG_HELD)) { 399 pio->io_flags |= ZIO_FLAG_CONFIG_GRABBED; 400 spa_config_enter(spa, RW_READER, pio); 401 } 402 if (stage < ZIO_STAGE_READY) 403 pio->io_children_notready++; 404 pio->io_children_notdone++; 405 zio->io_sibling_next = pio->io_child; 406 zio->io_sibling_prev = NULL; 407 if (pio->io_child != NULL) 408 pio->io_child->io_sibling_prev = zio; 409 pio->io_child = zio; 410 zio->io_ndvas = pio->io_ndvas; 411 mutex_exit(&pio->io_lock); 412 } 413 414 /* 415 * Save off the original state incase we need to retry later. 416 */ 417 zio->io_orig_stage = zio->io_stage; 418 zio->io_orig_pipeline = zio->io_pipeline; 419 zio->io_orig_flags = zio->io_flags; 420 421 return (zio); 422 } 423 424 static void 425 zio_reset(zio_t *zio) 426 { 427 zio_clear_transform_stack(zio); 428 429 zio->io_flags = zio->io_orig_flags; 430 zio->io_stage = zio->io_orig_stage; 431 zio->io_pipeline = zio->io_orig_pipeline; 432 zio_push_transform(zio, zio->io_data, zio->io_size, zio->io_size); 433 } 434 435 zio_t * 436 zio_null(zio_t *pio, spa_t *spa, zio_done_func_t *done, void *private, 437 int flags) 438 { 439 zio_t *zio; 440 441 zio = zio_create(pio, spa, 0, NULL, NULL, 0, done, private, 442 ZIO_TYPE_NULL, ZIO_PRIORITY_NOW, flags, ZIO_STAGE_OPEN, 443 ZIO_WAIT_FOR_CHILDREN_PIPELINE); 444 445 return (zio); 446 } 447 448 zio_t * 449 zio_root(spa_t *spa, zio_done_func_t *done, void *private, int flags) 450 { 451 return (zio_null(NULL, spa, done, private, flags)); 452 } 453 454 zio_t * 455 zio_read(zio_t *pio, spa_t *spa, blkptr_t *bp, void *data, 456 uint64_t size, zio_done_func_t *done, void *private, 457 int priority, int flags, zbookmark_t *zb) 458 { 459 zio_t *zio; 460 461 ASSERT3U(size, ==, BP_GET_LSIZE(bp)); 462 463 /* 464 * If the user has specified that we allow I/Os to continue 465 * then attempt to satisfy the read. 466 */ 467 if (spa_get_failmode(spa) != ZIO_FAILURE_MODE_CONTINUE) 468 ZIO_ENTER(spa); 469 470 zio = zio_create(pio, spa, bp->blk_birth, bp, data, size, done, private, 471 ZIO_TYPE_READ, priority, flags | ZIO_FLAG_USER, 472 ZIO_STAGE_OPEN, ZIO_READ_PIPELINE); 473 zio->io_bookmark = *zb; 474 475 zio->io_logical = zio; 476 477 /* 478 * Work off our copy of the bp so the caller can free it. 479 */ 480 zio->io_bp = &zio->io_bp_copy; 481 482 return (zio); 483 } 484 485 zio_t * 486 zio_write(zio_t *pio, spa_t *spa, int checksum, int compress, int ncopies, 487 uint64_t txg, blkptr_t *bp, void *data, uint64_t size, 488 zio_done_func_t *ready, zio_done_func_t *done, void *private, int priority, 489 int flags, zbookmark_t *zb) 490 { 491 zio_t *zio; 492 493 ASSERT(checksum >= ZIO_CHECKSUM_OFF && 494 checksum < ZIO_CHECKSUM_FUNCTIONS); 495 496 ASSERT(compress >= ZIO_COMPRESS_OFF && 497 compress < ZIO_COMPRESS_FUNCTIONS); 498 499 ZIO_ENTER(spa); 500 501 zio = zio_create(pio, spa, txg, bp, data, size, done, private, 502 ZIO_TYPE_WRITE, priority, flags | ZIO_FLAG_USER, 503 ZIO_STAGE_OPEN, ZIO_WRITE_PIPELINE); 504 505 zio->io_ready = ready; 506 507 zio->io_bookmark = *zb; 508 509 zio->io_logical = zio; 510 511 zio->io_checksum = checksum; 512 zio->io_compress = compress; 513 zio->io_ndvas = ncopies; 514 515 if (bp->blk_birth != txg) { 516 /* XXX the bp usually (always?) gets re-zeroed later */ 517 BP_ZERO(bp); 518 BP_SET_LSIZE(bp, size); 519 BP_SET_PSIZE(bp, size); 520 } else { 521 /* Make sure someone doesn't change their mind on overwrites */ 522 ASSERT(MIN(zio->io_ndvas + BP_IS_GANG(bp), 523 spa_max_replication(spa)) == BP_GET_NDVAS(bp)); 524 } 525 526 return (zio); 527 } 528 529 zio_t * 530 zio_rewrite(zio_t *pio, spa_t *spa, int checksum, 531 uint64_t txg, blkptr_t *bp, void *data, uint64_t size, 532 zio_done_func_t *done, void *private, int priority, int flags, 533 zbookmark_t *zb) 534 { 535 zio_t *zio; 536 537 zio = zio_create(pio, spa, txg, bp, data, size, done, private, 538 ZIO_TYPE_WRITE, priority, flags | ZIO_FLAG_USER, 539 ZIO_STAGE_OPEN, ZIO_REWRITE_PIPELINE(bp)); 540 541 zio->io_bookmark = *zb; 542 zio->io_checksum = checksum; 543 zio->io_compress = ZIO_COMPRESS_OFF; 544 545 if (pio != NULL) 546 ASSERT3U(zio->io_ndvas, <=, BP_GET_NDVAS(bp)); 547 548 return (zio); 549 } 550 551 static void 552 zio_write_allocate_ready(zio_t *zio) 553 { 554 /* Free up the previous block */ 555 if (!BP_IS_HOLE(&zio->io_bp_orig)) { 556 zio_nowait(zio_free(zio, zio->io_spa, zio->io_txg, 557 &zio->io_bp_orig, NULL, NULL)); 558 } 559 } 560 561 static zio_t * 562 zio_write_allocate(zio_t *pio, spa_t *spa, int checksum, 563 uint64_t txg, blkptr_t *bp, void *data, uint64_t size, 564 zio_done_func_t *done, void *private, int priority, int flags) 565 { 566 zio_t *zio; 567 568 BP_ZERO(bp); 569 BP_SET_LSIZE(bp, size); 570 BP_SET_PSIZE(bp, size); 571 BP_SET_COMPRESS(bp, ZIO_COMPRESS_OFF); 572 573 zio = zio_create(pio, spa, txg, bp, data, size, done, private, 574 ZIO_TYPE_WRITE, priority, flags, 575 ZIO_STAGE_OPEN, ZIO_WRITE_ALLOCATE_PIPELINE); 576 577 zio->io_checksum = checksum; 578 zio->io_compress = ZIO_COMPRESS_OFF; 579 zio->io_ready = zio_write_allocate_ready; 580 581 return (zio); 582 } 583 584 zio_t * 585 zio_free(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, 586 zio_done_func_t *done, void *private) 587 { 588 zio_t *zio; 589 590 ASSERT(!BP_IS_HOLE(bp)); 591 592 if (txg == spa->spa_syncing_txg && 593 spa->spa_sync_pass > zio_sync_pass.zp_defer_free) { 594 bplist_enqueue_deferred(&spa->spa_sync_bplist, bp); 595 return (zio_null(pio, spa, NULL, NULL, 0)); 596 } 597 598 zio = zio_create(pio, spa, txg, bp, NULL, 0, done, private, 599 ZIO_TYPE_FREE, ZIO_PRIORITY_FREE, ZIO_FLAG_USER, 600 ZIO_STAGE_OPEN, ZIO_FREE_PIPELINE(bp)); 601 602 zio->io_bp = &zio->io_bp_copy; 603 604 return (zio); 605 } 606 607 zio_t * 608 zio_claim(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, 609 zio_done_func_t *done, void *private) 610 { 611 zio_t *zio; 612 613 /* 614 * A claim is an allocation of a specific block. Claims are needed 615 * to support immediate writes in the intent log. The issue is that 616 * immediate writes contain committed data, but in a txg that was 617 * *not* committed. Upon opening the pool after an unclean shutdown, 618 * the intent log claims all blocks that contain immediate write data 619 * so that the SPA knows they're in use. 620 * 621 * All claims *must* be resolved in the first txg -- before the SPA 622 * starts allocating blocks -- so that nothing is allocated twice. 623 */ 624 ASSERT3U(spa->spa_uberblock.ub_rootbp.blk_birth, <, spa_first_txg(spa)); 625 ASSERT3U(spa_first_txg(spa), <=, txg); 626 627 zio = zio_create(pio, spa, txg, bp, NULL, 0, done, private, 628 ZIO_TYPE_CLAIM, ZIO_PRIORITY_NOW, 0, 629 ZIO_STAGE_OPEN, ZIO_CLAIM_PIPELINE(bp)); 630 631 zio->io_bp = &zio->io_bp_copy; 632 633 return (zio); 634 } 635 636 zio_t * 637 zio_ioctl(zio_t *pio, spa_t *spa, vdev_t *vd, int cmd, 638 zio_done_func_t *done, void *private, int priority, int flags) 639 { 640 zio_t *zio; 641 int c; 642 643 if (vd->vdev_children == 0) { 644 zio = zio_create(pio, spa, 0, NULL, NULL, 0, done, private, 645 ZIO_TYPE_IOCTL, priority, flags, 646 ZIO_STAGE_OPEN, ZIO_IOCTL_PIPELINE); 647 648 zio->io_vd = vd; 649 zio->io_cmd = cmd; 650 } else { 651 zio = zio_null(pio, spa, NULL, NULL, flags); 652 653 for (c = 0; c < vd->vdev_children; c++) 654 zio_nowait(zio_ioctl(zio, spa, vd->vdev_child[c], cmd, 655 done, private, priority, flags)); 656 } 657 658 return (zio); 659 } 660 661 static void 662 zio_phys_bp_init(vdev_t *vd, blkptr_t *bp, uint64_t offset, uint64_t size, 663 int checksum, boolean_t labels) 664 { 665 ASSERT(vd->vdev_children == 0); 666 667 ASSERT(size <= SPA_MAXBLOCKSIZE); 668 ASSERT(P2PHASE(size, SPA_MINBLOCKSIZE) == 0); 669 ASSERT(P2PHASE(offset, SPA_MINBLOCKSIZE) == 0); 670 671 #ifdef ZFS_DEBUG 672 if (labels) { 673 ASSERT(offset + size <= VDEV_LABEL_START_SIZE || 674 offset >= vd->vdev_psize - VDEV_LABEL_END_SIZE); 675 } 676 #endif 677 ASSERT3U(offset + size, <=, vd->vdev_psize); 678 679 BP_ZERO(bp); 680 681 BP_SET_LSIZE(bp, size); 682 BP_SET_PSIZE(bp, size); 683 684 BP_SET_CHECKSUM(bp, checksum); 685 BP_SET_COMPRESS(bp, ZIO_COMPRESS_OFF); 686 BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER); 687 688 if (checksum != ZIO_CHECKSUM_OFF) 689 ZIO_SET_CHECKSUM(&bp->blk_cksum, offset, 0, 0, 0); 690 } 691 692 zio_t * 693 zio_read_phys(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, 694 void *data, int checksum, zio_done_func_t *done, void *private, 695 int priority, int flags, boolean_t labels) 696 { 697 zio_t *zio; 698 blkptr_t blk; 699 700 ZIO_ENTER(vd->vdev_spa); 701 702 zio_phys_bp_init(vd, &blk, offset, size, checksum, labels); 703 704 zio = zio_create(pio, vd->vdev_spa, 0, &blk, data, size, done, private, 705 ZIO_TYPE_READ, priority, flags | ZIO_FLAG_PHYSICAL, 706 ZIO_STAGE_OPEN, ZIO_READ_PHYS_PIPELINE); 707 708 zio->io_vd = vd; 709 zio->io_offset = offset; 710 711 /* 712 * Work off our copy of the bp so the caller can free it. 713 */ 714 zio->io_bp = &zio->io_bp_copy; 715 716 return (zio); 717 } 718 719 zio_t * 720 zio_write_phys(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, 721 void *data, int checksum, zio_done_func_t *done, void *private, 722 int priority, int flags, boolean_t labels) 723 { 724 zio_block_tail_t *zbt; 725 void *wbuf; 726 zio_t *zio; 727 blkptr_t blk; 728 729 ZIO_ENTER(vd->vdev_spa); 730 731 zio_phys_bp_init(vd, &blk, offset, size, checksum, labels); 732 733 zio = zio_create(pio, vd->vdev_spa, 0, &blk, data, size, done, private, 734 ZIO_TYPE_WRITE, priority, flags | ZIO_FLAG_PHYSICAL, 735 ZIO_STAGE_OPEN, ZIO_WRITE_PHYS_PIPELINE); 736 737 zio->io_vd = vd; 738 zio->io_offset = offset; 739 740 zio->io_bp = &zio->io_bp_copy; 741 zio->io_checksum = checksum; 742 743 if (zio_checksum_table[checksum].ci_zbt) { 744 /* 745 * zbt checksums are necessarily destructive -- they modify 746 * one word of the write buffer to hold the verifier/checksum. 747 * Therefore, we must make a local copy in case the data is 748 * being written to multiple places. 749 */ 750 wbuf = zio_buf_alloc(size); 751 bcopy(data, wbuf, size); 752 zio_push_transform(zio, wbuf, size, size); 753 754 zbt = (zio_block_tail_t *)((char *)wbuf + size) - 1; 755 zbt->zbt_cksum = blk.blk_cksum; 756 } 757 758 return (zio); 759 } 760 761 /* 762 * Create a child I/O to do some work for us. It has no associated bp. 763 */ 764 zio_t * 765 zio_vdev_child_io(zio_t *zio, blkptr_t *bp, vdev_t *vd, uint64_t offset, 766 void *data, uint64_t size, int type, int priority, int flags, 767 zio_done_func_t *done, void *private) 768 { 769 uint32_t pipeline = ZIO_VDEV_CHILD_PIPELINE; 770 zio_t *cio; 771 772 if (type == ZIO_TYPE_READ && bp != NULL) { 773 /* 774 * If we have the bp, then the child should perform the 775 * checksum and the parent need not. This pushes error 776 * detection as close to the leaves as possible and 777 * eliminates redundant checksums in the interior nodes. 778 */ 779 pipeline |= 1U << ZIO_STAGE_CHECKSUM_VERIFY; 780 zio->io_pipeline &= ~(1U << ZIO_STAGE_CHECKSUM_VERIFY); 781 } 782 783 cio = zio_create(zio, zio->io_spa, zio->io_txg, bp, data, size, 784 done, private, type, priority, 785 (zio->io_flags & ZIO_FLAG_VDEV_INHERIT) | ZIO_FLAG_CANFAIL | flags, 786 ZIO_STAGE_VDEV_IO_START - 1, pipeline); 787 788 cio->io_vd = vd; 789 cio->io_offset = offset; 790 791 return (cio); 792 } 793 794 /* 795 * ========================================================================== 796 * Initiate I/O, either sync or async 797 * ========================================================================== 798 */ 799 int 800 zio_wait(zio_t *zio) 801 { 802 int error; 803 804 ASSERT(zio->io_stage == ZIO_STAGE_OPEN); 805 806 zio->io_waiter = curthread; 807 808 zio_execute(zio); 809 810 mutex_enter(&zio->io_lock); 811 while (zio->io_stalled != ZIO_STAGE_DONE) 812 cv_wait(&zio->io_cv, &zio->io_lock); 813 mutex_exit(&zio->io_lock); 814 815 error = zio->io_error; 816 mutex_destroy(&zio->io_lock); 817 cv_destroy(&zio->io_cv); 818 kmem_cache_free(zio_cache, zio); 819 820 return (error); 821 } 822 823 void 824 zio_nowait(zio_t *zio) 825 { 826 zio_execute(zio); 827 } 828 829 void 830 zio_interrupt(zio_t *zio) 831 { 832 (void) taskq_dispatch(zio->io_spa->spa_zio_intr_taskq[zio->io_type], 833 (task_func_t *)zio_execute, zio, TQ_SLEEP); 834 } 835 836 static int 837 zio_issue_async(zio_t *zio) 838 { 839 (void) taskq_dispatch(zio->io_spa->spa_zio_issue_taskq[zio->io_type], 840 (task_func_t *)zio_execute, zio, TQ_SLEEP); 841 842 return (ZIO_PIPELINE_STOP); 843 } 844 845 /* 846 * ========================================================================== 847 * I/O pipeline interlocks: parent/child dependency scoreboarding 848 * ========================================================================== 849 */ 850 static int 851 zio_wait_for_children(zio_t *zio, uint32_t stage, uint64_t *countp) 852 { 853 int rv = ZIO_PIPELINE_CONTINUE; 854 855 mutex_enter(&zio->io_lock); 856 ASSERT(zio->io_stalled == 0); 857 if (*countp != 0) { 858 zio->io_stalled = stage; 859 rv = ZIO_PIPELINE_STOP; 860 } 861 mutex_exit(&zio->io_lock); 862 863 return (rv); 864 } 865 866 static void 867 zio_notify_parent(zio_t *zio, uint32_t stage, uint64_t *countp) 868 { 869 zio_t *pio = zio->io_parent; 870 871 mutex_enter(&pio->io_lock); 872 if (pio->io_error == 0 && !(zio->io_flags & ZIO_FLAG_DONT_PROPAGATE)) 873 pio->io_error = zio->io_error; 874 ASSERT3U(*countp, >, 0); 875 if (--*countp == 0 && pio->io_stalled == stage) { 876 pio->io_stalled = 0; 877 mutex_exit(&pio->io_lock); 878 zio_execute(pio); 879 } else { 880 mutex_exit(&pio->io_lock); 881 } 882 } 883 884 int 885 zio_wait_for_children_ready(zio_t *zio) 886 { 887 return (zio_wait_for_children(zio, ZIO_STAGE_WAIT_FOR_CHILDREN_READY, 888 &zio->io_children_notready)); 889 } 890 891 int 892 zio_wait_for_children_done(zio_t *zio) 893 { 894 return (zio_wait_for_children(zio, ZIO_STAGE_WAIT_FOR_CHILDREN_DONE, 895 &zio->io_children_notdone)); 896 } 897 898 static int 899 zio_read_init(zio_t *zio) 900 { 901 blkptr_t *bp = zio->io_bp; 902 903 if (BP_GET_COMPRESS(bp) != ZIO_COMPRESS_OFF) { 904 uint64_t csize = BP_GET_PSIZE(bp); 905 void *cbuf = zio_buf_alloc(csize); 906 907 zio_push_transform(zio, cbuf, csize, csize); 908 zio->io_pipeline |= 1U << ZIO_STAGE_READ_DECOMPRESS; 909 } 910 911 if (BP_IS_GANG(bp)) { 912 uint64_t gsize = SPA_GANGBLOCKSIZE; 913 void *gbuf = zio_buf_alloc(gsize); 914 915 zio_push_transform(zio, gbuf, gsize, gsize); 916 zio->io_pipeline |= 1U << ZIO_STAGE_READ_GANG_MEMBERS; 917 } 918 919 if (!dmu_ot[BP_GET_TYPE(bp)].ot_metadata && BP_GET_LEVEL(bp) == 0) 920 zio->io_flags |= ZIO_FLAG_DONT_CACHE; 921 922 return (ZIO_PIPELINE_CONTINUE); 923 } 924 925 static int 926 zio_ready(zio_t *zio) 927 { 928 zio_t *pio = zio->io_parent; 929 930 if (zio->io_ready) 931 zio->io_ready(zio); 932 933 if (pio != NULL) 934 zio_notify_parent(zio, ZIO_STAGE_WAIT_FOR_CHILDREN_READY, 935 &pio->io_children_notready); 936 937 if (zio->io_bp) 938 zio->io_bp_copy = *zio->io_bp; 939 940 return (ZIO_PIPELINE_CONTINUE); 941 } 942 943 static int 944 zio_vdev_retry_io(zio_t *zio) 945 { 946 zio_t *pio = zio->io_parent; 947 948 /* 949 * Preserve the failed bp so that the io_ready() callback can 950 * update the accounting accordingly. The callback will also be 951 * responsible for freeing the previously allocated block, if one 952 * exists. 953 */ 954 zio->io_bp_orig = *zio->io_bp; 955 956 /* 957 * We must zero out the old DVA and blk_birth before reallocating 958 * the bp. 959 */ 960 BP_ZERO_DVAS(zio->io_bp); 961 zio_reset(zio); 962 963 if (pio) { 964 /* 965 * Let the parent know that we will 966 * re-alloc the write (=> new bp info). 967 */ 968 mutex_enter(&pio->io_lock); 969 pio->io_children_notready++; 970 971 /* 972 * If the parent I/O is still in the open stage, then 973 * don't bother telling it to retry since it hasn't 974 * progressed far enough for it to care. 975 */ 976 if (pio->io_stage > ZIO_STAGE_OPEN && IO_IS_ALLOCATING(pio)) 977 pio->io_flags |= ZIO_FLAG_WRITE_RETRY; 978 979 ASSERT(pio->io_stage <= ZIO_STAGE_WAIT_FOR_CHILDREN_DONE); 980 mutex_exit(&pio->io_lock); 981 } 982 983 /* 984 * We are getting ready to process the retry request so clear 985 * the flag and the zio's current error status. 986 */ 987 zio->io_flags &= ~ZIO_FLAG_WRITE_RETRY; 988 zio->io_error = 0; 989 990 return (ZIO_PIPELINE_CONTINUE); 991 } 992 993 int 994 zio_vdev_resume_io(spa_t *spa) 995 { 996 zio_t *zio; 997 998 mutex_enter(&spa->spa_zio_lock); 999 1000 /* 1001 * Probe all of vdevs that have experienced an I/O error. 1002 * If we are still unable to verify the integrity of the vdev 1003 * then we prevent the resume from proceeeding. 1004 */ 1005 for (zio = list_head(&spa->spa_zio_list); zio != NULL; 1006 zio = list_next(&spa->spa_zio_list, zio)) { 1007 int error = 0; 1008 1009 /* We only care about I/Os that must succeed */ 1010 if (zio->io_vd == NULL || zio->io_flags & ZIO_FLAG_CANFAIL) 1011 continue; 1012 error = vdev_probe(zio->io_vd); 1013 if (error) { 1014 mutex_exit(&spa->spa_zio_lock); 1015 return (error); 1016 } 1017 } 1018 1019 /* 1020 * Clear the vdev stats so that I/O can flow. 1021 */ 1022 vdev_clear(spa, NULL, B_FALSE); 1023 1024 spa->spa_state = POOL_STATE_ACTIVE; 1025 while ((zio = list_head(&spa->spa_zio_list)) != NULL) { 1026 list_remove(&spa->spa_zio_list, zio); 1027 zio->io_error = 0; 1028 1029 /* 1030 * If we are resuming an allocating I/O then we force it 1031 * to retry and let it resume operation where it left off. 1032 * Otherwise, go back to the ready stage and pick up from 1033 * there. 1034 */ 1035 if (zio_write_retry && IO_IS_ALLOCATING(zio)) { 1036 zio->io_flags |= ZIO_FLAG_WRITE_RETRY; 1037 zio->io_stage--; 1038 } else { 1039 zio->io_stage = ZIO_STAGE_READY; 1040 } 1041 1042 (void) taskq_dispatch(zio_taskq, (task_func_t *)zio_execute, 1043 zio, TQ_SLEEP); 1044 } 1045 mutex_exit(&spa->spa_zio_lock); 1046 1047 /* 1048 * Wait for the taskqs to finish and recheck the pool state since 1049 * it's possible that a resumed I/O has failed again. 1050 */ 1051 taskq_wait(zio_taskq); 1052 if (spa_state(spa) == POOL_STATE_IO_FAILURE) 1053 return (EIO); 1054 1055 mutex_enter(&spa->spa_zio_lock); 1056 cv_broadcast(&spa->spa_zio_cv); 1057 mutex_exit(&spa->spa_zio_lock); 1058 1059 return (0); 1060 } 1061 1062 static int 1063 zio_vdev_suspend_io(zio_t *zio) 1064 { 1065 spa_t *spa = zio->io_spa; 1066 1067 /* 1068 * We've experienced an unrecoverable failure so 1069 * set the pool state accordingly and queue all 1070 * failed IOs. 1071 */ 1072 spa->spa_state = POOL_STATE_IO_FAILURE; 1073 1074 mutex_enter(&spa->spa_zio_lock); 1075 list_insert_tail(&spa->spa_zio_list, zio); 1076 1077 #ifndef _KERNEL 1078 /* Used to notify ztest that the pool has suspended */ 1079 cv_broadcast(&spa->spa_zio_cv); 1080 #endif 1081 mutex_exit(&spa->spa_zio_lock); 1082 1083 return (ZIO_PIPELINE_STOP); 1084 } 1085 1086 static int 1087 zio_assess(zio_t *zio) 1088 { 1089 spa_t *spa = zio->io_spa; 1090 blkptr_t *bp = zio->io_bp; 1091 vdev_t *vd = zio->io_vd; 1092 1093 ASSERT(zio->io_children_notready == 0); 1094 ASSERT(zio->io_children_notdone == 0); 1095 1096 if (bp != NULL) { 1097 ASSERT(bp->blk_pad[0] == 0); 1098 ASSERT(bp->blk_pad[1] == 0); 1099 ASSERT(bp->blk_pad[2] == 0); 1100 ASSERT(bcmp(bp, &zio->io_bp_copy, sizeof (blkptr_t)) == 0); 1101 if (zio->io_type == ZIO_TYPE_WRITE && !BP_IS_HOLE(bp) && 1102 !(zio->io_flags & ZIO_FLAG_IO_REPAIR)) { 1103 ASSERT(!BP_SHOULD_BYTESWAP(bp)); 1104 if (zio->io_ndvas != 0) 1105 ASSERT3U(zio->io_ndvas, <=, BP_GET_NDVAS(bp)); 1106 ASSERT(BP_COUNT_GANG(bp) == 0 || 1107 (BP_COUNT_GANG(bp) == BP_GET_NDVAS(bp))); 1108 } 1109 } 1110 1111 /* 1112 * Some child I/O has indicated that a retry is necessary, so 1113 * we set an error on the I/O and let the logic below do the 1114 * rest. 1115 */ 1116 if (zio->io_flags & ZIO_FLAG_WRITE_RETRY) 1117 zio->io_error = ERESTART; 1118 1119 if (vd != NULL) 1120 vdev_stat_update(zio); 1121 1122 if (zio->io_error) { 1123 /* 1124 * If this I/O is attached to a particular vdev, 1125 * generate an error message describing the I/O failure 1126 * at the block level. We ignore these errors if the 1127 * device is currently unavailable. 1128 */ 1129 if (zio->io_error != ECKSUM && vd != NULL && !vdev_is_dead(vd)) 1130 zfs_ereport_post(FM_EREPORT_ZFS_IO, spa, vd, zio, 0, 0); 1131 1132 if ((zio->io_error == EIO || 1133 !(zio->io_flags & ZIO_FLAG_SPECULATIVE)) && 1134 zio->io_logical == zio) { 1135 /* 1136 * For root I/O requests, tell the SPA to log the error 1137 * appropriately. Also, generate a logical data 1138 * ereport. 1139 */ 1140 spa_log_error(spa, zio); 1141 1142 zfs_ereport_post(FM_EREPORT_ZFS_DATA, spa, NULL, zio, 1143 0, 0); 1144 } 1145 1146 /* 1147 * If we are an allocating I/O then we attempt to reissue 1148 * the I/O on another vdev unless the pool is out of space. 1149 * We handle this condition based on the spa's failmode 1150 * property. 1151 */ 1152 if (zio_write_retry && zio->io_error != ENOSPC && 1153 IO_IS_ALLOCATING(zio)) 1154 return (zio_vdev_retry_io(zio)); 1155 1156 ASSERT(!(zio->io_flags & ZIO_FLAG_WRITE_RETRY)); 1157 1158 /* 1159 * For I/O requests that cannot fail, we carry out 1160 * the requested behavior based on the failmode pool 1161 * property. 1162 * 1163 * XXX - Need to differentiate between an ENOSPC as 1164 * a result of vdev failures vs. a full pool. 1165 */ 1166 if (!(zio->io_flags & ZIO_FLAG_CANFAIL)) { 1167 char *blkbuf; 1168 1169 #ifdef ZFS_DEBUG 1170 blkbuf = kmem_alloc(BP_SPRINTF_LEN, KM_NOSLEEP); 1171 if (blkbuf) { 1172 sprintf_blkptr(blkbuf, BP_SPRINTF_LEN, 1173 bp ? bp : &zio->io_bp_copy); 1174 } 1175 cmn_err(CE_WARN, "ZFS: %s (%s on %s off %llx: zio %p " 1176 "%s): error %d", zio->io_error == ECKSUM ? 1177 "bad checksum" : "I/O failure", 1178 zio_type_name[zio->io_type], 1179 vdev_description(vd), 1180 (u_longlong_t)zio->io_offset, 1181 (void *)zio, blkbuf ? blkbuf : "", zio->io_error); 1182 #endif 1183 1184 if (spa_get_failmode(spa) == ZIO_FAILURE_MODE_PANIC) { 1185 fm_panic("Pool '%s' has encountered an " 1186 "uncorrectable I/O failure and the " 1187 "failure mode property for this pool " 1188 "is set to panic.", spa_name(spa)); 1189 } 1190 cmn_err(CE_WARN, "Pool '%s' has encountered " 1191 "an uncorrectable I/O error. " 1192 "Manual intervention is required.", spa_name(spa)); 1193 return (zio_vdev_suspend_io(zio)); 1194 } 1195 } 1196 ASSERT(!(zio->io_flags & ZIO_FLAG_WRITE_RETRY)); 1197 ASSERT(zio->io_children_notready == 0); 1198 1199 return (ZIO_PIPELINE_CONTINUE); 1200 } 1201 1202 static int 1203 zio_done(zio_t *zio) 1204 { 1205 zio_t *pio = zio->io_parent; 1206 spa_t *spa = zio->io_spa; 1207 1208 ASSERT(zio->io_children_notready == 0); 1209 ASSERT(zio->io_children_notdone == 0); 1210 1211 zio_clear_transform_stack(zio); 1212 1213 if (zio->io_done) 1214 zio->io_done(zio); 1215 1216 ASSERT(zio->io_delegate_list == NULL); 1217 ASSERT(zio->io_delegate_next == NULL); 1218 1219 if (pio != NULL) { 1220 zio_t *next, *prev; 1221 1222 mutex_enter(&pio->io_lock); 1223 next = zio->io_sibling_next; 1224 prev = zio->io_sibling_prev; 1225 if (next != NULL) 1226 next->io_sibling_prev = prev; 1227 if (prev != NULL) 1228 prev->io_sibling_next = next; 1229 if (pio->io_child == zio) 1230 pio->io_child = next; 1231 mutex_exit(&pio->io_lock); 1232 1233 zio_notify_parent(zio, ZIO_STAGE_WAIT_FOR_CHILDREN_DONE, 1234 &pio->io_children_notdone); 1235 } 1236 1237 /* 1238 * Note: this I/O is now done, and will shortly be freed, so there is no 1239 * need to clear this (or any other) flag. 1240 */ 1241 if (zio->io_flags & ZIO_FLAG_CONFIG_GRABBED) 1242 spa_config_exit(spa, zio); 1243 1244 if (zio->io_waiter != NULL) { 1245 mutex_enter(&zio->io_lock); 1246 ASSERT(zio->io_stage == ZIO_STAGE_DONE); 1247 zio->io_stalled = zio->io_stage; 1248 cv_broadcast(&zio->io_cv); 1249 mutex_exit(&zio->io_lock); 1250 } else { 1251 mutex_destroy(&zio->io_lock); 1252 cv_destroy(&zio->io_cv); 1253 kmem_cache_free(zio_cache, zio); 1254 } 1255 1256 return (ZIO_PIPELINE_STOP); 1257 } 1258 1259 /* 1260 * ========================================================================== 1261 * Compression support 1262 * ========================================================================== 1263 */ 1264 static int 1265 zio_write_compress(zio_t *zio) 1266 { 1267 int compress = zio->io_compress; 1268 blkptr_t *bp = zio->io_bp; 1269 void *cbuf; 1270 uint64_t lsize = zio->io_size; 1271 uint64_t csize = lsize; 1272 uint64_t cbufsize = 0; 1273 int pass; 1274 1275 if (bp->blk_birth == zio->io_txg) { 1276 /* 1277 * We're rewriting an existing block, which means we're 1278 * working on behalf of spa_sync(). For spa_sync() to 1279 * converge, it must eventually be the case that we don't 1280 * have to allocate new blocks. But compression changes 1281 * the blocksize, which forces a reallocate, and makes 1282 * convergence take longer. Therefore, after the first 1283 * few passes, stop compressing to ensure convergence. 1284 */ 1285 pass = spa_sync_pass(zio->io_spa); 1286 if (pass > zio_sync_pass.zp_dontcompress) 1287 compress = ZIO_COMPRESS_OFF; 1288 } else { 1289 ASSERT(BP_IS_HOLE(bp)); 1290 pass = 1; 1291 } 1292 1293 if (compress != ZIO_COMPRESS_OFF) 1294 if (!zio_compress_data(compress, zio->io_data, zio->io_size, 1295 &cbuf, &csize, &cbufsize)) 1296 compress = ZIO_COMPRESS_OFF; 1297 1298 if (compress != ZIO_COMPRESS_OFF && csize != 0) 1299 zio_push_transform(zio, cbuf, csize, cbufsize); 1300 1301 /* 1302 * The final pass of spa_sync() must be all rewrites, but the first 1303 * few passes offer a trade-off: allocating blocks defers convergence, 1304 * but newly allocated blocks are sequential, so they can be written 1305 * to disk faster. Therefore, we allow the first few passes of 1306 * spa_sync() to reallocate new blocks, but force rewrites after that. 1307 * There should only be a handful of blocks after pass 1 in any case. 1308 */ 1309 if (bp->blk_birth == zio->io_txg && BP_GET_PSIZE(bp) == csize && 1310 pass > zio_sync_pass.zp_rewrite) { 1311 ASSERT(csize != 0); 1312 BP_SET_LSIZE(bp, lsize); 1313 BP_SET_COMPRESS(bp, compress); 1314 zio->io_pipeline = ZIO_REWRITE_PIPELINE(bp); 1315 } else { 1316 if (bp->blk_birth == zio->io_txg) 1317 BP_ZERO(bp); 1318 if (csize == 0) { 1319 BP_ZERO(bp); 1320 zio->io_pipeline = ZIO_WAIT_FOR_CHILDREN_PIPELINE; 1321 } else { 1322 ASSERT3U(BP_GET_NDVAS(bp), ==, 0); 1323 BP_SET_LSIZE(bp, lsize); 1324 BP_SET_PSIZE(bp, csize); 1325 BP_SET_COMPRESS(bp, compress); 1326 } 1327 } 1328 1329 return (ZIO_PIPELINE_CONTINUE); 1330 } 1331 1332 static int 1333 zio_read_decompress(zio_t *zio) 1334 { 1335 blkptr_t *bp = zio->io_bp; 1336 void *data; 1337 uint64_t size; 1338 uint64_t bufsize; 1339 int compress = BP_GET_COMPRESS(bp); 1340 1341 ASSERT(compress != ZIO_COMPRESS_OFF); 1342 1343 zio_pop_transform(zio, &data, &size, &bufsize); 1344 1345 if (zio_decompress_data(compress, data, size, 1346 zio->io_data, zio->io_size)) 1347 zio->io_error = EIO; 1348 1349 zio_buf_free(data, bufsize); 1350 1351 return (ZIO_PIPELINE_CONTINUE); 1352 } 1353 1354 /* 1355 * ========================================================================== 1356 * Gang block support 1357 * ========================================================================== 1358 */ 1359 static void 1360 zio_gang_byteswap(zio_t *zio) 1361 { 1362 ASSERT(zio->io_size == SPA_GANGBLOCKSIZE); 1363 1364 if (BP_SHOULD_BYTESWAP(zio->io_bp)) 1365 byteswap_uint64_array(zio->io_data, zio->io_size); 1366 } 1367 1368 static int 1369 zio_get_gang_header(zio_t *zio) 1370 { 1371 blkptr_t *bp = zio->io_bp; 1372 uint64_t gsize = SPA_GANGBLOCKSIZE; 1373 void *gbuf = zio_buf_alloc(gsize); 1374 1375 ASSERT(BP_IS_GANG(bp)); 1376 1377 zio_push_transform(zio, gbuf, gsize, gsize); 1378 1379 zio_nowait(zio_create(zio, zio->io_spa, bp->blk_birth, bp, gbuf, gsize, 1380 NULL, NULL, ZIO_TYPE_READ, zio->io_priority, 1381 zio->io_flags & ZIO_FLAG_GANG_INHERIT, 1382 ZIO_STAGE_OPEN, ZIO_READ_GANG_PIPELINE)); 1383 1384 return (zio_wait_for_children_done(zio)); 1385 } 1386 1387 static int 1388 zio_read_gang_members(zio_t *zio) 1389 { 1390 zio_gbh_phys_t *gbh; 1391 uint64_t gsize, gbufsize, loff, lsize; 1392 int i; 1393 1394 ASSERT(BP_IS_GANG(zio->io_bp)); 1395 1396 zio_gang_byteswap(zio); 1397 zio_pop_transform(zio, (void **)&gbh, &gsize, &gbufsize); 1398 1399 for (loff = 0, i = 0; loff != zio->io_size; loff += lsize, i++) { 1400 blkptr_t *gbp = &gbh->zg_blkptr[i]; 1401 lsize = BP_GET_PSIZE(gbp); 1402 1403 ASSERT(BP_GET_COMPRESS(gbp) == ZIO_COMPRESS_OFF); 1404 ASSERT3U(lsize, ==, BP_GET_LSIZE(gbp)); 1405 ASSERT3U(loff + lsize, <=, zio->io_size); 1406 ASSERT(i < SPA_GBH_NBLKPTRS); 1407 ASSERT(!BP_IS_HOLE(gbp)); 1408 1409 zio_nowait(zio_read(zio, zio->io_spa, gbp, 1410 (char *)zio->io_data + loff, lsize, 1411 NULL, NULL, zio->io_priority, 1412 zio->io_flags & ZIO_FLAG_GANG_INHERIT, &zio->io_bookmark)); 1413 } 1414 1415 zio_buf_free(gbh, gbufsize); 1416 1417 return (zio_wait_for_children_done(zio)); 1418 } 1419 1420 static int 1421 zio_rewrite_gang_members(zio_t *zio) 1422 { 1423 zio_gbh_phys_t *gbh; 1424 uint64_t gsize, gbufsize, loff, lsize; 1425 int i; 1426 1427 ASSERT(BP_IS_GANG(zio->io_bp)); 1428 ASSERT3U(zio->io_size, ==, SPA_GANGBLOCKSIZE); 1429 1430 zio_gang_byteswap(zio); 1431 zio_pop_transform(zio, (void **)&gbh, &gsize, &gbufsize); 1432 1433 ASSERT(gsize == gbufsize); 1434 1435 for (loff = 0, i = 0; loff != zio->io_size; loff += lsize, i++) { 1436 blkptr_t *gbp = &gbh->zg_blkptr[i]; 1437 lsize = BP_GET_PSIZE(gbp); 1438 1439 ASSERT(BP_GET_COMPRESS(gbp) == ZIO_COMPRESS_OFF); 1440 ASSERT3U(lsize, ==, BP_GET_LSIZE(gbp)); 1441 ASSERT3U(loff + lsize, <=, zio->io_size); 1442 ASSERT(i < SPA_GBH_NBLKPTRS); 1443 ASSERT(!BP_IS_HOLE(gbp)); 1444 1445 zio_nowait(zio_rewrite(zio, zio->io_spa, zio->io_checksum, 1446 zio->io_txg, gbp, (char *)zio->io_data + loff, lsize, 1447 NULL, NULL, zio->io_priority, 1448 zio->io_flags & ZIO_FLAG_GANG_INHERIT, &zio->io_bookmark)); 1449 } 1450 1451 zio_push_transform(zio, gbh, gsize, gbufsize); 1452 1453 return (zio_wait_for_children_ready(zio)); 1454 } 1455 1456 static int 1457 zio_free_gang_members(zio_t *zio) 1458 { 1459 zio_gbh_phys_t *gbh; 1460 uint64_t gsize, gbufsize; 1461 int i; 1462 1463 ASSERT(BP_IS_GANG(zio->io_bp)); 1464 1465 zio_gang_byteswap(zio); 1466 zio_pop_transform(zio, (void **)&gbh, &gsize, &gbufsize); 1467 1468 for (i = 0; i < SPA_GBH_NBLKPTRS; i++) { 1469 blkptr_t *gbp = &gbh->zg_blkptr[i]; 1470 1471 if (BP_IS_HOLE(gbp)) 1472 continue; 1473 zio_nowait(zio_free(zio, zio->io_spa, zio->io_txg, 1474 gbp, NULL, NULL)); 1475 } 1476 1477 zio_buf_free(gbh, gbufsize); 1478 1479 return (ZIO_PIPELINE_CONTINUE); 1480 } 1481 1482 static int 1483 zio_claim_gang_members(zio_t *zio) 1484 { 1485 zio_gbh_phys_t *gbh; 1486 uint64_t gsize, gbufsize; 1487 int i; 1488 1489 ASSERT(BP_IS_GANG(zio->io_bp)); 1490 1491 zio_gang_byteswap(zio); 1492 zio_pop_transform(zio, (void **)&gbh, &gsize, &gbufsize); 1493 1494 for (i = 0; i < SPA_GBH_NBLKPTRS; i++) { 1495 blkptr_t *gbp = &gbh->zg_blkptr[i]; 1496 if (BP_IS_HOLE(gbp)) 1497 continue; 1498 zio_nowait(zio_claim(zio, zio->io_spa, zio->io_txg, 1499 gbp, NULL, NULL)); 1500 } 1501 1502 zio_buf_free(gbh, gbufsize); 1503 1504 return (ZIO_PIPELINE_CONTINUE); 1505 } 1506 1507 static void 1508 zio_write_allocate_gang_member_done(zio_t *zio) 1509 { 1510 zio_t *pio = zio->io_parent; 1511 dva_t *cdva = zio->io_bp->blk_dva; 1512 dva_t *pdva = pio->io_bp->blk_dva; 1513 uint64_t asize; 1514 int d; 1515 1516 ASSERT3U(pio->io_ndvas, ==, zio->io_ndvas); 1517 ASSERT3U(BP_GET_NDVAS(zio->io_bp), <=, BP_GET_NDVAS(pio->io_bp)); 1518 ASSERT3U(zio->io_ndvas, <=, BP_GET_NDVAS(zio->io_bp)); 1519 ASSERT3U(pio->io_ndvas, <=, BP_GET_NDVAS(pio->io_bp)); 1520 1521 mutex_enter(&pio->io_lock); 1522 for (d = 0; d < BP_GET_NDVAS(pio->io_bp); d++) { 1523 ASSERT(DVA_GET_GANG(&pdva[d])); 1524 asize = DVA_GET_ASIZE(&pdva[d]); 1525 asize += DVA_GET_ASIZE(&cdva[d]); 1526 DVA_SET_ASIZE(&pdva[d], asize); 1527 } 1528 mutex_exit(&pio->io_lock); 1529 } 1530 1531 static int 1532 zio_write_allocate_gang_members(zio_t *zio, metaslab_class_t *mc) 1533 { 1534 blkptr_t *bp = zio->io_bp; 1535 dva_t *dva = bp->blk_dva; 1536 spa_t *spa = zio->io_spa; 1537 zio_gbh_phys_t *gbh; 1538 uint64_t txg = zio->io_txg; 1539 uint64_t resid = zio->io_size; 1540 uint64_t maxalloc = P2ROUNDUP(zio->io_size >> 1, SPA_MINBLOCKSIZE); 1541 uint64_t gsize, loff, lsize; 1542 uint32_t gbps_left; 1543 int ndvas = zio->io_ndvas; 1544 int gbh_ndvas = MIN(ndvas + 1, spa_max_replication(spa)); 1545 int error; 1546 int i, d; 1547 1548 gsize = SPA_GANGBLOCKSIZE; 1549 gbps_left = SPA_GBH_NBLKPTRS; 1550 1551 error = metaslab_alloc(spa, mc, gsize, bp, gbh_ndvas, txg, NULL, 1552 B_FALSE); 1553 if (error) { 1554 zio->io_error = error; 1555 return (ZIO_PIPELINE_CONTINUE); 1556 } 1557 1558 for (d = 0; d < gbh_ndvas; d++) 1559 DVA_SET_GANG(&dva[d], 1); 1560 1561 bp->blk_birth = txg; 1562 1563 gbh = zio_buf_alloc(gsize); 1564 bzero(gbh, gsize); 1565 1566 for (loff = 0, i = 0; loff != zio->io_size; 1567 loff += lsize, resid -= lsize, gbps_left--, i++) { 1568 blkptr_t *gbp = &gbh->zg_blkptr[i]; 1569 dva = gbp->blk_dva; 1570 1571 ASSERT(gbps_left != 0); 1572 maxalloc = MIN(maxalloc, resid); 1573 1574 while (resid <= maxalloc * gbps_left) { 1575 error = metaslab_alloc(spa, mc, maxalloc, gbp, ndvas, 1576 txg, bp, B_FALSE); 1577 if (error == 0) 1578 break; 1579 ASSERT3U(error, ==, ENOSPC); 1580 /* XXX - free up previous allocations? */ 1581 if (maxalloc == SPA_MINBLOCKSIZE) { 1582 zio->io_error = error; 1583 return (ZIO_PIPELINE_CONTINUE); 1584 } 1585 maxalloc = P2ROUNDUP(maxalloc >> 1, SPA_MINBLOCKSIZE); 1586 } 1587 1588 if (resid <= maxalloc * gbps_left) { 1589 lsize = maxalloc; 1590 BP_SET_LSIZE(gbp, lsize); 1591 BP_SET_PSIZE(gbp, lsize); 1592 BP_SET_COMPRESS(gbp, ZIO_COMPRESS_OFF); 1593 gbp->blk_birth = txg; 1594 zio_nowait(zio_rewrite(zio, spa, 1595 zio->io_checksum, txg, gbp, 1596 (char *)zio->io_data + loff, lsize, 1597 zio_write_allocate_gang_member_done, NULL, 1598 zio->io_priority, 1599 zio->io_flags & ZIO_FLAG_GANG_INHERIT, 1600 &zio->io_bookmark)); 1601 } else { 1602 lsize = P2ROUNDUP(resid / gbps_left, SPA_MINBLOCKSIZE); 1603 ASSERT(lsize != SPA_MINBLOCKSIZE); 1604 zio_nowait(zio_write_allocate(zio, spa, 1605 zio->io_checksum, txg, gbp, 1606 (char *)zio->io_data + loff, lsize, 1607 zio_write_allocate_gang_member_done, NULL, 1608 zio->io_priority, 1609 zio->io_flags & ZIO_FLAG_GANG_INHERIT)); 1610 } 1611 } 1612 1613 ASSERT(resid == 0 && loff == zio->io_size); 1614 1615 zio->io_pipeline |= 1U << ZIO_STAGE_GANG_CHECKSUM_GENERATE; 1616 1617 zio_push_transform(zio, gbh, gsize, gsize); 1618 1619 /* 1620 * As much as we'd like this to be 'ready' instead of 'done', 1621 * updating our ASIZE doesn't happen until the io_done callback, 1622 * so we have to wait for that to finish in order for our BP 1623 * to be stable. 1624 */ 1625 return (zio_wait_for_children_done(zio)); 1626 } 1627 1628 /* 1629 * ========================================================================== 1630 * Allocate and free blocks 1631 * ========================================================================== 1632 */ 1633 static int 1634 zio_dva_allocate(zio_t *zio) 1635 { 1636 spa_t *spa = zio->io_spa; 1637 metaslab_class_t *mc = spa->spa_normal_class; 1638 blkptr_t *bp = zio->io_bp; 1639 int error; 1640 1641 ASSERT(BP_IS_HOLE(bp)); 1642 ASSERT3U(BP_GET_NDVAS(bp), ==, 0); 1643 ASSERT3U(zio->io_ndvas, >, 0); 1644 ASSERT3U(zio->io_ndvas, <=, spa_max_replication(spa)); 1645 1646 /* 1647 * For testing purposes, we force I/Os to retry. We don't allow 1648 * retries beyond the first pass since those I/Os are non-allocating 1649 * writes. 1650 */ 1651 if (zio_io_fail_shift && 1652 spa_sync_pass(zio->io_spa) <= zio_sync_pass.zp_rewrite && 1653 zio_io_should_fail(zio_io_fail_shift)) 1654 zio->io_flags |= ZIO_FLAG_WRITE_RETRY; 1655 1656 ASSERT3U(zio->io_size, ==, BP_GET_PSIZE(bp)); 1657 1658 error = metaslab_alloc(spa, mc, zio->io_size, bp, zio->io_ndvas, 1659 zio->io_txg, NULL, B_FALSE); 1660 1661 if (error == 0) { 1662 bp->blk_birth = zio->io_txg; 1663 } else if (error == ENOSPC && zio->io_size > SPA_MINBLOCKSIZE) { 1664 return (zio_write_allocate_gang_members(zio, mc)); 1665 } else { 1666 zio->io_error = error; 1667 } 1668 1669 return (ZIO_PIPELINE_CONTINUE); 1670 } 1671 1672 static int 1673 zio_dva_free(zio_t *zio) 1674 { 1675 blkptr_t *bp = zio->io_bp; 1676 1677 metaslab_free(zio->io_spa, bp, zio->io_txg, B_FALSE); 1678 1679 BP_ZERO(bp); 1680 1681 return (ZIO_PIPELINE_CONTINUE); 1682 } 1683 1684 static int 1685 zio_dva_claim(zio_t *zio) 1686 { 1687 zio->io_error = metaslab_claim(zio->io_spa, zio->io_bp, zio->io_txg); 1688 1689 return (ZIO_PIPELINE_CONTINUE); 1690 } 1691 1692 /* 1693 * ========================================================================== 1694 * Read and write to physical devices 1695 * ========================================================================== 1696 */ 1697 1698 static int 1699 zio_vdev_io_start(zio_t *zio) 1700 { 1701 vdev_t *vd = zio->io_vd; 1702 vdev_t *tvd = vd ? vd->vdev_top : NULL; 1703 blkptr_t *bp = zio->io_bp; 1704 uint64_t align; 1705 spa_t *spa = zio->io_spa; 1706 1707 /* 1708 * If the pool is already in a failure state then just suspend 1709 * this IO until the problem is resolved. We will reissue them 1710 * at that time. 1711 */ 1712 if (spa_state(spa) == POOL_STATE_IO_FAILURE && 1713 zio->io_type == ZIO_TYPE_WRITE) 1714 return (zio_vdev_suspend_io(zio)); 1715 1716 /* 1717 * The mirror_ops handle multiple DVAs in a single BP 1718 */ 1719 if (vd == NULL) 1720 return (vdev_mirror_ops.vdev_op_io_start(zio)); 1721 1722 align = 1ULL << tvd->vdev_ashift; 1723 1724 if (zio->io_retries == 0 && vd == tvd) 1725 zio->io_flags |= ZIO_FLAG_FAILFAST; 1726 1727 if (!(zio->io_flags & ZIO_FLAG_PHYSICAL) && vd->vdev_children == 0) { 1728 zio->io_flags |= ZIO_FLAG_PHYSICAL; 1729 zio->io_offset += VDEV_LABEL_START_SIZE; 1730 } 1731 1732 if (P2PHASE(zio->io_size, align) != 0) { 1733 uint64_t asize = P2ROUNDUP(zio->io_size, align); 1734 char *abuf = zio_buf_alloc(asize); 1735 ASSERT(vd == tvd); 1736 if (zio->io_type == ZIO_TYPE_WRITE) { 1737 bcopy(zio->io_data, abuf, zio->io_size); 1738 bzero(abuf + zio->io_size, asize - zio->io_size); 1739 } 1740 zio_push_transform(zio, abuf, asize, asize); 1741 ASSERT(!(zio->io_flags & ZIO_FLAG_SUBBLOCK)); 1742 zio->io_flags |= ZIO_FLAG_SUBBLOCK; 1743 } 1744 1745 ASSERT(P2PHASE(zio->io_offset, align) == 0); 1746 ASSERT(P2PHASE(zio->io_size, align) == 0); 1747 ASSERT(bp == NULL || 1748 P2ROUNDUP(ZIO_GET_IOSIZE(zio), align) == zio->io_size); 1749 ASSERT(zio->io_type != ZIO_TYPE_WRITE || (spa_mode & FWRITE)); 1750 1751 return (vd->vdev_ops->vdev_op_io_start(zio)); 1752 } 1753 1754 static int 1755 zio_vdev_io_done(zio_t *zio) 1756 { 1757 if (zio->io_vd == NULL) 1758 return (vdev_mirror_ops.vdev_op_io_done(zio)); 1759 1760 return (zio->io_vd->vdev_ops->vdev_op_io_done(zio)); 1761 } 1762 1763 /* XXPOLICY */ 1764 boolean_t 1765 zio_should_retry(zio_t *zio) 1766 { 1767 vdev_t *vd = zio->io_vd; 1768 1769 if (zio->io_error == 0) 1770 return (B_FALSE); 1771 if (zio->io_delegate_list != NULL) 1772 return (B_FALSE); 1773 if (vd && vd != vd->vdev_top) 1774 return (B_FALSE); 1775 if (zio->io_flags & ZIO_FLAG_DONT_RETRY) 1776 return (B_FALSE); 1777 if (zio->io_retries > 0) 1778 return (B_FALSE); 1779 1780 return (B_TRUE); 1781 } 1782 1783 static int 1784 zio_vdev_io_assess(zio_t *zio) 1785 { 1786 vdev_t *vd = zio->io_vd; 1787 vdev_t *tvd = vd ? vd->vdev_top : NULL; 1788 1789 ASSERT(zio->io_vsd == NULL); 1790 1791 if (zio->io_flags & ZIO_FLAG_SUBBLOCK) { 1792 void *abuf; 1793 uint64_t asize; 1794 ASSERT(vd == tvd); 1795 zio_pop_transform(zio, &abuf, &asize, &asize); 1796 if (zio->io_type == ZIO_TYPE_READ) 1797 bcopy(abuf, zio->io_data, zio->io_size); 1798 zio_buf_free(abuf, asize); 1799 zio->io_flags &= ~ZIO_FLAG_SUBBLOCK; 1800 } 1801 1802 if (zio_injection_enabled && !zio->io_error) 1803 zio->io_error = zio_handle_fault_injection(zio, EIO); 1804 1805 /* 1806 * If the I/O failed, determine whether we should attempt to retry it. 1807 */ 1808 /* XXPOLICY */ 1809 if (zio_should_retry(zio)) { 1810 ASSERT(tvd == vd); 1811 1812 zio->io_retries++; 1813 zio->io_error = 0; 1814 zio->io_flags &= ZIO_FLAG_RETRY_INHERIT; 1815 /* XXPOLICY */ 1816 zio->io_flags &= ~ZIO_FLAG_FAILFAST; 1817 zio->io_flags |= ZIO_FLAG_DONT_CACHE; 1818 zio->io_stage = ZIO_STAGE_VDEV_IO_START - 1; 1819 1820 return (ZIO_PIPELINE_CONTINUE); 1821 } 1822 1823 return (ZIO_PIPELINE_CONTINUE); 1824 } 1825 1826 void 1827 zio_vdev_io_reissue(zio_t *zio) 1828 { 1829 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_START); 1830 ASSERT(zio->io_error == 0); 1831 1832 zio->io_stage--; 1833 } 1834 1835 void 1836 zio_vdev_io_redone(zio_t *zio) 1837 { 1838 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_DONE); 1839 1840 zio->io_stage--; 1841 } 1842 1843 void 1844 zio_vdev_io_bypass(zio_t *zio) 1845 { 1846 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_START); 1847 ASSERT(zio->io_error == 0); 1848 1849 zio->io_flags |= ZIO_FLAG_IO_BYPASS; 1850 zio->io_stage = ZIO_STAGE_VDEV_IO_ASSESS - 1; 1851 } 1852 1853 /* 1854 * ========================================================================== 1855 * Generate and verify checksums 1856 * ========================================================================== 1857 */ 1858 static int 1859 zio_checksum_generate(zio_t *zio) 1860 { 1861 int checksum = zio->io_checksum; 1862 blkptr_t *bp = zio->io_bp; 1863 1864 ASSERT3U(zio->io_size, ==, BP_GET_PSIZE(bp)); 1865 1866 BP_SET_CHECKSUM(bp, checksum); 1867 BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER); 1868 1869 zio_checksum(checksum, &bp->blk_cksum, zio->io_data, zio->io_size); 1870 1871 return (ZIO_PIPELINE_CONTINUE); 1872 } 1873 1874 static int 1875 zio_gang_checksum_generate(zio_t *zio) 1876 { 1877 zio_cksum_t zc; 1878 zio_gbh_phys_t *gbh = zio->io_data; 1879 1880 ASSERT(BP_IS_GANG(zio->io_bp)); 1881 ASSERT3U(zio->io_size, ==, SPA_GANGBLOCKSIZE); 1882 1883 zio_set_gang_verifier(zio, &gbh->zg_tail.zbt_cksum); 1884 1885 zio_checksum(ZIO_CHECKSUM_GANG_HEADER, &zc, zio->io_data, zio->io_size); 1886 1887 return (ZIO_PIPELINE_CONTINUE); 1888 } 1889 1890 static int 1891 zio_checksum_verify(zio_t *zio) 1892 { 1893 if (zio->io_bp != NULL) { 1894 zio->io_error = zio_checksum_error(zio); 1895 if (zio->io_error && !(zio->io_flags & ZIO_FLAG_SPECULATIVE)) 1896 zfs_ereport_post(FM_EREPORT_ZFS_CHECKSUM, 1897 zio->io_spa, zio->io_vd, zio, 0, 0); 1898 } 1899 1900 return (ZIO_PIPELINE_CONTINUE); 1901 } 1902 1903 /* 1904 * Called by RAID-Z to ensure we don't compute the checksum twice. 1905 */ 1906 void 1907 zio_checksum_verified(zio_t *zio) 1908 { 1909 zio->io_pipeline &= ~(1U << ZIO_STAGE_CHECKSUM_VERIFY); 1910 } 1911 1912 /* 1913 * Set the external verifier for a gang block based on stuff in the bp 1914 */ 1915 void 1916 zio_set_gang_verifier(zio_t *zio, zio_cksum_t *zcp) 1917 { 1918 blkptr_t *bp = zio->io_bp; 1919 1920 zcp->zc_word[0] = DVA_GET_VDEV(BP_IDENTITY(bp)); 1921 zcp->zc_word[1] = DVA_GET_OFFSET(BP_IDENTITY(bp)); 1922 zcp->zc_word[2] = bp->blk_birth; 1923 zcp->zc_word[3] = 0; 1924 } 1925 1926 /* 1927 * ========================================================================== 1928 * Define the pipeline 1929 * ========================================================================== 1930 */ 1931 typedef int zio_pipe_stage_t(zio_t *zio); 1932 1933 zio_pipe_stage_t *zio_pipeline[ZIO_STAGE_DONE + 2] = { 1934 NULL, 1935 zio_wait_for_children_ready, 1936 zio_read_init, 1937 zio_issue_async, 1938 zio_write_compress, 1939 zio_checksum_generate, 1940 zio_get_gang_header, 1941 zio_rewrite_gang_members, 1942 zio_free_gang_members, 1943 zio_claim_gang_members, 1944 zio_dva_allocate, 1945 zio_dva_free, 1946 zio_dva_claim, 1947 zio_gang_checksum_generate, 1948 zio_ready, 1949 zio_vdev_io_start, 1950 zio_vdev_io_done, 1951 zio_vdev_io_assess, 1952 zio_wait_for_children_done, 1953 zio_checksum_verify, 1954 zio_read_gang_members, 1955 zio_read_decompress, 1956 zio_assess, 1957 zio_done, 1958 NULL 1959 }; 1960 1961 /* 1962 * Execute the I/O pipeline until one of the following occurs: 1963 * (1) the I/O completes; (2) the pipeline stalls waiting for 1964 * dependent child I/Os; (3) the I/O issues, so we're waiting 1965 * for an I/O completion interrupt; (4) the I/O is delegated by 1966 * vdev-level caching or aggregation; (5) the I/O is deferred 1967 * due to vdev-level queueing; (6) the I/O is handed off to 1968 * another thread. In all cases, the pipeline stops whenever 1969 * there's no CPU work; it never burns a thread in cv_wait(). 1970 * 1971 * There's no locking on io_stage because there's no legitimate way 1972 * for multiple threads to be attempting to process the same I/O. 1973 */ 1974 void 1975 zio_execute(zio_t *zio) 1976 { 1977 while (zio->io_stage < ZIO_STAGE_DONE) { 1978 uint32_t pipeline = zio->io_pipeline; 1979 int rv; 1980 1981 ASSERT(!MUTEX_HELD(&zio->io_lock)); 1982 1983 /* 1984 * If an error occurred outside the vdev stack, 1985 * just execute the interlock stages to clean up. 1986 */ 1987 if (zio->io_error && 1988 ((1U << zio->io_stage) & ZIO_VDEV_IO_STAGES) == 0) 1989 pipeline &= ZIO_ERROR_PIPELINE_MASK; 1990 1991 while (((1U << ++zio->io_stage) & pipeline) == 0) 1992 continue; 1993 1994 ASSERT(zio->io_stage <= ZIO_STAGE_DONE); 1995 ASSERT(zio->io_stalled == 0); 1996 1997 rv = zio_pipeline[zio->io_stage](zio); 1998 1999 if (rv == ZIO_PIPELINE_STOP) 2000 return; 2001 2002 ASSERT(rv == ZIO_PIPELINE_CONTINUE); 2003 } 2004 } 2005 2006 static boolean_t 2007 zio_io_should_fail(uint16_t range) 2008 { 2009 static uint16_t allocs = 0; 2010 2011 return (P2PHASE(allocs++, 1U<<range) == 0); 2012 } 2013 2014 /* 2015 * Try to allocate an intent log block. Return 0 on success, errno on failure. 2016 */ 2017 int 2018 zio_alloc_blk(spa_t *spa, uint64_t size, blkptr_t *new_bp, blkptr_t *old_bp, 2019 uint64_t txg) 2020 { 2021 int error; 2022 2023 spa_config_enter(spa, RW_READER, FTAG); 2024 2025 if (zio_zil_fail_shift && zio_io_should_fail(zio_zil_fail_shift)) { 2026 spa_config_exit(spa, FTAG); 2027 return (ENOSPC); 2028 } 2029 2030 /* 2031 * We were passed the previous log block's DVA in bp->blk_dva[0]. 2032 * We use that as a hint for which vdev to allocate from next. 2033 */ 2034 error = metaslab_alloc(spa, spa->spa_log_class, size, 2035 new_bp, 1, txg, old_bp, B_TRUE); 2036 2037 if (error) 2038 error = metaslab_alloc(spa, spa->spa_normal_class, size, 2039 new_bp, 1, txg, old_bp, B_TRUE); 2040 2041 if (error == 0) { 2042 BP_SET_LSIZE(new_bp, size); 2043 BP_SET_PSIZE(new_bp, size); 2044 BP_SET_COMPRESS(new_bp, ZIO_COMPRESS_OFF); 2045 BP_SET_CHECKSUM(new_bp, ZIO_CHECKSUM_ZILOG); 2046 BP_SET_TYPE(new_bp, DMU_OT_INTENT_LOG); 2047 BP_SET_LEVEL(new_bp, 0); 2048 BP_SET_BYTEORDER(new_bp, ZFS_HOST_BYTEORDER); 2049 new_bp->blk_birth = txg; 2050 } 2051 2052 spa_config_exit(spa, FTAG); 2053 2054 return (error); 2055 } 2056 2057 /* 2058 * Free an intent log block. We know it can't be a gang block, so there's 2059 * nothing to do except metaslab_free() it. 2060 */ 2061 void 2062 zio_free_blk(spa_t *spa, blkptr_t *bp, uint64_t txg) 2063 { 2064 ASSERT(!BP_IS_GANG(bp)); 2065 2066 spa_config_enter(spa, RW_READER, FTAG); 2067 2068 metaslab_free(spa, bp, txg, B_FALSE); 2069 2070 spa_config_exit(spa, FTAG); 2071 } 2072 2073 /* 2074 * start an async flush of the write cache for this vdev 2075 */ 2076 void 2077 zio_flush(zio_t *zio, vdev_t *vd) 2078 { 2079 zio_nowait(zio_ioctl(zio, zio->io_spa, vd, DKIOCFLUSHWRITECACHE, 2080 NULL, NULL, ZIO_PRIORITY_NOW, 2081 ZIO_FLAG_CANFAIL | ZIO_FLAG_DONT_RETRY)); 2082 } 2083