Print this page
2619 asynchronous destruction of ZFS file systems
2747 SPA versioning with zfs feature flags
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <gwilson@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>
Approved by: Dan McDonald <danmcd@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/ddt.c
          +++ new/usr/src/uts/common/fs/zfs/ddt.c
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
       24 + * Copyright (c) 2012 by Delphix. All rights reserved.
  24   25   */
  25   26  
  26   27  #include <sys/zfs_context.h>
  27   28  #include <sys/spa.h>
  28   29  #include <sys/spa_impl.h>
  29   30  #include <sys/zio.h>
  30   31  #include <sys/ddt.h>
  31   32  #include <sys/zap.h>
  32   33  #include <sys/dmu_tx.h>
  33   34  #include <sys/arc.h>
↓ open down ↓ 1020 lines elided ↑ open up ↑
1054 1055          spa_t *spa = ddt->ddt_spa;
1055 1056          ddt_entry_t *dde;
1056 1057          void *cookie = NULL;
1057 1058  
1058 1059          if (avl_numnodes(&ddt->ddt_tree) == 0)
1059 1060                  return;
1060 1061  
1061 1062          ASSERT(spa->spa_uberblock.ub_version >= SPA_VERSION_DEDUP);
1062 1063  
1063 1064          if (spa->spa_ddt_stat_object == 0) {
1064      -                spa->spa_ddt_stat_object = zap_create(ddt->ddt_os,
1065      -                    DMU_OT_DDT_STATS, DMU_OT_NONE, 0, tx);
1066      -                VERIFY(zap_add(ddt->ddt_os, DMU_POOL_DIRECTORY_OBJECT,
1067      -                    DMU_POOL_DDT_STATS, sizeof (uint64_t), 1,
1068      -                    &spa->spa_ddt_stat_object, tx) == 0);
     1065 +                spa->spa_ddt_stat_object = zap_create_link(ddt->ddt_os,
     1066 +                    DMU_OT_DDT_STATS, DMU_POOL_DIRECTORY_OBJECT,
     1067 +                    DMU_POOL_DDT_STATS, tx);
1069 1068          }
1070 1069  
1071 1070          while ((dde = avl_destroy_nodes(&ddt->ddt_tree, &cookie)) != NULL) {
1072 1071                  ddt_sync_entry(ddt, dde, tx, txg);
1073 1072                  ddt_free(dde);
1074 1073          }
1075 1074  
1076 1075          for (enum ddt_type type = 0; type < DDT_TYPES; type++) {
1077 1076                  uint64_t count = 0;
1078 1077                  for (enum ddt_class class = 0; class < DDT_CLASSES; class++) {
↓ open down ↓ 68 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX