[lvm-devel] [PATCH 5/7][retry remove] Replace "info.open_count" test with "dm_device_has_holders" in lvremove code path

Peter Rajnoha prajnoha at redhat.com
Tue Sep 20 12:57:39 UTC 2011


 lib/activate/activate.c    |    2 +-
 lib/commands/toolcontext.c |    8 +++++---
 lib/metadata/lv_manip.c    |    2 +-
 libdm/libdm-deptree.c      |    2 +-
 4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/lib/activate/activate.c b/lib/activate/activate.c
index ae769dd..3d854d1 100644
--- a/lib/activate/activate.c
+++ b/lib/activate/activate.c
@@ -1437,7 +1437,7 @@ int lv_deactivate(struct cmd_context *cmd, const char *lvid_s)
 	}
 
 	if (lv_is_visible(lv)) {
-		if (info.open_count) {
+		if (dm_device_has_holders(info.major, info.minor)) {
 			log_error("LV %s/%s in use: not deactivating",
 				  lv->vg->name, lv->name);
 			goto out;
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
index 859da2b..3dccc18 100644
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
@@ -243,9 +243,6 @@ static int _process_config(struct cmd_context *cmd)
 		log_error("Device directory given in config file too long");
 		return 0;
 	}
-#ifdef DEVMAPPER_SUPPORT
-	dm_set_dev_dir(cmd->dev_dir);
-#endif
 
 	/* proc dir */
 	if (dm_snprintf(cmd->proc_dir, sizeof(cmd->proc_dir), "%s",
@@ -265,6 +262,11 @@ static int _process_config(struct cmd_context *cmd)
 	_get_sysfs_dir(cmd);
 	set_sysfs_dir_path(cmd->sysfs_dir);
 
+#ifdef DEVMAPPER_SUPPORT
+	dm_set_dev_dir(cmd->dev_dir);
+	dm_set_sysfs_dir(cmd->sysfs_dir);
+#endif
+
 	/* activation? */
 	cmd->default_settings.activation = find_config_tree_int(cmd,
 							   "global/activation",
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 61e84c1..3132d0e 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -3099,7 +3099,7 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
 	/* FIXME Ensure not referred to by another existing LVs */
 
 	if (lv_info(cmd, lv, 0, &info, 1, 0)) {
-		if (info.open_count) {
+		if (info.exists && dm_device_has_holders(info.major, info.minor)) {
 			log_error("Can't remove open logical volume \"%s\"",
 				  lv->name);
 			return 0;
diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
index 0db8de2..864723d 100644
--- a/libdm/libdm-deptree.c
+++ b/libdm/libdm-deptree.c
@@ -1185,7 +1185,7 @@ static int _dm_tree_deactivate_children(struct dm_tree_node *dnode,
 			continue;
 
 		/* Also checking open_count in parent nodes of presuspend_node */
-		if (info.open_count ||
+		if (dm_device_has_holders(info.major, info.minor) ||
 		    (child->presuspend_node &&
 		     !_node_has_closed_parents(child->presuspend_node,
 					       uuid_prefix, uuid_prefix_len))) {




More information about the lvm-devel mailing list