summaryrefslogtreecommitdiffstats
path: root/sys/cddl
diff options
context:
space:
mode:
authormm <mm@FreeBSD.org>2013-04-06 11:54:41 +0000
committermm <mm@FreeBSD.org>2013-04-06 11:54:41 +0000
commit060b59e700abcb69e41867ccb7bb7f4335334e03 (patch)
treed894126c67edd793dc86ac72f74ab261c7668f90 /sys/cddl
parent696d961cbd8bcba286545fef03c51a896b56d229 (diff)
downloadFreeBSD-src-060b59e700abcb69e41867ccb7bb7f4335334e03.zip
FreeBSD-src-060b59e700abcb69e41867ccb7bb7f4335334e03.tar.gz
Provide a fix for kernel panic if receiving recursive deduplicated streams.
Problem reported to vendor. Illumos ZFS issues: 3692 Panic on zfs receive of a recursive deduplicated stream MFC after: 2 weeks
Diffstat (limited to 'sys/cddl')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
index 4c1c6ff..ac8221c 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
@@ -990,6 +990,7 @@ free_guid_map_onexit(void *arg)
while ((gmep = avl_destroy_nodes(ca, &cookie)) != NULL) {
dsl_dataset_long_rele(gmep->gme_ds, gmep);
+ dsl_dataset_rele(gmep->gme_ds, gmep);
kmem_free(gmep, sizeof (guid_map_entry_t));
}
avl_destroy(ca);
@@ -1691,15 +1692,15 @@ add_ds_to_guidmap(const char *name, avl_tree_t *guid_map, uint64_t snapobj)
err = dsl_pool_hold(name, FTAG, &dp);
if (err != 0)
return (err);
- err = dsl_dataset_hold_obj(dp, snapobj, FTAG, &snapds);
+ gmep = kmem_alloc(sizeof (guid_map_entry_t), KM_SLEEP);
+ err = dsl_dataset_hold_obj(dp, snapobj, gmep, &snapds);
if (err == 0) {
- gmep = kmem_alloc(sizeof (guid_map_entry_t), KM_SLEEP);
gmep->guid = snapds->ds_phys->ds_guid;
gmep->gme_ds = snapds;
avl_add(guid_map, gmep);
dsl_dataset_long_hold(snapds, gmep);
- dsl_dataset_rele(snapds, FTAG);
- }
+ } else
+ kmem_free(gmep, sizeof (guid_map_entry_t));
dsl_pool_rele(dp, FTAG);
return (err);
OpenPOWER on IntegriCloud