]> sourceware.org Git - lvm2.git/commitdiff
Replicator: support deactivate of replicator-dev nodes
authorZdenek Kabelac <zkabelac@redhat.com>
Fri, 21 May 2010 12:27:02 +0000 (12:27 +0000)
committerZdenek Kabelac <zkabelac@redhat.com>
Fri, 21 May 2010 12:27:02 +0000 (12:27 +0000)
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.

WHATS_NEW
libdm/.exported_symbols
libdm/libdevmapper.h
libdm/libdm-deptree.c

index f9f8a0febaa9aa54f68c0ffdce49ef048b381396..80fc3d45fd11966395e8122866cea44da4fd1131 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -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().
index 090e6332daf2ccffc563dc4d58d97bc73e3d3ede..4eb3bd09a807f01eff28452d1dce646991e91b9a 100644 (file)
@@ -82,6 +82,7 @@ dm_tree_node_add_mirror_target_log
 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
index e0b773922c9ba538c9f1ae8da3b7e9bb5756f0d0..0b67a0f15727d29d2a46625327717dee57ed1064 100644 (file)
@@ -474,6 +474,9 @@ int dm_tree_node_add_replicator_dev_target(struct dm_tree_node *node,
                                           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,
index 6cbb80628a2436b964a86cf20fa7967633664904..3cf68b9bfb1424c59046dfba92493b44712badc6 100644 (file)
@@ -168,6 +168,12 @@ struct dm_tree_node {
        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 @@ void dm_tree_node_set_read_ahead(struct dm_tree_node *dnode,
        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 @@ static int _children_suspended(struct dm_tree_node *node,
                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 @@ static int _dm_tree_deactivate_children(struct dm_tree_node *dnode,
                        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
This page took 0.045376 seconds and 5 git commands to generate.