From f1aabd5c60ad721609e5d781e45c234ba62fe355 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Tue, 15 May 2012 21:27:24 +0000 Subject: [PATCH 1/1] Set delay_resume_if_new on deptree snapshot origin. (Must avoid activating snapshot origin more than once concurrently.) --- WHATS_NEW_DM | 1 + libdm/libdm-deptree.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM index 6800b5a82..7b74ecf28 100644 --- a/WHATS_NEW_DM +++ b/WHATS_NEW_DM @@ -1,5 +1,6 @@ Version 1.02.75 - ================================ + Set delay_resume_if_new on deptree snapshot origin. Log value chosen in _find_config_bool like other variable types do. Synchronize with dead of dmeventd. Rename (Blk)DevNames/DevNos dmsetup header to (Blk)DevNamesUsed/DevNosUsed. diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c index eb942a1d4..5ce44d088 100644 --- a/libdm/libdm-deptree.c +++ b/libdm/libdm-deptree.c @@ -2358,8 +2358,10 @@ static int _load_node(struct dm_tree_node *dnode) if ((r = dm_task_run(dmt))) { r = dm_task_get_info(dmt, &dnode->info); if (r && !dnode->info.inactive_table) - log_verbose("Suppressed %s identical table reload.", - dnode->name); + log_verbose("Suppressed %s (%" PRIu32 ":%" PRIu32 + ") identical table reload.", + dnode->name, + dnode->info.major, dnode->info.minor); existing_table_size = dm_task_get_existing_table_size(dmt); if ((dnode->props.size_changed = @@ -2548,6 +2550,12 @@ int dm_tree_node_add_snapshot_origin_target(struct dm_tree_node *dnode, /* Resume snapshot origins after new snapshots */ dnode->activation_priority = 1; + /* + * Don't resume the origin immediately in case it is a non-trivial + * target that must not be active more than once concurrently! + */ + origin_node->props.delay_resume_if_new = 1; + return 1; } -- 2.43.5