svn commit: r275551 - vendor-sys/illumos/dist/uts/common/fs/zfs vendor-sys/illumos/dist/uts/common/fs/zfs/sys vendor/illumos/dist/cmd/zdb
Justin T. Gibbs
gibbs at scsiguy.com
Wed Dec 10 20:29:32 UTC 2014
What’s the policy for the commit log on vendor imports from illumos? Since illumos does not allow “FreeBSD style” commit messages, I’ve been putting that data into the corresponding illumos issue that I create. So this information isn’t lost during the merge to FreeBSD, I think we should pull the issue data into our commit messages in addition to data taken from the git commit in illumos-gate.
One minor gripe about the illumos issue tracker is that I’ve found it hard to keep it from mangling the formatting of text. For example, look at the commit log I put into the history section of https://www.illumos.org/issues/5314. Instead of fighting with that, I’ve been pushing my “FreeBSD commit log” as the description of the review associated with the bug and just linking the issue to the review. You can see that in the next big change from Spectra that is currently going through the review process:
https://www.illumos.org/issues/5056
https://reviews.csiden.org/r/131/
—
Justin
> On Dec 5, 2014, at 5:50 PM, Xin LI <delphij at freebsd.org> wrote:
>
> Author: delphij
> Date: Sat Dec 6 00:50:57 2014
> New Revision: 275551
> URL: https://svnweb.freebsd.org/changeset/base/275551
>
> Log:
> 5314 Remove "dbuf phys" db->db_data pointer aliases in ZFS
> Reviewed by: Andriy Gapon <avg at freebsd.org>
> Reviewed by: Matthew Ahrens <mahrens at delphix.com>
> Reviewed by: Will Andrews <willa at spectralogic.com>
> Approved by: Dan McDonald <danmcd at omniti.com>
> Author: Justin T. Gibbs <justing at spectralogic.com>
>
> illumos/illumos-gate at c1379625401dfbe1c39b79136dd384a571d47fde
>
> Modified:
> vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_diff.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_objset.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_send.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_traverse.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_tx.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dnode.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_bookmark.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dataset.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_deadlist.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_deleg.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_destroy.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dir.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_pool.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_prop.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_scan.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_synctask.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_userhold.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/sa.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/spa.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/spa_history.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dbuf.h
> vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dmu.h
> vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dsl_dataset.h
> vendor-sys/illumos/dist/uts/common/fs/zfs/sys/dsl_dir.h
> vendor-sys/illumos/dist/uts/common/fs/zfs/sys/zap_impl.h
> vendor-sys/illumos/dist/uts/common/fs/zfs/sys/zap_leaf.h
> vendor-sys/illumos/dist/uts/common/fs/zfs/zap.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/zap_leaf.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/zap_micro.c
> vendor-sys/illumos/dist/uts/common/fs/zfs/zfs_ioctl.c
>
> Changes in other areas also in this revision:
> Modified:
> vendor/illumos/dist/cmd/zdb/zdb.c
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dbuf.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -223,11 +223,8 @@ dbuf_evict_user(dmu_buf_impl_t *db)
> if (db->db_level != 0 || db->db_evict_func == NULL)
> return;
>
> - if (db->db_user_data_ptr_ptr)
> - *db->db_user_data_ptr_ptr = db->db.db_data;
> db->db_evict_func(&db->db, db->db_user_ptr);
> db->db_user_ptr = NULL;
> - db->db_user_data_ptr_ptr = NULL;
> db->db_evict_func = NULL;
> }
>
> @@ -418,16 +415,6 @@ dbuf_verify(dmu_buf_impl_t *db)
> #endif
>
> static void
> -dbuf_update_data(dmu_buf_impl_t *db)
> -{
> - ASSERT(MUTEX_HELD(&db->db_mtx));
> - if (db->db_level == 0 && db->db_user_data_ptr_ptr) {
> - ASSERT(!refcount_is_zero(&db->db_holds));
> - *db->db_user_data_ptr_ptr = db->db.db_data;
> - }
> -}
> -
> -static void
> dbuf_set_data(dmu_buf_impl_t *db, arc_buf_t *buf)
> {
> ASSERT(MUTEX_HELD(&db->db_mtx));
> @@ -437,7 +424,6 @@ dbuf_set_data(dmu_buf_impl_t *db, arc_bu
> db->db.db_data = buf->b_data;
> if (!arc_released(buf))
> arc_set_callback(buf, dbuf_do_evict, db);
> - dbuf_update_data(db);
> } else {
> dbuf_evict_user(db);
> db->db.db_data = NULL;
> @@ -543,7 +529,6 @@ dbuf_read_impl(dmu_buf_impl_t *db, zio_t
> if (bonuslen)
> bcopy(DN_BONUS(dn->dn_phys), db->db.db_data, bonuslen);
> DB_DNODE_EXIT(db);
> - dbuf_update_data(db);
> db->db_state = DB_CACHED;
> mutex_exit(&db->db_mtx);
> return;
> @@ -1726,7 +1711,6 @@ dbuf_create(dnode_t *dn, uint8_t level,
> db->db_blkptr = blkptr;
>
> db->db_user_ptr = NULL;
> - db->db_user_data_ptr_ptr = NULL;
> db->db_evict_func = NULL;
> db->db_immediate_evict = 0;
> db->db_freed_in_flight = 0;
> @@ -1971,7 +1955,6 @@ top:
> }
>
> (void) refcount_add(&db->db_holds, tag);
> - dbuf_update_data(db);
> DBUF_VERIFY(db);
> mutex_exit(&db->db_mtx);
>
> @@ -2182,27 +2165,25 @@ dbuf_refcount(dmu_buf_impl_t *db)
> }
>
> void *
> -dmu_buf_set_user(dmu_buf_t *db_fake, void *user_ptr, void *user_data_ptr_ptr,
> +dmu_buf_set_user(dmu_buf_t *db_fake, void *user_ptr,
> dmu_buf_evict_func_t *evict_func)
> {
> - return (dmu_buf_update_user(db_fake, NULL, user_ptr,
> - user_data_ptr_ptr, evict_func));
> + return (dmu_buf_update_user(db_fake, NULL, user_ptr, evict_func));
> }
>
> void *
> -dmu_buf_set_user_ie(dmu_buf_t *db_fake, void *user_ptr, void *user_data_ptr_ptr,
> +dmu_buf_set_user_ie(dmu_buf_t *db_fake, void *user_ptr,
> dmu_buf_evict_func_t *evict_func)
> {
> dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake;
>
> db->db_immediate_evict = TRUE;
> - return (dmu_buf_update_user(db_fake, NULL, user_ptr,
> - user_data_ptr_ptr, evict_func));
> + return (dmu_buf_update_user(db_fake, NULL, user_ptr, evict_func));
> }
>
> void *
> dmu_buf_update_user(dmu_buf_t *db_fake, void *old_user_ptr, void *user_ptr,
> - void *user_data_ptr_ptr, dmu_buf_evict_func_t *evict_func)
> + dmu_buf_evict_func_t *evict_func)
> {
> dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake;
> ASSERT(db->db_level == 0);
> @@ -2213,10 +2194,7 @@ dmu_buf_update_user(dmu_buf_t *db_fake,
>
> if (db->db_user_ptr == old_user_ptr) {
> db->db_user_ptr = user_ptr;
> - db->db_user_data_ptr_ptr = user_data_ptr_ptr;
> db->db_evict_func = evict_func;
> -
> - dbuf_update_data(db);
> } else {
> old_user_ptr = db->db_user_ptr;
> }
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_diff.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_diff.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_diff.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -194,7 +194,7 @@ dmu_diff(const char *tosnap_name, const
> return (SET_ERROR(EXDEV));
> }
>
> - fromtxg = fromsnap->ds_phys->ds_creation_txg;
> + fromtxg = dsl_dataset_phys(fromsnap)->ds_creation_txg;
> dsl_dataset_rele(fromsnap, FTAG);
>
> dsl_dataset_long_hold(tosnap, FTAG);
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_objset.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_objset.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_objset.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -1479,12 +1479,12 @@ dmu_snapshot_realname(objset_t *os, char
> dsl_dataset_t *ds = os->os_dsl_dataset;
> uint64_t ignored;
>
> - if (ds->ds_phys->ds_snapnames_zapobj == 0)
> + if (dsl_dataset_phys(ds)->ds_snapnames_zapobj == 0)
> return (SET_ERROR(ENOENT));
>
> return (zap_lookup_norm(ds->ds_dir->dd_pool->dp_meta_objset,
> - ds->ds_phys->ds_snapnames_zapobj, name, 8, 1, &ignored, MT_FIRST,
> - real, maxlen, conflict));
> + dsl_dataset_phys(ds)->ds_snapnames_zapobj, name, 8, 1, &ignored,
> + MT_FIRST, real, maxlen, conflict));
> }
>
> int
> @@ -1497,12 +1497,12 @@ dmu_snapshot_list_next(objset_t *os, int
>
> ASSERT(dsl_pool_config_held(dmu_objset_pool(os)));
>
> - if (ds->ds_phys->ds_snapnames_zapobj == 0)
> + if (dsl_dataset_phys(ds)->ds_snapnames_zapobj == 0)
> return (SET_ERROR(ENOENT));
>
> zap_cursor_init_serialized(&cursor,
> ds->ds_dir->dd_pool->dp_meta_objset,
> - ds->ds_phys->ds_snapnames_zapobj, *offp);
> + dsl_dataset_phys(ds)->ds_snapnames_zapobj, *offp);
>
> if (zap_cursor_retrieve(&cursor, &attr) != 0) {
> zap_cursor_fini(&cursor);
> @@ -1536,12 +1536,12 @@ dmu_dir_list_next(objset_t *os, int name
>
> /* there is no next dir on a snapshot! */
> if (os->os_dsl_dataset->ds_object !=
> - dd->dd_phys->dd_head_dataset_obj)
> + dsl_dir_phys(dd)->dd_head_dataset_obj)
> return (SET_ERROR(ENOENT));
>
> zap_cursor_init_serialized(&cursor,
> dd->dd_pool->dp_meta_objset,
> - dd->dd_phys->dd_child_dir_zapobj, *offp);
> + dsl_dir_phys(dd)->dd_child_dir_zapobj, *offp);
>
> if (zap_cursor_retrieve(&cursor, &attr) != 0) {
> zap_cursor_fini(&cursor);
> @@ -1589,7 +1589,7 @@ dmu_objset_find_dp(dsl_pool_t *dp, uint6
> return (0);
> }
>
> - thisobj = dd->dd_phys->dd_head_dataset_obj;
> + thisobj = dsl_dir_phys(dd)->dd_head_dataset_obj;
> attr = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP);
>
> /*
> @@ -1597,7 +1597,7 @@ dmu_objset_find_dp(dsl_pool_t *dp, uint6
> */
> if (flags & DS_FIND_CHILDREN) {
> for (zap_cursor_init(&zc, dp->dp_meta_objset,
> - dd->dd_phys->dd_child_dir_zapobj);
> + dsl_dir_phys(dd)->dd_child_dir_zapobj);
> zap_cursor_retrieve(&zc, attr) == 0;
> (void) zap_cursor_advance(&zc)) {
> ASSERT3U(attr->za_integer_length, ==,
> @@ -1626,7 +1626,9 @@ dmu_objset_find_dp(dsl_pool_t *dp, uint6
> err = dsl_dataset_hold_obj(dp, thisobj, FTAG, &ds);
>
> if (err == 0) {
> - uint64_t snapobj = ds->ds_phys->ds_snapnames_zapobj;
> + uint64_t snapobj;
> +
> + snapobj = dsl_dataset_phys(ds)->ds_snapnames_zapobj;
> dsl_dataset_rele(ds, FTAG);
>
> for (zap_cursor_init(&zc, dp->dp_meta_objset, snapobj);
> @@ -1701,7 +1703,7 @@ dmu_objset_find_impl(spa_t *spa, const c
> return (0);
> }
>
> - thisobj = dd->dd_phys->dd_head_dataset_obj;
> + thisobj = dsl_dir_phys(dd)->dd_head_dataset_obj;
> attr = kmem_alloc(sizeof (zap_attribute_t), KM_SLEEP);
>
> /*
> @@ -1709,7 +1711,7 @@ dmu_objset_find_impl(spa_t *spa, const c
> */
> if (flags & DS_FIND_CHILDREN) {
> for (zap_cursor_init(&zc, dp->dp_meta_objset,
> - dd->dd_phys->dd_child_dir_zapobj);
> + dsl_dir_phys(dd)->dd_child_dir_zapobj);
> zap_cursor_retrieve(&zc, attr) == 0;
> (void) zap_cursor_advance(&zc)) {
> ASSERT3U(attr->za_integer_length, ==,
> @@ -1742,7 +1744,9 @@ dmu_objset_find_impl(spa_t *spa, const c
> err = dsl_dataset_hold_obj(dp, thisobj, FTAG, &ds);
>
> if (err == 0) {
> - uint64_t snapobj = ds->ds_phys->ds_snapnames_zapobj;
> + uint64_t snapobj;
> +
> + snapobj = dsl_dataset_phys(ds)->ds_snapnames_zapobj;
> dsl_dataset_rele(ds, FTAG);
>
> for (zap_cursor_init(&zc, dp->dp_meta_objset, snapobj);
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_send.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_send.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_send.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -598,12 +598,12 @@ dmu_send_impl(void *tag, dsl_pool_t *dp,
> featureflags);
>
> drr->drr_u.drr_begin.drr_creation_time =
> - ds->ds_phys->ds_creation_time;
> + dsl_dataset_phys(ds)->ds_creation_time;
> drr->drr_u.drr_begin.drr_type = dmu_objset_type(os);
> if (is_clone)
> drr->drr_u.drr_begin.drr_flags |= DRR_FLAG_CLONE;
> - drr->drr_u.drr_begin.drr_toguid = ds->ds_phys->ds_guid;
> - if (ds->ds_phys->ds_flags & DS_FLAG_CI_DATASET)
> + drr->drr_u.drr_begin.drr_toguid = dsl_dataset_phys(ds)->ds_guid;
> + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET)
> drr->drr_u.drr_begin.drr_flags |= DRR_FLAG_CI_DATA;
>
> if (fromzb != NULL) {
> @@ -624,7 +624,7 @@ dmu_send_impl(void *tag, dsl_pool_t *dp,
> dsp->dsa_proc = curproc;
> dsp->dsa_os = os;
> dsp->dsa_off = off;
> - dsp->dsa_toguid = ds->ds_phys->ds_guid;
> + dsp->dsa_toguid = dsl_dataset_phys(ds)->ds_guid;
> ZIO_SET_CHECKSUM(&dsp->dsa_zc, 0, 0, 0, 0);
> dsp->dsa_pending_op = PENDING_NONE;
> dsp->dsa_incremental = (fromzb != NULL);
> @@ -710,9 +710,10 @@ dmu_send_obj(const char *pool, uint64_t
> }
> if (!dsl_dataset_is_before(ds, fromds, 0))
> err = SET_ERROR(EXDEV);
> - zb.zbm_creation_time = fromds->ds_phys->ds_creation_time;
> - zb.zbm_creation_txg = fromds->ds_phys->ds_creation_txg;
> - zb.zbm_guid = fromds->ds_phys->ds_guid;
> + zb.zbm_creation_time =
> + dsl_dataset_phys(fromds)->ds_creation_time;
> + zb.zbm_creation_txg = dsl_dataset_phys(fromds)->ds_creation_txg;
> + zb.zbm_guid = dsl_dataset_phys(fromds)->ds_guid;
> is_clone = (fromds->ds_dir != ds->ds_dir);
> dsl_dataset_rele(fromds, FTAG);
> err = dmu_send_impl(FTAG, dp, ds, &zb, is_clone,
> @@ -779,10 +780,10 @@ dmu_send(const char *tosnap, const char
> if (!dsl_dataset_is_before(ds, fromds, 0))
> err = SET_ERROR(EXDEV);
> zb.zbm_creation_time =
> - fromds->ds_phys->ds_creation_time;
> + dsl_dataset_phys(fromds)->ds_creation_time;
> zb.zbm_creation_txg =
> - fromds->ds_phys->ds_creation_txg;
> - zb.zbm_guid = fromds->ds_phys->ds_guid;
> + dsl_dataset_phys(fromds)->ds_creation_txg;
> + zb.zbm_guid = dsl_dataset_phys(fromds)->ds_guid;
> is_clone = (ds->ds_dir != fromds->ds_dir);
> dsl_dataset_rele(fromds, FTAG);
> }
> @@ -829,7 +830,7 @@ dmu_send_estimate(dsl_dataset_t *ds, dsl
>
> /* Get uncompressed size estimate of changed data. */
> if (fromds == NULL) {
> - size = ds->ds_phys->ds_uncompressed_bytes;
> + size = dsl_dataset_phys(ds)->ds_uncompressed_bytes;
> } else {
> uint64_t used, comp;
> err = dsl_dataset_space_written(fromds, ds,
> @@ -884,15 +885,15 @@ recv_begin_check_existing_impl(dmu_recv_
>
> /* temporary clone name must not exist */
> error = zap_lookup(dp->dp_meta_objset,
> - ds->ds_dir->dd_phys->dd_child_dir_zapobj, recv_clone_name,
> + dsl_dir_phys(ds->ds_dir)->dd_child_dir_zapobj, recv_clone_name,
> 8, 1, &val);
> if (error != ENOENT)
> return (error == 0 ? EBUSY : error);
>
> /* new snapshot name must not exist */
> error = zap_lookup(dp->dp_meta_objset,
> - ds->ds_phys->ds_snapnames_zapobj, drba->drba_cookie->drc_tosnap,
> - 8, 1, &val);
> + dsl_dataset_phys(ds)->ds_snapnames_zapobj,
> + drba->drba_cookie->drc_tosnap, 8, 1, &val);
> if (error != ENOENT)
> return (error == 0 ? EEXIST : error);
>
> @@ -912,7 +913,7 @@ recv_begin_check_existing_impl(dmu_recv_
>
> if (fromguid != 0) {
> dsl_dataset_t *snap;
> - uint64_t obj = ds->ds_phys->ds_prev_snap_obj;
> + uint64_t obj = dsl_dataset_phys(ds)->ds_prev_snap_obj;
>
> /* Find snapshot in this dir that matches fromguid. */
> while (obj != 0) {
> @@ -924,9 +925,9 @@ recv_begin_check_existing_impl(dmu_recv_
> dsl_dataset_rele(snap, FTAG);
> return (SET_ERROR(ENODEV));
> }
> - if (snap->ds_phys->ds_guid == fromguid)
> + if (dsl_dataset_phys(snap)->ds_guid == fromguid)
> break;
> - obj = snap->ds_phys->ds_prev_snap_obj;
> + obj = dsl_dataset_phys(snap)->ds_prev_snap_obj;
> dsl_dataset_rele(snap, FTAG);
> }
> if (obj == 0)
> @@ -949,9 +950,9 @@ recv_begin_check_existing_impl(dmu_recv_
> dsl_dataset_rele(snap, FTAG);
> } else {
> /* if full, most recent snapshot must be $ORIGIN */
> - if (ds->ds_phys->ds_prev_snap_txg >= TXG_INITIAL)
> + if (dsl_dataset_phys(ds)->ds_prev_snap_txg >= TXG_INITIAL)
> return (SET_ERROR(ENODEV));
> - drba->drba_snapobj = ds->ds_phys->ds_prev_snap_obj;
> + drba->drba_snapobj = dsl_dataset_phys(ds)->ds_prev_snap_obj;
> }
>
> return (0);
> @@ -1069,7 +1070,7 @@ dmu_recv_begin_check(void *arg, dmu_tx_t
> dsl_dataset_rele(ds, FTAG);
> return (SET_ERROR(EINVAL));
> }
> - if (origin->ds_phys->ds_guid != fromguid) {
> + if (dsl_dataset_phys(origin)->ds_guid != fromguid) {
> dsl_dataset_rele(origin, FTAG);
> dsl_dataset_rele(ds, FTAG);
> return (SET_ERROR(ENODEV));
> @@ -1140,7 +1141,7 @@ dmu_recv_begin_sync(void *arg, dmu_tx_t
> }
>
> dmu_buf_will_dirty(newds->ds_dbuf, tx);
> - newds->ds_phys->ds_flags |= DS_FLAG_INCONSISTENT;
> + dsl_dataset_phys(newds)->ds_flags |= DS_FLAG_INCONSISTENT;
>
> /*
> * If we actually created a non-clone, we need to create the
> @@ -1777,7 +1778,7 @@ dmu_recv_stream(dmu_recv_cookie_t *drc,
> */
> VERIFY0(dmu_objset_from_ds(drc->drc_ds, &os));
>
> - ASSERT(drc->drc_ds->ds_phys->ds_flags & DS_FLAG_INCONSISTENT);
> + ASSERT(dsl_dataset_phys(drc->drc_ds)->ds_flags & DS_FLAG_INCONSISTENT);
>
> featureflags = DMU_GET_FEATUREFLAGS(drc->drc_drrb->drr_versioninfo);
>
> @@ -1940,8 +1941,11 @@ dmu_recv_end_check(void *arg, dmu_tx_t *
> * the snap before drc_ds, because drc_ds can not
> * have any snaps of its own).
> */
> - uint64_t obj = origin_head->ds_phys->ds_prev_snap_obj;
> - while (obj != drc->drc_ds->ds_phys->ds_prev_snap_obj) {
> + uint64_t obj;
> +
> + obj = dsl_dataset_phys(origin_head)->ds_prev_snap_obj;
> + while (obj !=
> + dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj) {
> dsl_dataset_t *snap;
> error = dsl_dataset_hold_obj(dp, obj, FTAG,
> &snap);
> @@ -1953,7 +1957,7 @@ dmu_recv_end_check(void *arg, dmu_tx_t *
> error = dsl_destroy_snapshot_check_impl(
> snap, B_FALSE);
> }
> - obj = snap->ds_phys->ds_prev_snap_obj;
> + obj = dsl_dataset_phys(snap)->ds_prev_snap_obj;
> dsl_dataset_rele(snap, FTAG);
> if (error != 0)
> return (error);
> @@ -1999,13 +2003,16 @@ dmu_recv_end_sync(void *arg, dmu_tx_t *t
> * Destroy any snapshots of drc_tofs (origin_head)
> * after the origin (the snap before drc_ds).
> */
> - uint64_t obj = origin_head->ds_phys->ds_prev_snap_obj;
> - while (obj != drc->drc_ds->ds_phys->ds_prev_snap_obj) {
> + uint64_t obj;
> +
> + obj = dsl_dataset_phys(origin_head)->ds_prev_snap_obj;
> + while (obj !=
> + dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj) {
> dsl_dataset_t *snap;
> VERIFY0(dsl_dataset_hold_obj(dp, obj, FTAG,
> &snap));
> ASSERT3P(snap->ds_dir, ==, origin_head->ds_dir);
> - obj = snap->ds_phys->ds_prev_snap_obj;
> + obj = dsl_dataset_phys(snap)->ds_prev_snap_obj;
> dsl_destroy_snapshot_sync_impl(snap,
> B_FALSE, tx);
> dsl_dataset_rele(snap, FTAG);
> @@ -2021,15 +2028,16 @@ dmu_recv_end_sync(void *arg, dmu_tx_t *t
>
> /* set snapshot's creation time and guid */
> dmu_buf_will_dirty(origin_head->ds_prev->ds_dbuf, tx);
> - origin_head->ds_prev->ds_phys->ds_creation_time =
> + dsl_dataset_phys(origin_head->ds_prev)->ds_creation_time =
> drc->drc_drrb->drr_creation_time;
> - origin_head->ds_prev->ds_phys->ds_guid =
> + dsl_dataset_phys(origin_head->ds_prev)->ds_guid =
> drc->drc_drrb->drr_toguid;
> - origin_head->ds_prev->ds_phys->ds_flags &=
> + dsl_dataset_phys(origin_head->ds_prev)->ds_flags &=
> ~DS_FLAG_INCONSISTENT;
>
> dmu_buf_will_dirty(origin_head->ds_dbuf, tx);
> - origin_head->ds_phys->ds_flags &= ~DS_FLAG_INCONSISTENT;
> + dsl_dataset_phys(origin_head)->ds_flags &=
> + ~DS_FLAG_INCONSISTENT;
>
> dsl_dataset_rele(origin_head, FTAG);
> dsl_destroy_head_sync_impl(drc->drc_ds, tx);
> @@ -2043,15 +2051,17 @@ dmu_recv_end_sync(void *arg, dmu_tx_t *t
>
> /* set snapshot's creation time and guid */
> dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx);
> - ds->ds_prev->ds_phys->ds_creation_time =
> + dsl_dataset_phys(ds->ds_prev)->ds_creation_time =
> drc->drc_drrb->drr_creation_time;
> - ds->ds_prev->ds_phys->ds_guid = drc->drc_drrb->drr_toguid;
> - ds->ds_prev->ds_phys->ds_flags &= ~DS_FLAG_INCONSISTENT;
> + dsl_dataset_phys(ds->ds_prev)->ds_guid =
> + drc->drc_drrb->drr_toguid;
> + dsl_dataset_phys(ds->ds_prev)->ds_flags &=
> + ~DS_FLAG_INCONSISTENT;
>
> dmu_buf_will_dirty(ds->ds_dbuf, tx);
> - ds->ds_phys->ds_flags &= ~DS_FLAG_INCONSISTENT;
> + dsl_dataset_phys(ds)->ds_flags &= ~DS_FLAG_INCONSISTENT;
> }
> - drc->drc_newsnapobj = drc->drc_ds->ds_phys->ds_prev_snap_obj;
> + drc->drc_newsnapobj = dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj;
> /*
> * Release the hold from dmu_recv_begin. This must be done before
> * we return to open context, so that when we free the dataset's dnode,
> @@ -2077,7 +2087,7 @@ add_ds_to_guidmap(const char *name, avl_
> gmep = kmem_alloc(sizeof (*gmep), KM_SLEEP);
> err = dsl_dataset_hold_obj(dp, snapobj, gmep, &snapds);
> if (err == 0) {
> - gmep->guid = snapds->ds_phys->ds_guid;
> + gmep->guid = dsl_dataset_phys(snapds)->ds_guid;
> gmep->gme_ds = snapds;
> avl_add(guid_map, gmep);
> dsl_dataset_long_hold(snapds, gmep);
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_traverse.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_traverse.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_traverse.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -579,7 +579,7 @@ traverse_dataset(dsl_dataset_t *ds, uint
> blkptr_cb_t func, void *arg)
> {
> return (traverse_impl(ds->ds_dir->dd_pool->dp_spa, ds, ds->ds_object,
> - &ds->ds_phys->ds_bp, txg_start, NULL, flags, func, arg));
> + &dsl_dataset_phys(ds)->ds_bp, txg_start, NULL, flags, func, arg));
> }
>
> int
> @@ -634,8 +634,8 @@ traverse_pool(spa_t *spa, uint64_t txg_s
> continue;
> break;
> }
> - if (ds->ds_phys->ds_prev_snap_txg > txg)
> - txg = ds->ds_phys->ds_prev_snap_txg;
> + if (dsl_dataset_phys(ds)->ds_prev_snap_txg > txg)
> + txg = dsl_dataset_phys(ds)->ds_prev_snap_txg;
> err = traverse_dataset(ds, txg, flags, func, arg);
> dsl_dataset_rele(ds, FTAG);
> if (err != 0)
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_tx.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_tx.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dmu_tx.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -713,6 +713,7 @@ dmu_tx_hold_zap(dmu_tx_t *tx, uint64_t o
> {
> dmu_tx_hold_t *txh;
> dnode_t *dn;
> + dsl_dataset_phys_t *ds_phys;
> uint64_t nblocks;
> int epbs, err;
>
> @@ -787,8 +788,9 @@ dmu_tx_hold_zap(dmu_tx_t *tx, uint64_t o
> * we'll have to modify an indirect twig for each.
> */
> epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT;
> + ds_phys = dsl_dataset_phys(dn->dn_objset->os_dsl_dataset);
> for (nblocks = dn->dn_maxblkid >> epbs; nblocks != 0; nblocks >>= epbs)
> - if (dn->dn_objset->os_dsl_dataset->ds_phys->ds_prev_snap_obj)
> + if (ds_phys->ds_prev_snap_obj)
> txh->txh_space_towrite += 3 << dn->dn_indblkshift;
> else
> txh->txh_space_tooverwrite += 3 << dn->dn_indblkshift;
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dnode.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dnode.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dnode.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -1116,7 +1116,7 @@ dnode_hold_impl(objset_t *os, uint64_t o
> zrl_init(&dnh[i].dnh_zrlock);
> dnh[i].dnh_dnode = NULL;
> }
> - if (winner = dmu_buf_set_user(&db->db, children_dnodes, NULL,
> + if (winner = dmu_buf_set_user(&db->db, children_dnodes,
> dnode_buf_pageout)) {
>
> for (i = 0; i < epb; i++) {
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_bookmark.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_bookmark.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_bookmark.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -65,7 +65,7 @@ dsl_dataset_bmark_lookup(dsl_dataset_t *
> if (bmark_zapobj == 0)
> return (SET_ERROR(ESRCH));
>
> - if (ds->ds_phys->ds_flags & DS_FLAG_CI_DATASET)
> + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET)
> mt = MT_FIRST;
> else
> mt = MT_EXACT;
> @@ -208,10 +208,11 @@ dsl_bookmark_create_sync(void *arg, dmu_
> &bmark_fs->ds_bookmarks, tx));
> }
>
> - bmark_phys.zbm_guid = snapds->ds_phys->ds_guid;
> - bmark_phys.zbm_creation_txg = snapds->ds_phys->ds_creation_txg;
> + bmark_phys.zbm_guid = dsl_dataset_phys(snapds)->ds_guid;
> + bmark_phys.zbm_creation_txg =
> + dsl_dataset_phys(snapds)->ds_creation_txg;
> bmark_phys.zbm_creation_time =
> - snapds->ds_phys->ds_creation_time;
> + dsl_dataset_phys(snapds)->ds_creation_time;
>
> VERIFY0(zap_add(mos, bmark_fs->ds_bookmarks,
> shortname, sizeof (uint64_t),
> @@ -340,7 +341,7 @@ dsl_dataset_bookmark_remove(dsl_dataset_
> uint64_t bmark_zapobj = ds->ds_bookmarks;
> matchtype_t mt;
>
> - if (ds->ds_phys->ds_flags & DS_FLAG_CI_DATASET)
> + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET)
> mt = MT_FIRST;
> else
> mt = MT_EXACT;
>
> Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dataset.c
> ==============================================================================
> --- vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dataset.c Sat Dec 6 00:47:31 2014 (r275550)
> +++ vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_dataset.c Sat Dec 6 00:50:57 2014 (r275551)
> @@ -70,6 +70,9 @@ int zfs_max_recordsize = 1 * 1024 * 1024
>
> #define DS_REF_MAX (1ULL << 62)
>
> +extern inline dsl_dataset_phys_t *dsl_dataset_phys(dsl_dataset_t *ds);
> +extern inline boolean_t dsl_dataset_is_snapshot(dsl_dataset_t *ds);
> +
> /*
> * Figure out how much of this delta should be propogated to the dsl_dir
> * layer. If there's a refreservation, that space has already been
> @@ -78,13 +81,15 @@ int zfs_max_recordsize = 1 * 1024 * 1024
> static int64_t
> parent_delta(dsl_dataset_t *ds, int64_t delta)
> {
> + dsl_dataset_phys_t *ds_phys;
> uint64_t old_bytes, new_bytes;
>
> if (ds->ds_reserved == 0)
> return (delta);
>
> - old_bytes = MAX(ds->ds_phys->ds_unique_bytes, ds->ds_reserved);
> - new_bytes = MAX(ds->ds_phys->ds_unique_bytes + delta, ds->ds_reserved);
> + ds_phys = dsl_dataset_phys(ds);
> + old_bytes = MAX(ds_phys->ds_unique_bytes, ds->ds_reserved);
> + new_bytes = MAX(ds_phys->ds_unique_bytes + delta, ds->ds_reserved);
>
> ASSERT3U(ABS((int64_t)(new_bytes - old_bytes)), <=, ABS(delta));
> return (new_bytes - old_bytes);
> @@ -115,10 +120,10 @@ dsl_dataset_block_born(dsl_dataset_t *ds
> dmu_buf_will_dirty(ds->ds_dbuf, tx);
> mutex_enter(&ds->ds_lock);
> delta = parent_delta(ds, used);
> - ds->ds_phys->ds_referenced_bytes += used;
> - ds->ds_phys->ds_compressed_bytes += compressed;
> - ds->ds_phys->ds_uncompressed_bytes += uncompressed;
> - ds->ds_phys->ds_unique_bytes += used;
> + dsl_dataset_phys(ds)->ds_referenced_bytes += used;
> + dsl_dataset_phys(ds)->ds_compressed_bytes += compressed;
> + dsl_dataset_phys(ds)->ds_uncompressed_bytes += uncompressed;
> + dsl_dataset_phys(ds)->ds_unique_bytes += used;
> if (BP_GET_LSIZE(bp) > SPA_OLD_MAXBLOCKSIZE)
> ds->ds_need_large_blocks = B_TRUE;
> mutex_exit(&ds->ds_lock);
> @@ -153,17 +158,17 @@ dsl_dataset_block_kill(dsl_dataset_t *ds
> ASSERT(!dsl_dataset_is_snapshot(ds));
> dmu_buf_will_dirty(ds->ds_dbuf, tx);
>
> - if (bp->blk_birth > ds->ds_phys->ds_prev_snap_txg) {
> + if (bp->blk_birth > dsl_dataset_phys(ds)->ds_prev_snap_txg) {
> int64_t delta;
>
> dprintf_bp(bp, "freeing ds=%llu", ds->ds_object);
> dsl_free(tx->tx_pool, tx->tx_txg, bp);
>
> mutex_enter(&ds->ds_lock);
> - ASSERT(ds->ds_phys->ds_unique_bytes >= used ||
> + ASSERT(dsl_dataset_phys(ds)->ds_unique_bytes >= used ||
> !DS_UNIQUE_IS_ACCURATE(ds));
> delta = parent_delta(ds, -used);
> - ds->ds_phys->ds_unique_bytes -= used;
> + dsl_dataset_phys(ds)->ds_unique_bytes -= used;
> mutex_exit(&ds->ds_lock);
> dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD,
> delta, -compressed, -uncompressed, tx);
> @@ -184,15 +189,15 @@ dsl_dataset_block_kill(dsl_dataset_t *ds
> dsl_deadlist_insert(&ds->ds_deadlist, bp, tx);
> }
> ASSERT3U(ds->ds_prev->ds_object, ==,
> - ds->ds_phys->ds_prev_snap_obj);
> - ASSERT(ds->ds_prev->ds_phys->ds_num_children > 0);
> + dsl_dataset_phys(ds)->ds_prev_snap_obj);
> + ASSERT(dsl_dataset_phys(ds->ds_prev)->ds_num_children > 0);
> /* if (bp->blk_birth > prev prev snap txg) prev unique += bs */
> - if (ds->ds_prev->ds_phys->ds_next_snap_obj ==
> + if (dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj ==
> ds->ds_object && bp->blk_birth >
> - ds->ds_prev->ds_phys->ds_prev_snap_txg) {
> + dsl_dataset_phys(ds->ds_prev)->ds_prev_snap_txg) {
> dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx);
> mutex_enter(&ds->ds_prev->ds_lock);
> - ds->ds_prev->ds_phys->ds_unique_bytes += used;
> + dsl_dataset_phys(ds->ds_prev)->ds_unique_bytes += used;
> mutex_exit(&ds->ds_prev->ds_lock);
> }
> if (bp->blk_birth > ds->ds_dir->dd_origin_txg) {
> @@ -201,12 +206,12 @@ dsl_dataset_block_kill(dsl_dataset_t *ds
> }
> }
> mutex_enter(&ds->ds_lock);
> - ASSERT3U(ds->ds_phys->ds_referenced_bytes, >=, used);
> - ds->ds_phys->ds_referenced_bytes -= used;
> - ASSERT3U(ds->ds_phys->ds_compressed_bytes, >=, compressed);
> - ds->ds_phys->ds_compressed_bytes -= compressed;
> - ASSERT3U(ds->ds_phys->ds_uncompressed_bytes, >=, uncompressed);
> - ds->ds_phys->ds_uncompressed_bytes -= uncompressed;
> + ASSERT3U(dsl_dataset_phys(ds)->ds_referenced_bytes, >=, used);
> + dsl_dataset_phys(ds)->ds_referenced_bytes -= used;
> + ASSERT3U(dsl_dataset_phys(ds)->ds_compressed_bytes, >=, compressed);
> + dsl_dataset_phys(ds)->ds_compressed_bytes -= compressed;
> + ASSERT3U(dsl_dataset_phys(ds)->ds_uncompressed_bytes, >=, uncompressed);
> + dsl_dataset_phys(ds)->ds_uncompressed_bytes -= uncompressed;
> mutex_exit(&ds->ds_lock);
>
> return (used);
> @@ -232,7 +237,7 @@ dsl_dataset_prev_snap_txg(dsl_dataset_t
> if (ds->ds_trysnap_txg >
> spa_last_synced_txg(ds->ds_dir->dd_pool->dp_spa))
> trysnap = ds->ds_trysnap_txg;
> - return (MAX(ds->ds_phys->ds_prev_snap_txg, trysnap));
> + return (MAX(dsl_dataset_phys(ds)->ds_prev_snap_txg, trysnap));
> }
>
> boolean_t
> @@ -267,7 +272,7 @@ dsl_dataset_evict(dmu_buf_t *db, void *d
> }
>
> bplist_destroy(&ds->ds_pending_deadlist);
> - if (ds->ds_phys->ds_deadlist_obj != 0)
> + if (dsl_dataset_phys(ds)->ds_deadlist_obj != 0)
> dsl_deadlist_close(&ds->ds_deadlist);
> if (ds->ds_dir)
> dsl_dir_rele(ds->ds_dir, ds);
> @@ -293,10 +298,10 @@ dsl_dataset_get_snapname(dsl_dataset_t *
>
> if (ds->ds_snapname[0])
> return (0);
> - if (ds->ds_phys->ds_next_snap_obj == 0)
> + if (dsl_dataset_phys(ds)->ds_next_snap_obj == 0)
> return (0);
>
> - err = dmu_bonus_hold(mos, ds->ds_dir->dd_phys->dd_head_dataset_obj,
> + err = dmu_bonus_hold(mos, dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj,
> FTAG, &headdbuf);
> if (err != 0)
> return (err);
> @@ -311,11 +316,11 @@ int
> dsl_dataset_snap_lookup(dsl_dataset_t *ds, const char *name, uint64_t *value)
> {
> objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset;
> - uint64_t snapobj = ds->ds_phys->ds_snapnames_zapobj;
> + uint64_t snapobj = dsl_dataset_phys(ds)->ds_snapnames_zapobj;
> matchtype_t mt;
> int err;
>
> - if (ds->ds_phys->ds_flags & DS_FLAG_CI_DATASET)
> + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET)
> mt = MT_FIRST;
> else
> mt = MT_EXACT;
> @@ -332,13 +337,13 @@ dsl_dataset_snap_remove(dsl_dataset_t *d
> boolean_t adj_cnt)
> {
> objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset;
> - uint64_t snapobj = ds->ds_phys->ds_snapnames_zapobj;
> + uint64_t snapobj = dsl_dataset_phys(ds)->ds_snapnames_zapobj;
> matchtype_t mt;
> int err;
>
> dsl_dir_snap_cmtime_update(ds->ds_dir);
>
> - if (ds->ds_phys->ds_flags & DS_FLAG_CI_DATASET)
> + if (dsl_dataset_phys(ds)->ds_flags & DS_FLAG_CI_DATASET)
> mt = MT_FIRST;
> else
> mt = MT_EXACT;
> @@ -384,7 +389,6 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin
> ds = kmem_zalloc(sizeof (dsl_dataset_t), KM_SLEEP);
> ds->ds_dbuf = dbuf;
> ds->ds_object = dsobj;
> - ds->ds_phys = dbuf->db_data;
>
> mutex_init(&ds->ds_lock, NULL, MUTEX_DEFAULT, NULL);
> mutex_init(&ds->ds_opening_lock, NULL, MUTEX_DEFAULT, NULL);
> @@ -393,7 +397,7 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin
>
> bplist_create(&ds->ds_pending_deadlist);
> dsl_deadlist_open(&ds->ds_deadlist,
> - mos, ds->ds_phys->ds_deadlist_obj);
> + mos, dsl_dataset_phys(ds)->ds_deadlist_obj);
>
> list_create(&ds->ds_sendstreams, sizeof (dmu_sendarg_t),
> offsetof(dmu_sendarg_t, dsa_link));
> @@ -408,7 +412,8 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin
>
> if (err == 0) {
> err = dsl_dir_hold_obj(dp,
> - ds->ds_phys->ds_dir_obj, NULL, ds, &ds->ds_dir);
> + dsl_dataset_phys(ds)->ds_dir_obj, NULL, ds,
> + &ds->ds_dir);
> }
> if (err != 0) {
> mutex_destroy(&ds->ds_lock);
> @@ -424,9 +429,9 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin
>
> if (!dsl_dataset_is_snapshot(ds)) {
> ds->ds_snapname[0] = '\0';
> - if (ds->ds_phys->ds_prev_snap_obj != 0) {
> + if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) {
> err = dsl_dataset_hold_obj(dp,
> - ds->ds_phys->ds_prev_snap_obj,
> + dsl_dataset_phys(ds)->ds_prev_snap_obj,
> ds, &ds->ds_prev);
> }
> if (doi.doi_type == DMU_OTN_ZAP_METADATA) {
> @@ -440,10 +445,11 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin
> } else {
> if (zfs_flags & ZFS_DEBUG_SNAPNAMES)
> err = dsl_dataset_get_snapname(ds);
> - if (err == 0 && ds->ds_phys->ds_userrefs_obj != 0) {
> + if (err == 0 &&
> + dsl_dataset_phys(ds)->ds_userrefs_obj != 0) {
> err = zap_count(
> ds->ds_dir->dd_pool->dp_meta_objset,
> - ds->ds_phys->ds_userrefs_obj,
> + dsl_dataset_phys(ds)->ds_userrefs_obj,
> &ds->ds_userrefs);
> }
> }
> @@ -462,7 +468,7 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin
> }
>
> if (err != 0 || (winner = dmu_buf_set_user_ie(dbuf, ds,
> - &ds->ds_phys, dsl_dataset_evict)) != NULL) {
> + dsl_dataset_evict)) != NULL) {
> bplist_destroy(&ds->ds_pending_deadlist);
> dsl_deadlist_close(&ds->ds_deadlist);
> if (ds->ds_prev)
> @@ -480,12 +486,12 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uin
> ds = winner;
> } else {
> ds->ds_fsid_guid =
> - unique_insert(ds->ds_phys->ds_fsid_guid);
> + unique_insert(dsl_dataset_phys(ds)->ds_fsid_guid);
> }
> }
> ASSERT3P(ds->ds_dbuf, ==, dbuf);
> - ASSERT3P(ds->ds_phys, ==, dbuf->db_data);
> - ASSERT(ds->ds_phys->ds_prev_snap_obj != 0 ||
> + ASSERT3P(dsl_dataset_phys(ds), ==, dbuf->db_data);
> + ASSERT(dsl_dataset_phys(ds)->ds_prev_snap_obj != 0 ||
> spa_version(dp->dp_spa) < SPA_VERSION_ORIGIN ||
> dp->dp_origin_snap == NULL || ds == dp->dp_origin_snap);
> *dsp = ds;
> @@ -506,7 +512,7 @@ dsl_dataset_hold(dsl_pool_t *dp, const c
> return (err);
>
> ASSERT(dsl_pool_config_held(dp));
> - obj = dd->dd_phys->dd_head_dataset_obj;
> + obj = dsl_dir_phys(dd)->dd_head_dataset_obj;
> if (obj != 0)
> err = dsl_dataset_hold_obj(dp, obj, tag, dsp);
> else
> @@ -673,9 +679,9 @@ dsl_dataset_create_sync_dd(dsl_dir_t *dd
> origin = dp->dp_origin_snap;
>
> ASSERT(origin == NULL || origin->ds_dir->dd_pool == dp);
> - ASSERT(origin == NULL || origin->ds_phys->ds_num_children > 0);
> + ASSERT(origin == NULL || dsl_dataset_phys(origin)->ds_num_children > 0);
> ASSERT(dmu_tx_is_syncing(tx));
> - ASSERT(dd->dd_phys->dd_head_dataset_obj == 0);
> + ASSERT(dsl_dir_phys(dd)->dd_head_dataset_obj == 0);
>
> dsobj = dmu_object_alloc(mos, DMU_OT_DSL_DATASET, 0,
> DMU_OT_DSL_DATASET, sizeof (dsl_dataset_phys_t), tx);
> @@ -701,55 +707,58 @@ dsl_dataset_create_sync_dd(dsl_dir_t *dd
>
> dsphys->ds_prev_snap_obj = origin->ds_object;
> dsphys->ds_prev_snap_txg =
> - origin->ds_phys->ds_creation_txg;
> + dsl_dataset_phys(origin)->ds_creation_txg;
> dsphys->ds_referenced_bytes =
> - origin->ds_phys->ds_referenced_bytes;
> + dsl_dataset_phys(origin)->ds_referenced_bytes;
> dsphys->ds_compressed_bytes =
> - origin->ds_phys->ds_compressed_bytes;
> + dsl_dataset_phys(origin)->ds_compressed_bytes;
> dsphys->ds_uncompressed_bytes =
> - origin->ds_phys->ds_uncompressed_bytes;
> - dsphys->ds_bp = origin->ds_phys->ds_bp;
> + dsl_dataset_phys(origin)->ds_uncompressed_bytes;
> + dsphys->ds_bp = dsl_dataset_phys(origin)->ds_bp;
>
> /*
> * Inherit flags that describe the dataset's contents
> * (INCONSISTENT) or properties (Case Insensitive).
> */
> - dsphys->ds_flags |= origin->ds_phys->ds_flags &
> + dsphys->ds_flags |= dsl_dataset_phys(origin)->ds_flags &
> (DS_FLAG_INCONSISTENT | DS_FLAG_CI_DATASET);
>
> if (origin->ds_large_blocks)
> dsl_dataset_activate_large_blocks_sync_impl(dsobj, tx);
>
> dmu_buf_will_dirty(origin->ds_dbuf, tx);
> - origin->ds_phys->ds_num_children++;
> + dsl_dataset_phys(origin)->ds_num_children++;
>
> VERIFY0(dsl_dataset_hold_obj(dp,
> - origin->ds_dir->dd_phys->dd_head_dataset_obj, FTAG, &ohds));
> + dsl_dir_phys(origin->ds_dir)->dd_head_dataset_obj,
> + FTAG, &ohds));
> dsphys->ds_deadlist_obj = dsl_deadlist_clone(&ohds->ds_deadlist,
> dsphys->ds_prev_snap_txg, dsphys->ds_prev_snap_obj, tx);
> dsl_dataset_rele(ohds, FTAG);
>
> if (spa_version(dp->dp_spa) >= SPA_VERSION_NEXT_CLONES) {
> - if (origin->ds_phys->ds_next_clones_obj == 0) {
> - origin->ds_phys->ds_next_clones_obj =
> + if (dsl_dataset_phys(origin)->ds_next_clones_obj == 0) {
> + dsl_dataset_phys(origin)->ds_next_clones_obj =
> zap_create(mos,
> DMU_OT_NEXT_CLONES, DMU_OT_NONE, 0, tx);
> }
> VERIFY0(zap_add_int(mos,
> - origin->ds_phys->ds_next_clones_obj, dsobj, tx));
> + dsl_dataset_phys(origin)->ds_next_clones_obj,
> + dsobj, tx));
> }
>
> dmu_buf_will_dirty(dd->dd_dbuf, tx);
> - dd->dd_phys->dd_origin_obj = origin->ds_object;
> + dsl_dir_phys(dd)->dd_origin_obj = origin->ds_object;
> if (spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) {
> - if (origin->ds_dir->dd_phys->dd_clones == 0) {
> + if (dsl_dir_phys(origin->ds_dir)->dd_clones == 0) {
> dmu_buf_will_dirty(origin->ds_dir->dd_dbuf, tx);
> - origin->ds_dir->dd_phys->dd_clones =
> + dsl_dir_phys(origin->ds_dir)->dd_clones =
> zap_create(mos,
> DMU_OT_DSL_CLONES, DMU_OT_NONE, 0, tx);
> }
> VERIFY0(zap_add_int(mos,
> - origin->ds_dir->dd_phys->dd_clones, dsobj, tx));
> + dsl_dir_phys(origin->ds_dir)->dd_clones,
> + dsobj, tx));
> }
> }
>
> @@ -759,7 +768,7 @@ dsl_dataset_create_sync_dd(dsl_dir_t *dd
> dmu_buf_rele(dbuf, FTAG);
>
> dmu_buf_will_dirty(dd->dd_dbuf, tx);
> - dd->dd_phys->dd_head_dataset_obj = dsobj;
> + dsl_dir_phys(dd)->dd_head_dataset_obj = dsobj;
>
> return (dsobj);
> }
> @@ -841,20 +850,20 @@ dsl_dataset_recalc_head_uniq(dsl_dataset
>
> ASSERT(!dsl_dataset_is_snapshot(ds));
>
> - if (ds->ds_phys->ds_prev_snap_obj != 0)
> - mrs_used = ds->ds_prev->ds_phys->ds_referenced_bytes;
> + if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0)
> + mrs_used = dsl_dataset_phys(ds->ds_prev)->ds_referenced_bytes;
> else
> mrs_used = 0;
>
> dsl_deadlist_space(&ds->ds_deadlist, &dlused, &dlcomp, &dluncomp);
>
> ASSERT3U(dlused, <=, mrs_used);
> - ds->ds_phys->ds_unique_bytes =
> - ds->ds_phys->ds_referenced_bytes - (mrs_used - dlused);
> + dsl_dataset_phys(ds)->ds_unique_bytes =
> + dsl_dataset_phys(ds)->ds_referenced_bytes - (mrs_used - dlused);
>
> if (spa_version(ds->ds_dir->dd_pool->dp_spa) >=
> SPA_VERSION_UNIQUE_ACCURATE)
> - ds->ds_phys->ds_flags |= DS_FLAG_UNIQUE_ACCURATE;
> + dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_UNIQUE_ACCURATE;
> }
>
> void
> @@ -865,8 +874,9 @@ dsl_dataset_remove_from_next_clones(dsl_
> uint64_t count;
> int err;
>
> - ASSERT(ds->ds_phys->ds_num_children >= 2);
> - err = zap_remove_int(mos, ds->ds_phys->ds_next_clones_obj, obj, tx);
> + ASSERT(dsl_dataset_phys(ds)->ds_num_children >= 2);
> + err = zap_remove_int(mos, dsl_dataset_phys(ds)->ds_next_clones_obj,
> + obj, tx);
> /*
> * The err should not be ENOENT, but a bug in a previous version
> * of the code could cause upgrade_clones_cb() to not set
> @@ -879,16 +889,16 @@ dsl_dataset_remove_from_next_clones(dsl_
> */
> if (err != ENOENT)
> VERIFY0(err);
> - ASSERT0(zap_count(mos, ds->ds_phys->ds_next_clones_obj,
> + ASSERT0(zap_count(mos, dsl_dataset_phys(ds)->ds_next_clones_obj,
> &count));
> - ASSERT3U(count, <=, ds->ds_phys->ds_num_children - 2);
> + ASSERT3U(count, <=, dsl_dataset_phys(ds)->ds_num_children - 2);
> }
>
>
> blkptr_t *
> dsl_dataset_get_blkptr(dsl_dataset_t *ds)
> {
> - return (&ds->ds_phys->ds_bp);
> + return (&dsl_dataset_phys(ds)->ds_bp);
> }
>
> void
> @@ -900,7 +910,7 @@ dsl_dataset_set_blkptr(dsl_dataset_t *ds
> tx->tx_pool->dp_meta_rootbp = *bp;
> } else {
> dmu_buf_will_dirty(ds->ds_dbuf, tx);
> - ds->ds_phys->ds_bp = *bp;
> + dsl_dataset_phys(ds)->ds_bp = *bp;
> }
> }
>
> @@ -920,7 +930,7 @@ dsl_dataset_dirty(dsl_dataset_t *ds, dmu
>
> ASSERT(ds->ds_objset != NULL);
>
> - if (ds->ds_phys->ds_next_snap_obj != 0)
> + if (dsl_dataset_phys(ds)->ds_next_snap_obj != 0)
> panic("dirtying snapshot!");
>
> dp = ds->ds_dir->dd_pool;
> @@ -956,7 +966,7 @@ dsl_dataset_snapshot_reserve_space(dsl_d
> * outside of the reservation.
> */
> ASSERT(ds->ds_reserved == 0 || DS_UNIQUE_IS_ACCURATE(ds));
> - asize = MIN(ds->ds_phys->ds_unique_bytes, ds->ds_reserved);
> + asize = MIN(dsl_dataset_phys(ds)->ds_unique_bytes, ds->ds_reserved);
> if (asize > dsl_dir_space_available(ds->ds_dir, NULL, 0, TRUE))
> return (SET_ERROR(ENOSPC));
>
> @@ -993,7 +1003,7 @@ dsl_dataset_snapshot_check_impl(dsl_data
> * We don't allow multiple snapshots of the same txg. If there
> * is already one, try again.
> */
> - if (ds->ds_phys->ds_prev_snap_txg >= tx->tx_txg)
> + if (dsl_dataset_phys(ds)->ds_prev_snap_txg >= tx->tx_txg)
> return (SET_ERROR(EAGAIN));
>
> /*
> @@ -1219,35 +1229,38 @@ dsl_dataset_snapshot_sync_impl(dsl_datas
> dsphys->ds_fsid_guid = unique_create();
> (void) random_get_pseudo_bytes((void*)&dsphys->ds_guid,
> sizeof (dsphys->ds_guid));
> - dsphys->ds_prev_snap_obj = ds->ds_phys->ds_prev_snap_obj;
>
> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
>
>
More information about the svn-src-vendor
mailing list