Deleted Added
full compact
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 ---