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>


 161         dnode_phys_t *dn_phys; /* pointer into dn->dn_dbuf->db.db_data */
 162 
 163         /*
 164          * Copies of stuff in dn_phys.  They're valid in the open
 165          * context (eg. even before the dnode is first synced).
 166          * Where necessary, these are protected by dn_struct_rwlock.
 167          */
 168         dmu_object_type_t dn_type;      /* object type */
 169         uint16_t dn_bonuslen;           /* bonus length */
 170         uint8_t dn_bonustype;           /* bonus type */
 171         uint8_t dn_nblkptr;             /* number of blkptrs (immutable) */
 172         uint8_t dn_checksum;            /* ZIO_CHECKSUM type */
 173         uint8_t dn_compress;            /* ZIO_COMPRESS type */
 174         uint8_t dn_nlevels;
 175         uint8_t dn_indblkshift;
 176         uint8_t dn_datablkshift;        /* zero if blksz not power of 2! */
 177         uint8_t dn_moved;               /* Has this dnode been moved? */
 178         uint16_t dn_datablkszsec;       /* in 512b sectors */
 179         uint32_t dn_datablksz;          /* in bytes */
 180         uint64_t dn_maxblkid;

 181         uint8_t dn_next_nblkptr[TXG_SIZE];
 182         uint8_t dn_next_nlevels[TXG_SIZE];
 183         uint8_t dn_next_indblkshift[TXG_SIZE];
 184         uint8_t dn_next_bonustype[TXG_SIZE];
 185         uint8_t dn_rm_spillblk[TXG_SIZE];       /* for removing spill blk */
 186         uint16_t dn_next_bonuslen[TXG_SIZE];
 187         uint32_t dn_next_blksz[TXG_SIZE];       /* next block size in bytes */
 188 
 189         /* protected by dn_dbufs_mtx; declared here to fill 32-bit hole */
 190         uint32_t dn_dbufs_count;        /* count of dn_dbufs */
 191         /* There are no level-0 blocks of this blkid or higher in dn_dbufs */
 192         uint64_t dn_unlisted_l0_blkid;
 193 
 194         /* protected by os_lock: */
 195         list_node_t dn_dirty_link[TXG_SIZE];    /* next on dataset's dirty */
 196 
 197         /* protected by dn_mtx: */
 198         kmutex_t dn_mtx;
 199         list_t dn_dirty_records[TXG_SIZE];
 200         avl_tree_t dn_ranges[TXG_SIZE];




 161         dnode_phys_t *dn_phys; /* pointer into dn->dn_dbuf->db.db_data */
 162 
 163         /*
 164          * Copies of stuff in dn_phys.  They're valid in the open
 165          * context (eg. even before the dnode is first synced).
 166          * Where necessary, these are protected by dn_struct_rwlock.
 167          */
 168         dmu_object_type_t dn_type;      /* object type */
 169         uint16_t dn_bonuslen;           /* bonus length */
 170         uint8_t dn_bonustype;           /* bonus type */
 171         uint8_t dn_nblkptr;             /* number of blkptrs (immutable) */
 172         uint8_t dn_checksum;            /* ZIO_CHECKSUM type */
 173         uint8_t dn_compress;            /* ZIO_COMPRESS type */
 174         uint8_t dn_nlevels;
 175         uint8_t dn_indblkshift;
 176         uint8_t dn_datablkshift;        /* zero if blksz not power of 2! */
 177         uint8_t dn_moved;               /* Has this dnode been moved? */
 178         uint16_t dn_datablkszsec;       /* in 512b sectors */
 179         uint32_t dn_datablksz;          /* in bytes */
 180         uint64_t dn_maxblkid;
 181         uint8_t dn_next_type[TXG_SIZE];
 182         uint8_t dn_next_nblkptr[TXG_SIZE];
 183         uint8_t dn_next_nlevels[TXG_SIZE];
 184         uint8_t dn_next_indblkshift[TXG_SIZE];
 185         uint8_t dn_next_bonustype[TXG_SIZE];
 186         uint8_t dn_rm_spillblk[TXG_SIZE];       /* for removing spill blk */
 187         uint16_t dn_next_bonuslen[TXG_SIZE];
 188         uint32_t dn_next_blksz[TXG_SIZE];       /* next block size in bytes */
 189 
 190         /* protected by dn_dbufs_mtx; declared here to fill 32-bit hole */
 191         uint32_t dn_dbufs_count;        /* count of dn_dbufs */
 192         /* There are no level-0 blocks of this blkid or higher in dn_dbufs */
 193         uint64_t dn_unlisted_l0_blkid;
 194 
 195         /* protected by os_lock: */
 196         list_node_t dn_dirty_link[TXG_SIZE];    /* next on dataset's dirty */
 197 
 198         /* protected by dn_mtx: */
 199         kmutex_t dn_mtx;
 200         list_t dn_dirty_records[TXG_SIZE];
 201         avl_tree_t dn_ranges[TXG_SIZE];