Mercurial > illumos > illumos-gate
changeset 5475:e140313199cc
6626338 assertion failed: 0 == dsl_prop_get_ds_locked(ds->ds_dir, "refreservation", sizeof (uint64_t), 1, &d
author | ck153898 |
---|---|
date | Tue, 13 Nov 2007 15:14:11 -0800 |
parents | d1f8ad75584a |
children | 07e134b58b71 |
files | usr/src/uts/common/fs/zfs/dsl_dataset.c |
diffstat | 1 files changed, 22 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/zfs/dsl_dataset.c Tue Nov 13 13:37:43 2007 -0800 +++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c Tue Nov 13 15:14:11 2007 -0800 @@ -374,6 +374,28 @@ } } + if (!dsl_dataset_is_snapshot(ds)) { + boolean_t need_lock = + !RW_LOCK_HELD(&dp->dp_config_rwlock); + + if (need_lock) + rw_enter(&dp->dp_config_rwlock, RW_READER); + + err = dsl_prop_get_ds_locked(ds->ds_dir, + "refreservation", sizeof (uint64_t), 1, + &ds->ds_reserved, NULL); + if (err == 0) { + err = dsl_prop_get_ds_locked(ds->ds_dir, + "refquota", sizeof (uint64_t), 1, + &ds->ds_quota, NULL); + } + + if (need_lock) + rw_exit(&dp->dp_config_rwlock); + } else { + ds->ds_reserved = ds->ds_quota = 0; + } + if (err == 0) { winner = dmu_buf_set_user_ie(dbuf, ds, &ds->ds_phys, dsl_dataset_evict); @@ -398,24 +420,6 @@ ds->ds_fsid_guid = unique_insert(ds->ds_phys->ds_fsid_guid); } - - if (!dsl_dataset_is_snapshot(ds)) { - boolean_t need_lock = - !RW_LOCK_HELD(&dp->dp_config_rwlock); - - if (need_lock) - rw_enter(&dp->dp_config_rwlock, RW_READER); - VERIFY(0 == dsl_prop_get_ds_locked(ds->ds_dir, - "refreservation", sizeof (uint64_t), 1, - &ds->ds_reserved, NULL)); - VERIFY(0 == dsl_prop_get_ds_locked(ds->ds_dir, - "refquota", sizeof (uint64_t), 1, &ds->ds_quota, - NULL)); - if (need_lock) - rw_exit(&dp->dp_config_rwlock); - } else { - ds->ds_reserved = ds->ds_quota = 0; - } } ASSERT3P(ds->ds_dbuf, ==, dbuf); ASSERT3P(ds->ds_phys, ==, dbuf->db_data);