Fix dbuf_dirty_record_t leaks
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 26 Aug 2010 17:19:04 +0000 (10:19 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 31 Aug 2010 15:38:44 +0000 (08:38 -0700)
Fix two leaks with dbuf_dirty_record_t

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
module/zfs/dbuf.c
module/zfs/zfs_znode.c

index 7b66fce..55326c4 100644 (file)
@@ -2319,6 +2319,10 @@ dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
                ASSERT(dr->dr_next == NULL);
                ASSERT(dr->dr_dbuf == db);
                *drp = dr->dr_next;
+               if (dr->dr_dbuf->db_level != 0) {
+                       mutex_destroy(&dr->dt.di.dr_mtx);
+                       list_destroy(&dr->dt.di.dr_children);
+               }
                kmem_free(dr, sizeof (dbuf_dirty_record_t));
                ASSERT(db->db_dirtycnt > 0);
                db->db_dirtycnt -= 1;
index 018f12d..79d8d2e 100644 (file)
@@ -1856,6 +1856,8 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *zplprops, dmu_tx_t *tx)
        if (sense == ZFS_CASE_INSENSITIVE || sense == ZFS_CASE_MIXED)
                zfsvfs.z_norm |= U8_TEXTPREP_TOUPPER;
 
+       /* XXX - This must be destroyed but I'm not quite sure yet so
+        * I'm just annotating that fact when it's an issue.  -Brian */
        mutex_init(&zfsvfs.z_znodes_lock, NULL, MUTEX_DEFAULT, NULL);
        list_create(&zfsvfs.z_all_znodes, sizeof (znode_t),
            offsetof(znode_t, z_link_node));