Print this page
patch first-pass

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/dsl_dataset.c
          +++ new/usr/src/uts/common/fs/zfs/dsl_dataset.c
↓ open down ↓ 262 lines elided ↑ open up ↑
 263  263          if (blk_birth <= dsl_dataset_prev_snap_txg(ds) ||
 264  264              (bp != NULL && BP_IS_HOLE(bp)))
 265  265                  return (B_FALSE);
 266  266  
 267  267          ddt_prefetch(dsl_dataset_get_spa(ds), bp);
 268  268  
 269  269          return (B_TRUE);
 270  270  }
 271  271  
 272  272  static void
      273 +dsl_dataset_evict_prep(void *dbu)
      274 +{
      275 +        dsl_dataset_t *ds = dbu;
      276 +
      277 +        ASSERT(ds->ds_owner == NULL);
      278 +
      279 +        unique_remove(ds->ds_fsid_guid);
      280 +}
      281 +
      282 +static void
 273  283  dsl_dataset_evict(void *dbu)
 274  284  {
 275  285          dsl_dataset_t *ds = dbu;
 276  286  
 277  287          ASSERT(ds->ds_owner == NULL);
 278  288  
 279  289          ds->ds_dbuf = NULL;
 280  290  
 281      -        unique_remove(ds->ds_fsid_guid);
 282      -
 283  291          if (ds->ds_objset != NULL)
 284  292                  dmu_objset_evict(ds->ds_objset);
 285  293  
 286  294          if (ds->ds_prev) {
 287  295                  dsl_dataset_rele(ds->ds_prev, ds);
 288  296                  ds->ds_prev = NULL;
 289  297          }
 290  298  
 291  299          bplist_destroy(&ds->ds_pending_deadlist);
 292  300          if (ds->ds_deadlist.dl_os != NULL)
↓ open down ↓ 212 lines elided ↑ open up ↑
 505  513                              &ds->ds_reserved);
 506  514                          if (err == 0) {
 507  515                                  err = dsl_prop_get_int_ds(ds,
 508  516                                      zfs_prop_to_name(ZFS_PROP_REFQUOTA),
 509  517                                      &ds->ds_quota);
 510  518                          }
 511  519                  } else {
 512  520                          ds->ds_reserved = ds->ds_quota = 0;
 513  521                  }
 514  522  
 515      -                dmu_buf_init_user(&ds->ds_dbu, dsl_dataset_evict, &ds->ds_dbuf);
      523 +                dmu_buf_init_user(&ds->ds_dbu, dsl_dataset_evict_prep,
      524 +                    dsl_dataset_evict, &ds->ds_dbuf);
 516  525                  if (err == 0)
 517  526                          winner = dmu_buf_set_user_ie(dbuf, &ds->ds_dbu);
 518  527  
 519  528                  if (err != 0 || winner != NULL) {
 520  529                          bplist_destroy(&ds->ds_pending_deadlist);
 521  530                          dsl_deadlist_close(&ds->ds_deadlist);
 522  531                          if (ds->ds_prev)
 523  532                                  dsl_dataset_rele(ds->ds_prev, ds);
 524  533                          dsl_dir_rele(ds->ds_dir, ds);
 525  534                          mutex_destroy(&ds->ds_lock);
↓ open down ↓ 3008 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX