Print this page
2948 do not generate 0 as random 64-bit guid

@@ -801,12 +801,14 @@
         dsphys = dbuf->db_data;
         bzero(dsphys, sizeof (dsl_dataset_phys_t));
         dsphys->ds_dir_obj = dd->dd_object;
         dsphys->ds_flags = flags;
         dsphys->ds_fsid_guid = unique_create();
+        do {
         (void) random_get_pseudo_bytes((void*)&dsphys->ds_guid,
             sizeof (dsphys->ds_guid));
+        } while (dsphys->ds_guid == 0);
         dsphys->ds_snapnames_zapobj =
             zap_create_norm(mos, U8_TEXTPREP_TOUPPER, DMU_OT_DSL_DS_SNAP_MAP,
             DMU_OT_NONE, 0, tx);
         dsphys->ds_creation_time = gethrestime_sec();
         dsphys->ds_creation_txg = tx->tx_txg == TXG_INITIAL ? 1 : tx->tx_txg;

@@ -2082,12 +2084,14 @@
         dmu_buf_will_dirty(dbuf, tx);
         dsphys = dbuf->db_data;
         bzero(dsphys, sizeof (dsl_dataset_phys_t));
         dsphys->ds_dir_obj = ds->ds_dir->dd_object;
         dsphys->ds_fsid_guid = unique_create();
+        do {
         (void) random_get_pseudo_bytes((void*)&dsphys->ds_guid,
             sizeof (dsphys->ds_guid));
+        } while (dsphys->ds_guid == 0);
         dsphys->ds_prev_snap_obj = ds->ds_phys->ds_prev_snap_obj;
         dsphys->ds_prev_snap_txg = ds->ds_phys->ds_prev_snap_txg;
         dsphys->ds_next_snap_obj = ds->ds_object;
         dsphys->ds_num_children = 1;
         dsphys->ds_creation_time = gethrestime_sec();