]> granicus.if.org Git - zfs/commitdiff
Add fix-dbuf_dirty_record_t branch
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 20 Nov 2008 20:52:09 +0000 (12:52 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 20 Nov 2008 20:52:09 +0000 (12:52 -0800)
.topdeps [new file with mode: 0644]
.topmsg [new file with mode: 0644]
zfs/lib/libzpool/dbuf.c
zfs/lib/libzpool/dnode_sync.c
zfs/lib/libzpool/zfs_znode.c

diff --git a/.topdeps b/.topdeps
new file mode 100644 (file)
index 0000000..1f7391f
--- /dev/null
+++ b/.topdeps
@@ -0,0 +1 @@
+master
diff --git a/.topmsg b/.topmsg
new file mode 100644 (file)
index 0000000..a3339ab
--- /dev/null
+++ b/.topmsg
@@ -0,0 +1,8 @@
+From: Brian Behlendorf <behlendorf1@llnl.gov>
+Subject: [PATCH] fix dbuf_dirty_record_t
+
+Fix two leaks with dbuf_dirty_record_t
+
+Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
+
+---
index 08d17fb586d25f013d65bff7aaa57f69b98178b2..7c488404ce4433813084cb28cc4eae3cf0da6301 100644 (file)
@@ -1929,6 +1929,10 @@ dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx)
                        drp = &(*drp)->dr_next;
                ASSERT(dr->dr_next == NULL);
                *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 0fdd27ecf0af102ebf953ddb1b935b98a35cabb4..986bed486bf050a06ef0fb7488d37d35f1b9d7c2 100644 (file)
@@ -429,6 +429,8 @@ dnode_undirty_dbufs(list_t *list)
                } else {
                        mutex_exit(&db->db_mtx);
                        dnode_undirty_dbufs(&dr->dt.di.dr_children);
+                       mutex_destroy(&dr->dt.di.dr_mtx);
+                       list_destroy(&dr->dt.di.dr_children);
                }
                kmem_free(dr, sizeof (dbuf_dirty_record_t));
                dbuf_rele(db, (void *)(uintptr_t)txg);
index 18ab8350f9dc9c0d019c458e7697cec1010fbea5..79cff5fd8c6de944e4caea62f43e4aba9bcc1c80 100644 (file)
@@ -1296,6 +1296,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));