[lvm-devel] LVM2 ./WHATS_NEW libdm/.exported_symbols libdm ...

zkabelac at sourceware.org zkabelac at sourceware.org
Fri May 21 12:27:04 UTC 2010


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	zkabelac at sourceware.org	2010-05-21 12:27:03

Modified files:
	.              : WHATS_NEW 
	libdm          : .exported_symbols libdevmapper.h 
	                 libdm-deptree.c 

Log message:
	Replicator: support deactivate of replicator-dev nodes
	
	Introducing dm_tree_node_set_presuspend_node() for presuspending child
	node (i.e. replicator control target) before deactivation of parent node
	(i.e. replicator-dev target).
	
	This patch presents no functional change to current dtree - only
	replicator target currently sets presuspend node for dev nodes.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1577&r2=1.1578
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/.exported_symbols.diff?cvsroot=lvm2&r1=1.53&r2=1.54
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdevmapper.h.diff?cvsroot=lvm2&r1=1.114&r2=1.115
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/libdm/libdm-deptree.c.diff?cvsroot=lvm2&r1=1.76&r2=1.77

--- LVM2/WHATS_NEW	2010/05/21 12:24:15	1.1577
+++ LVM2/WHATS_NEW	2010/05/21 12:27:02	1.1578
@@ -1,5 +1,6 @@
 Version 2.02.67 -
 ===============================
+  Added dm_tree_node_set_presuspend_node() to presuspend child in deactivate.
   Initial libdm support for Replicator target (API is not stable yet).
   Extend process_each_lv_in_vg() with support for list of failed lvnames.
   Return ECMD_FAILED for break in process_each_lv() and process_each_segment_in_lv().
--- LVM2/libdm/.exported_symbols	2010/05/21 12:24:15	1.53
+++ LVM2/libdm/.exported_symbols	2010/05/21 12:27:03	1.54
@@ -82,6 +82,7 @@
 dm_tree_node_add_target_area
 dm_tree_node_add_replicator_target
 dm_tree_node_add_replicator_dev_target
+dm_tree_node_set_presuspend_node
 dm_tree_node_set_read_ahead
 dm_tree_skip_lockfs
 dm_tree_use_no_flush_suspend
--- LVM2/libdm/libdevmapper.h	2010/05/21 12:24:15	1.114
+++ LVM2/libdm/libdevmapper.h	2010/05/21 12:27:03	1.115
@@ -474,6 +474,9 @@
 					   uint32_t slog_region_size);
 /* End of Replicator API */
 
+void dm_tree_node_set_presuspend_node(struct dm_tree_node *node,
+				      struct dm_tree_node *presuspend_node);
+
 int dm_tree_node_add_target_area(struct dm_tree_node *node,
 				    const char *dev_name,
 				    const char *dlid,
--- LVM2/libdm/libdm-deptree.c	2010/05/21 12:24:15	1.76
+++ LVM2/libdm/libdm-deptree.c	2010/05/21 12:27:03	1.77
@@ -168,6 +168,12 @@
 	void *context;			/* External supplied context */
 
 	struct load_properties props;	/* For creation/table (re)load */
+
+	/*
+	 * If presuspend of child node is needed
+	 * Note: only direct child is allowed
+	 */
+	struct dm_tree_node *presuspend_node;
 };
 
 struct dm_tree {
@@ -684,6 +690,12 @@
 	dnode->props.read_ahead_flags = read_ahead_flags;
 }
 
+void dm_tree_node_set_presuspend_node(struct dm_tree_node *node,
+				      struct dm_tree_node *presuspend_node)
+{
+	node->presuspend_node = presuspend_node;
+}
+
 int dm_tree_add_dev(struct dm_tree *dtree, uint32_t major, uint32_t minor)
 {
 	return _add_dev(dtree, &dtree->root, major, minor, 0) ? 1 : 0;
@@ -794,6 +806,10 @@
 		if (!_uuid_prefix_matches(uuid, uuid_prefix, uuid_prefix_len))
 			continue;
 
+		/* Ignore if parent node wants to presuspend this node */
+		if (dlink->node->presuspend_node == node)
+			continue;
+
 		if (!(dinfo = dm_tree_node_get_info(dlink->node))) {
 			stack;	/* FIXME Is this normal? */
 			return 0;
@@ -1095,6 +1111,11 @@
 			continue;
 		}
 
+		/* Suspend child node first if requested */
+		if (child->presuspend_node &&
+		    !dm_tree_suspend_children(child, uuid_prefix, uuid_prefix_len))
+			continue;
+
 		if (!_deactivate_node(name, info.major, info.minor,
 				      &child->dtree->cookie, child->udev_flags)) {
 			log_error("Unable to deactivate %s (%" PRIu32




More information about the lvm-devel mailing list