1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-10 16:58:47 +03:00

Only fail if the top-level LV fails to be deactivated - allow deactivation

of its dependencies to fail.
This commit is contained in:
Alasdair Kergon 2010-04-07 23:51:34 +00:00
parent 09d11ca3d8
commit 18e0f9342d

View File

@ -1013,9 +1013,13 @@ static int _suspend_node(const char *name, uint32_t major, uint32_t minor,
return r; return r;
} }
int dm_tree_deactivate_children(struct dm_tree_node *dnode, /*
const char *uuid_prefix, * FIXME Don't attempt to deactivate known internal dependencies.
size_t uuid_prefix_len) */
static int _dm_tree_deactivate_children(struct dm_tree_node *dnode,
const char *uuid_prefix,
size_t uuid_prefix_len,
unsigned level)
{ {
int r = 1; int r = 1;
void *handle = NULL; void *handle = NULL;
@ -1051,10 +1055,13 @@ int dm_tree_deactivate_children(struct dm_tree_node *dnode,
continue; continue;
if (info.open_count) { if (info.open_count) {
log_error("Unable to deactivate open %s (%" PRIu32 /* Only report error from (likely non-internal) dependency at top level */
":%" PRIu32 ")", name, info.major, if (!level) {
info.minor); log_error("Unable to deactivate open %s (%" PRIu32
r = 0; ":%" PRIu32 ")", name, info.major,
info.minor);
r = 0;
}
continue; continue;
} }
@ -1067,14 +1074,22 @@ int dm_tree_deactivate_children(struct dm_tree_node *dnode,
continue; continue;
} }
if (dm_tree_node_num_children(child, 0)) if (dm_tree_node_num_children(child, 0)) {
if (!dm_tree_deactivate_children(child, uuid_prefix, uuid_prefix_len)) if (!_dm_tree_deactivate_children(child, uuid_prefix, uuid_prefix_len, level + 1))
return_0; return_0;
}
} }
return r; return r;
} }
int dm_tree_deactivate_children(struct dm_tree_node *dnode,
const char *uuid_prefix,
size_t uuid_prefix_len)
{
return _dm_tree_deactivate_children(dnode, uuid_prefix, uuid_prefix_len, 0);
}
void dm_tree_skip_lockfs(struct dm_tree_node *dnode) void dm_tree_skip_lockfs(struct dm_tree_node *dnode)
{ {
dnode->dtree->skip_lockfs = 1; dnode->dtree->skip_lockfs = 1;