Print this page
4171 clean up spa_feature_*() interfaces
4172 implement extensible_dataset feature for use by other zpool features
Reviewed by: Max Grossman <max.grossman@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>

@@ -19,11 +19,11 @@
  * CDDL HEADER END
  */
 
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2013 by Delphix. All rights reserved.
  */
 
 #include <sys/zfs_context.h>
 #include <sys/dbuf.h>
 #include <sys/dnode.h>

@@ -572,11 +572,16 @@
         ASSERT(dnp->dn_nlevels > 1 ||
             BP_IS_HOLE(&dnp->dn_blkptr[0]) ||
             BP_GET_LSIZE(&dnp->dn_blkptr[0]) ==
             dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT);
 
-        if (dn->dn_next_blksz[txgoff]) {
+        if (dn->dn_next_type[txgoff] != 0) {
+                dnp->dn_type = dn->dn_type;
+                dn->dn_next_type[txgoff] = 0;
+        }
+
+        if (dn->dn_next_blksz[txgoff] != 0) {
                 ASSERT(P2PHASE(dn->dn_next_blksz[txgoff],
                     SPA_MINBLOCKSIZE) == 0);
                 ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[0]) ||
                     dn->dn_maxblkid == 0 || list_head(list) != NULL ||
                     avl_last(&dn->dn_ranges[txgoff]) ||

@@ -585,20 +590,20 @@
                 dnp->dn_datablkszsec =
                     dn->dn_next_blksz[txgoff] >> SPA_MINBLOCKSHIFT;
                 dn->dn_next_blksz[txgoff] = 0;
         }
 
-        if (dn->dn_next_bonuslen[txgoff]) {
+        if (dn->dn_next_bonuslen[txgoff] != 0) {
                 if (dn->dn_next_bonuslen[txgoff] == DN_ZERO_BONUSLEN)
                         dnp->dn_bonuslen = 0;
                 else
                         dnp->dn_bonuslen = dn->dn_next_bonuslen[txgoff];
                 ASSERT(dnp->dn_bonuslen <= DN_MAX_BONUSLEN);
                 dn->dn_next_bonuslen[txgoff] = 0;
         }
 
-        if (dn->dn_next_bonustype[txgoff]) {
+        if (dn->dn_next_bonustype[txgoff] != 0) {
                 ASSERT(DMU_OT_IS_VALID(dn->dn_next_bonustype[txgoff]));
                 dnp->dn_bonustype = dn->dn_next_bonustype[txgoff];
                 dn->dn_next_bonustype[txgoff] = 0;
         }
 

@@ -612,11 +617,11 @@
                 if ((dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR))
                         kill_spill = B_TRUE;
                 dn->dn_rm_spillblk[txgoff] = 0;
         }
 
-        if (dn->dn_next_indblkshift[txgoff]) {
+        if (dn->dn_next_indblkshift[txgoff] != 0) {
                 ASSERT(dnp->dn_nlevels == 1);
                 dnp->dn_indblkshift = dn->dn_next_indblkshift[txgoff];
                 dn->dn_next_indblkshift[txgoff] = 0;
         }