dnode.c (230945) | dnode.c (236884) |
---|---|
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 --- 6 unchanged lines hidden (view full) --- 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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. | 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 --- 6 unchanged lines hidden (view full) --- 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 (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. |
23 * Copyright (c) 2012 by Delphix. All rights reserved. |
|
23 */ 24 25#include <sys/zfs_context.h> 26#include <sys/dbuf.h> 27#include <sys/dnode.h> 28#include <sys/dmu.h> 29#include <sys/dmu_impl.h> 30#include <sys/dmu_tx.h> --- 160 unchanged lines hidden (view full) --- 191dnode_verify(dnode_t *dn) 192{ 193 int drop_struct_lock = FALSE; 194 195 ASSERT(dn->dn_phys); 196 ASSERT(dn->dn_objset); 197 ASSERT(dn->dn_handle->dnh_dnode == dn); 198 | 24 */ 25 26#include <sys/zfs_context.h> 27#include <sys/dbuf.h> 28#include <sys/dnode.h> 29#include <sys/dmu.h> 30#include <sys/dmu_impl.h> 31#include <sys/dmu_tx.h> --- 160 unchanged lines hidden (view full) --- 192dnode_verify(dnode_t *dn) 193{ 194 int drop_struct_lock = FALSE; 195 196 ASSERT(dn->dn_phys); 197 ASSERT(dn->dn_objset); 198 ASSERT(dn->dn_handle->dnh_dnode == dn); 199 |
199 ASSERT(dn->dn_phys->dn_type < DMU_OT_NUMTYPES); | 200 ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); |
200 201 if (!(zfs_flags & ZFS_DEBUG_DNODE_VERIFY)) 202 return; 203 204 if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) { 205 rw_enter(&dn->dn_struct_rwlock, RW_READER); 206 drop_struct_lock = TRUE; 207 } 208 if (dn->dn_phys->dn_type != DMU_OT_NONE || dn->dn_allocated_txg != 0) { 209 int i; 210 ASSERT3U(dn->dn_indblkshift, >=, 0); 211 ASSERT3U(dn->dn_indblkshift, <=, SPA_MAXBLOCKSHIFT); 212 if (dn->dn_datablkshift) { 213 ASSERT3U(dn->dn_datablkshift, >=, SPA_MINBLOCKSHIFT); 214 ASSERT3U(dn->dn_datablkshift, <=, SPA_MAXBLOCKSHIFT); 215 ASSERT3U(1<<dn->dn_datablkshift, ==, dn->dn_datablksz); 216 } 217 ASSERT3U(dn->dn_nlevels, <=, 30); | 201 202 if (!(zfs_flags & ZFS_DEBUG_DNODE_VERIFY)) 203 return; 204 205 if (!RW_WRITE_HELD(&dn->dn_struct_rwlock)) { 206 rw_enter(&dn->dn_struct_rwlock, RW_READER); 207 drop_struct_lock = TRUE; 208 } 209 if (dn->dn_phys->dn_type != DMU_OT_NONE || dn->dn_allocated_txg != 0) { 210 int i; 211 ASSERT3U(dn->dn_indblkshift, >=, 0); 212 ASSERT3U(dn->dn_indblkshift, <=, SPA_MAXBLOCKSHIFT); 213 if (dn->dn_datablkshift) { 214 ASSERT3U(dn->dn_datablkshift, >=, SPA_MINBLOCKSHIFT); 215 ASSERT3U(dn->dn_datablkshift, <=, SPA_MAXBLOCKSHIFT); 216 ASSERT3U(1<<dn->dn_datablkshift, ==, dn->dn_datablksz); 217 } 218 ASSERT3U(dn->dn_nlevels, <=, 30); |
218 ASSERT3U(dn->dn_type, <=, DMU_OT_NUMTYPES); | 219 ASSERT(DMU_OT_IS_VALID(dn->dn_type)); |
219 ASSERT3U(dn->dn_nblkptr, >=, 1); 220 ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); 221 ASSERT3U(dn->dn_bonuslen, <=, DN_MAX_BONUSLEN); 222 ASSERT3U(dn->dn_datablksz, ==, 223 dn->dn_datablkszsec << SPA_MINBLOCKSHIFT); 224 ASSERT3U(ISP2(dn->dn_datablksz), ==, dn->dn_datablkshift != 0); 225 ASSERT3U((dn->dn_nblkptr - 1) * sizeof (blkptr_t) + 226 dn->dn_bonuslen, <=, DN_MAX_BONUSLEN); --- 49 unchanged lines hidden (view full) --- 276 * Note that the bonus length calculated here may be 277 * longer than the actual bonus buffer. This is because 278 * we always put the bonus buffer after the last block 279 * pointer (instead of packing it against the end of the 280 * dnode buffer). 281 */ 282 int off = (dnp->dn_nblkptr-1) * sizeof (blkptr_t); 283 size_t len = DN_MAX_BONUSLEN - off; | 220 ASSERT3U(dn->dn_nblkptr, >=, 1); 221 ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); 222 ASSERT3U(dn->dn_bonuslen, <=, DN_MAX_BONUSLEN); 223 ASSERT3U(dn->dn_datablksz, ==, 224 dn->dn_datablkszsec << SPA_MINBLOCKSHIFT); 225 ASSERT3U(ISP2(dn->dn_datablksz), ==, dn->dn_datablkshift != 0); 226 ASSERT3U((dn->dn_nblkptr - 1) * sizeof (blkptr_t) + 227 dn->dn_bonuslen, <=, DN_MAX_BONUSLEN); --- 49 unchanged lines hidden (view full) --- 277 * Note that the bonus length calculated here may be 278 * longer than the actual bonus buffer. This is because 279 * we always put the bonus buffer after the last block 280 * pointer (instead of packing it against the end of the 281 * dnode buffer). 282 */ 283 int off = (dnp->dn_nblkptr-1) * sizeof (blkptr_t); 284 size_t len = DN_MAX_BONUSLEN - off; |
284 ASSERT3U(dnp->dn_bonustype, <, DMU_OT_NUMTYPES); 285 dmu_ot[dnp->dn_bonustype].ot_byteswap(dnp->dn_bonus + off, len); | 285 ASSERT(DMU_OT_IS_VALID(dnp->dn_bonustype)); 286 dmu_object_byteswap_t byteswap = 287 DMU_OT_BYTESWAP(dnp->dn_bonustype); 288 dmu_ot_byteswap[byteswap].ob_func(dnp->dn_bonus + off, len); |
286 } 287 288 /* Swap SPILL block if we have one */ 289 if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) 290 byteswap_uint64_array(&dnp->dn_spill, sizeof (blkptr_t)); 291 292} 293 --- 111 unchanged lines hidden (view full) --- 405 dn->dn_bonustype = dnp->dn_bonustype; 406 dn->dn_bonuslen = dnp->dn_bonuslen; 407 dn->dn_maxblkid = dnp->dn_maxblkid; 408 dn->dn_have_spill = ((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) != 0); 409 dn->dn_id_flags = 0; 410 411 dmu_zfetch_init(&dn->dn_zfetch, dn); 412 | 289 } 290 291 /* Swap SPILL block if we have one */ 292 if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) 293 byteswap_uint64_array(&dnp->dn_spill, sizeof (blkptr_t)); 294 295} 296 --- 111 unchanged lines hidden (view full) --- 408 dn->dn_bonustype = dnp->dn_bonustype; 409 dn->dn_bonuslen = dnp->dn_bonuslen; 410 dn->dn_maxblkid = dnp->dn_maxblkid; 411 dn->dn_have_spill = ((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) != 0); 412 dn->dn_id_flags = 0; 413 414 dmu_zfetch_init(&dn->dn_zfetch, dn); 415 |
413 ASSERT(dn->dn_phys->dn_type < DMU_OT_NUMTYPES); | 416 ASSERT(DMU_OT_IS_VALID(dn->dn_phys->dn_type)); |
414 415 mutex_enter(&os->os_lock); 416 list_insert_head(&os->os_dnodes, dn); 417 membar_producer(); 418 /* 419 * Everything else must be valid before assigning dn_objset makes the 420 * dnode eligible for dnode_move(). 421 */ --- 72 unchanged lines hidden (view full) --- 494 495 dprintf("os=%p obj=%llu txg=%llu blocksize=%d ibs=%d\n", dn->dn_objset, 496 dn->dn_object, tx->tx_txg, blocksize, ibs); 497 498 ASSERT(dn->dn_type == DMU_OT_NONE); 499 ASSERT(bcmp(dn->dn_phys, &dnode_phys_zero, sizeof (dnode_phys_t)) == 0); 500 ASSERT(dn->dn_phys->dn_type == DMU_OT_NONE); 501 ASSERT(ot != DMU_OT_NONE); | 417 418 mutex_enter(&os->os_lock); 419 list_insert_head(&os->os_dnodes, dn); 420 membar_producer(); 421 /* 422 * Everything else must be valid before assigning dn_objset makes the 423 * dnode eligible for dnode_move(). 424 */ --- 72 unchanged lines hidden (view full) --- 497 498 dprintf("os=%p obj=%llu txg=%llu blocksize=%d ibs=%d\n", dn->dn_objset, 499 dn->dn_object, tx->tx_txg, blocksize, ibs); 500 501 ASSERT(dn->dn_type == DMU_OT_NONE); 502 ASSERT(bcmp(dn->dn_phys, &dnode_phys_zero, sizeof (dnode_phys_t)) == 0); 503 ASSERT(dn->dn_phys->dn_type == DMU_OT_NONE); 504 ASSERT(ot != DMU_OT_NONE); |
502 ASSERT3U(ot, <, DMU_OT_NUMTYPES); | 505 ASSERT(DMU_OT_IS_VALID(ot)); |
503 ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || 504 (bonustype == DMU_OT_SA && bonuslen == 0) || 505 (bonustype != DMU_OT_NONE && bonuslen != 0)); | 506 ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || 507 (bonustype == DMU_OT_SA && bonuslen == 0) || 508 (bonustype != DMU_OT_NONE && bonuslen != 0)); |
506 ASSERT3U(bonustype, <, DMU_OT_NUMTYPES); | 509 ASSERT(DMU_OT_IS_VALID(bonustype)); |
507 ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); 508 ASSERT(dn->dn_type == DMU_OT_NONE); 509 ASSERT3U(dn->dn_maxblkid, ==, 0); 510 ASSERT3U(dn->dn_allocated_txg, ==, 0); 511 ASSERT3U(dn->dn_assigned_txg, ==, 0); 512 ASSERT(refcount_is_zero(&dn->dn_tx_holds)); 513 ASSERT3U(refcount_count(&dn->dn_holds), <=, 1); 514 ASSERT3P(list_head(&dn->dn_dbufs), ==, NULL); --- 51 unchanged lines hidden (view full) --- 566 ASSERT3U(blocksize, >=, SPA_MINBLOCKSIZE); 567 ASSERT3U(blocksize, <=, SPA_MAXBLOCKSIZE); 568 ASSERT3U(blocksize % SPA_MINBLOCKSIZE, ==, 0); 569 ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); 570 ASSERT(tx->tx_txg != 0); 571 ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || 572 (bonustype != DMU_OT_NONE && bonuslen != 0) || 573 (bonustype == DMU_OT_SA && bonuslen == 0)); | 510 ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); 511 ASSERT(dn->dn_type == DMU_OT_NONE); 512 ASSERT3U(dn->dn_maxblkid, ==, 0); 513 ASSERT3U(dn->dn_allocated_txg, ==, 0); 514 ASSERT3U(dn->dn_assigned_txg, ==, 0); 515 ASSERT(refcount_is_zero(&dn->dn_tx_holds)); 516 ASSERT3U(refcount_count(&dn->dn_holds), <=, 1); 517 ASSERT3P(list_head(&dn->dn_dbufs), ==, NULL); --- 51 unchanged lines hidden (view full) --- 569 ASSERT3U(blocksize, >=, SPA_MINBLOCKSIZE); 570 ASSERT3U(blocksize, <=, SPA_MAXBLOCKSIZE); 571 ASSERT3U(blocksize % SPA_MINBLOCKSIZE, ==, 0); 572 ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); 573 ASSERT(tx->tx_txg != 0); 574 ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || 575 (bonustype != DMU_OT_NONE && bonuslen != 0) || 576 (bonustype == DMU_OT_SA && bonuslen == 0)); |
574 ASSERT3U(bonustype, <, DMU_OT_NUMTYPES); | 577 ASSERT(DMU_OT_IS_VALID(bonustype)); |
575 ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); 576 577 /* clean up any unreferenced dbufs */ 578 dnode_evict_dbufs(dn); 579 580 dn->dn_id_flags = 0; 581 582 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); --- 1416 unchanged lines hidden --- | 578 ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); 579 580 /* clean up any unreferenced dbufs */ 581 dnode_evict_dbufs(dn); 582 583 dn->dn_id_flags = 0; 584 585 rw_enter(&dn->dn_struct_rwlock, RW_WRITER); --- 1416 unchanged lines hidden --- |