List cleanup and use of list_node_init initializer

This commit is contained in:
Brian Behlendorf 2009-01-13 15:00:12 -08:00
parent 2ea04834bf
commit bec036636e
4 changed files with 13 additions and 3 deletions

View File

@ -5,4 +5,9 @@ Remove all instances of list handling where the API is not used
and instead list data members are directly accessed. Doing this and instead list data members are directly accessed. Doing this
sort of thing is bad for portability. 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> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>

View File

@ -1018,6 +1018,7 @@ dbuf_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx)
* transaction group won't leak out when we sync the older txg. * transaction group won't leak out when we sync the older txg.
*/ */
dr = kmem_zalloc(sizeof (dbuf_dirty_record_t), KM_SLEEP); dr = kmem_zalloc(sizeof (dbuf_dirty_record_t), KM_SLEEP);
list_link_init(&dr->dr_dirty_node);
if (db->db_level == 0) { if (db->db_level == 0) {
void *data_old = db->db_buf; void *data_old = db->db_buf;

View File

@ -280,6 +280,13 @@ dnode_create(objset_impl_t *os, dnode_phys_t *dnp, dmu_buf_impl_t *db,
dn->dn_dbuf = db; dn->dn_dbuf = db;
dn->dn_phys = dnp; 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) if (dnp->dn_datablkszsec)
dnode_setdblksz(dn, dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT); dnode_setdblksz(dn, dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT);
dn->dn_indblkshift = dnp->dn_indblkshift; dn->dn_indblkshift = dnp->dn_indblkshift;

View File

@ -85,9 +85,6 @@ struct dmu_tx;
* etc. * etc.
*/ */
#define LIST_LINK_INACTIVE(link) \
((link)->list_next == NULL && (link)->list_prev == NULL)
struct dmu_buf_impl; struct dmu_buf_impl;
typedef enum override_states { typedef enum override_states {