Illumos #1948: zpool list should show more detailed pool info
[zfs.git] / module / zfs / dsl_dataset.c
index 25c8ac6..e7cbc51 100644 (file)
@@ -390,7 +390,7 @@ dsl_dataset_get_ref(dsl_pool_t *dp, uint64_t dsobj, void *tag,
        if (ds == NULL) {
                dsl_dataset_t *winner = NULL;
 
-               ds = kmem_zalloc(sizeof (dsl_dataset_t), KM_SLEEP);
+               ds = kmem_zalloc(sizeof (dsl_dataset_t), KM_PUSHPAGE);
                ds->ds_dbuf = dbuf;
                ds->ds_object = dsobj;
                ds->ds_phys = dbuf->db_data;
@@ -3854,6 +3854,11 @@ dsl_dataset_user_release_sync(void *arg1, void *tag, dmu_tx_t *tx)
        VERIFY(error == 0 || error == ENOENT);
        zapobj = ds->ds_phys->ds_userrefs_obj;
        VERIFY(0 == zap_remove(mos, zapobj, ra->htag, tx));
+
+       spa_history_log_internal(LOG_DS_USER_RELEASE,
+           dp->dp_spa, tx, "<%s> %lld dataset = %llu",
+           ra->htag, (longlong_t)refs, dsobj);
+
        if (ds->ds_userrefs == 0 && ds->ds_phys->ds_num_children == 1 &&
            DS_IS_DEFER_DESTROY(ds)) {
                struct dsl_ds_destroyarg dsda = {0};
@@ -3864,10 +3869,6 @@ dsl_dataset_user_release_sync(void *arg1, void *tag, dmu_tx_t *tx)
                /* We already did the destroy_check */
                dsl_dataset_destroy_sync(&dsda, tag, tx);
        }
-
-       spa_history_log_internal(LOG_DS_USER_RELEASE,
-           dp->dp_spa, tx, "<%s> %lld dataset = %llu",
-           ra->htag, (longlong_t)refs, dsobj);
 }
 
 static int