and instead list data members are directly accessed. Doing this
sort of thing is bad for portability.
+Additionally, ensure that list_link_init() is called on newly
+created list nodes. This ensures the node is properly initialized
+and does not rely on the assumption that zero'ing the list_node_t
+via kmem_zalloc() is the same as proper initialization.
+
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
* transaction group won't leak out when we sync the older txg.
*/
dr = kmem_zalloc(sizeof (dbuf_dirty_record_t), KM_SLEEP);
+ list_link_init(&dr->dr_dirty_node);
if (db->db_level == 0) {
void *data_old = db->db_buf;
dn->dn_dbuf = db;
dn->dn_phys = dnp;
+ list_link_init(&dn->dn_link);
+ {
+ int i;
+ for (i = 0; i < TXG_SIZE; i++)
+ list_link_init(&dn->dn_dirty_link[i]);
+ }
+
if (dnp->dn_datablkszsec)
dnode_setdblksz(dn, dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT);
dn->dn_indblkshift = dnp->dn_indblkshift;
* etc.
*/
-#define LIST_LINK_INACTIVE(link) \
- ((link)->list_next == NULL && (link)->list_prev == NULL)
-
struct dmu_buf_impl;
typedef enum override_states {