[lvm-devel] [PATCH 1/5] libdm-deptree-return-failure-activate-and-preload-children
Mike Snitzer
snitzer at redhat.com
Fri Nov 20 21:29:08 UTC 2009
Return error immediately to dm_tree_preload_children() and
dm_tree_activate_children() callers.
Otherwise resume_lv and its variants can fail silently.
Catching these failures is especially important now that dm targets like
crypt and snapshot-merge can fail in .preresume
Signed-off-by: Mike Snitzer <snitzer at redhat.com>
---
libdm/libdm-deptree.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
index 1465fd3..bb10fe5 100644
--- a/libdm/libdm-deptree.c
+++ b/libdm/libdm-deptree.c
@@ -1158,7 +1158,8 @@ int dm_tree_activate_children(struct dm_tree_node *dnode,
continue;
if (dm_tree_node_num_children(child, 0))
- dm_tree_activate_children(child, uuid_prefix, uuid_prefix_len);
+ if (!dm_tree_activate_children(child, uuid_prefix, uuid_prefix_len))
+ return_0;
}
handle = NULL;
@@ -1204,7 +1205,7 @@ int dm_tree_activate_children(struct dm_tree_node *dnode,
log_error("Unable to resume %s (%" PRIu32
":%" PRIu32 ")", child->name, child->info.major,
child->info.minor);
- continue;
+ return 0;
}
/* Update cached info */
@@ -1621,7 +1622,8 @@ int dm_tree_preload_children(struct dm_tree_node *dnode,
continue;
if (dm_tree_node_num_children(child, 0))
- dm_tree_preload_children(child, uuid_prefix, uuid_prefix_len);
+ if (!dm_tree_preload_children(child, uuid_prefix, uuid_prefix_len))
+ return_0;
/* FIXME Cope if name exists with no uuid? */
if (!child->info.exists) {
@@ -1655,7 +1657,7 @@ int dm_tree_preload_children(struct dm_tree_node *dnode,
log_error("Unable to resume %s (%" PRIu32
":%" PRIu32 ")", child->name, child->info.major,
child->info.minor);
- continue;
+ return 0;
}
/* Update cached info */
--
1.6.5.2
More information about the lvm-devel
mailing list