diff options
author | Matthew Ahrens <mahrens@delphix.com> | 2016-07-13 16:48:01 -0700 |
---|---|---|
committer | Matthew Ahrens <mahrens@delphix.com> | 2016-07-14 12:52:34 -0700 |
commit | 4b5c8e93cab28d3c65ba9d407fd8f46e3be1db1c (patch) | |
tree | ad805a343c61b7932ff58d0f9a2a920bddac98fc /usr/src/uts/common/fs/zfs/dmu_objset.c | |
parent | 470bc2d6d44a4a70ed9403c0bce321333e897c31 (diff) | |
download | illumos-joyent-4b5c8e93cab28d3c65ba9d407fd8f46e3be1db1c.tar.gz |
7104 increase indirect block size
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Robert Mustacchi <rm@joyent.com>
Diffstat (limited to 'usr/src/uts/common/fs/zfs/dmu_objset.c')
-rw-r--r-- | usr/src/uts/common/fs/zfs/dmu_objset.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/usr/src/uts/common/fs/zfs/dmu_objset.c b/usr/src/uts/common/fs/zfs/dmu_objset.c index efad81dd2c..b6ae9680ca 100644 --- a/usr/src/uts/common/fs/zfs/dmu_objset.c +++ b/usr/src/uts/common/fs/zfs/dmu_objset.c @@ -787,11 +787,17 @@ dmu_objset_create_impl(spa_t *spa, dsl_dataset_t *ds, blkptr_t *bp, /* * Determine the number of levels necessary for the meta-dnode - * to contain DN_MAX_OBJECT dnodes. + * to contain DN_MAX_OBJECT dnodes. Note that in order to + * ensure that we do not overflow 64 bits, there has to be + * a nlevels that gives us a number of blocks > DN_MAX_OBJECT + * but < 2^64. Therefore, + * (mdn->dn_indblkshift - SPA_BLKPTRSHIFT) (10) must be + * less than (64 - log2(DN_MAX_OBJECT)) (16). */ - while ((uint64_t)mdn->dn_nblkptr << (mdn->dn_datablkshift + + while ((uint64_t)mdn->dn_nblkptr << + (mdn->dn_datablkshift - DNODE_SHIFT + (levels - 1) * (mdn->dn_indblkshift - SPA_BLKPTRSHIFT)) < - DN_MAX_OBJECT * sizeof (dnode_phys_t)) + DN_MAX_OBJECT) levels++; mdn->dn_next_nlevels[tx->tx_txg & TXG_MASK] = |