--- lib/activate/dev_manager.c | 12 ++++++++++++ libdm/libdm-deptree.c | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) Index: LVM2.2.02.54/lib/activate/dev_manager.c =================================================================== --- LVM2.2.02.54.orig/lib/activate/dev_manager.c 2009-10-29 20:31:19.000000000 +0100 +++ LVM2.2.02.54/lib/activate/dev_manager.c 2009-10-29 20:31:43.000000000 +0100 @@ -886,6 +886,18 @@ static struct dm_tree *_create_partial_d if (!_add_lv_to_dtree(dm, dtree, dm_list_struct_base(snh, struct lv_segment, origin_list)->cow)) goto_bad; + if (lv_is_multisnap_origin(lv)) { + struct lv_list *lvl; + dm_list_iterate_items(lvl, &lv->vg->lvs) { + struct logical_volume *snap_l = lvl->lv; + struct lv_segment *snap_s; + if (lv_is_multisnap_cow(snap_l) && + (snap_s = first_seg(snap_l)) && + snap_s->origin == lv) + _add_lv_to_dtree(dm, dtree, snap_l); + } + } + /* Add any LVs used by segments in this LV */ dm_list_iterate_items(seg, &lv->segments) { for (s = 0; s < seg->area_count; s++) Index: LVM2.2.02.54/libdm/libdm-deptree.c =================================================================== --- LVM2.2.02.54.orig/libdm/libdm-deptree.c 2009-10-29 19:29:40.000000000 +0100 +++ LVM2.2.02.54/libdm/libdm-deptree.c 2009-10-29 20:31:43.000000000 +0100 @@ -1847,8 +1847,10 @@ int dm_tree_node_add_snapshot_shared_sna } seg->snapid = dm_pool_strdup(node->dtree->mem, snapid); - seg->origin = origin_node; + + node->activation_priority = 1; + if (!_link_tree_nodes(node, origin_node)) return_0;