]> sourceware.org Git - dm.git/commitdiff
add clustered log uuid
authorAlasdair Kergon <agk@redhat.com>
Mon, 6 Feb 2006 20:18:10 +0000 (20:18 +0000)
committerAlasdair Kergon <agk@redhat.com>
Mon, 6 Feb 2006 20:18:10 +0000 (20:18 +0000)
lib/libdm-deptree.c

index 5a4ff4e5ca7b65b9c7626a981b635a802c4522b2..1431cf6ea8265fc1700adeb2fa0d21df5b4267fe 100644 (file)
@@ -86,6 +86,7 @@ struct load_segment {
        unsigned clustered;             /* Mirror */
        unsigned mirror_area_count;     /* Mirror */
        uint32_t flags;                 /* Mirror log */
+       char *uuid;                     /* Clustered mirror log */
 };
 
 /* Per-device properties */
@@ -1238,7 +1239,12 @@ static int _emit_segment_line(struct dm_task *dmt, struct load_segment *seg, uin
        case SEG_LINEAR:
                break;
        case SEG_MIRRORED:
+               log_parm_count = 1;     /* Region size */
+               log_parm_count = hweight32(seg->flags); /* [no]sync, block_on_error etc. */
+
                if (seg->clustered) {
+                       if (seg->uuid)
+                               log_parm_count++;       /* uuid */
                        if ((tw = _dm_snprintf(params + pos, paramsize - pos, "clustered_")) < 0) {
                                stack;  /* Out of space */
                                return -1;
@@ -1246,9 +1252,6 @@ static int _emit_segment_line(struct dm_task *dmt, struct load_segment *seg, uin
                        pos += tw;
                }
 
-               log_parm_count = 1;     /* Region size */
-               log_parm_count = hweight32(seg->flags); /* [no]sync, block_on_error etc. */
-
                if (!seg->log)
                        logtype = "core";
                else {
@@ -1278,6 +1281,14 @@ static int _emit_segment_line(struct dm_task *dmt, struct load_segment *seg, uin
                        }
                pos += tw;
 
+               if (seg->clustered && seg->uuid) {
+                       if ((tw = _dm_snprintf(params + pos, paramsize - pos, "%s ", seg->uuid)) < 0) {
+                               stack;  /* Out of space */
+                               return -1;
+                       }
+                       pos += tw;
+               }
+
                if ((seg->flags & DM_NOSYNC)) {
                        if ((tw = _dm_snprintf(params + pos, paramsize - pos, "nosync ")) < 0) {
                                        stack; /* Out of space */
@@ -1694,8 +1705,14 @@ int dm_tree_node_add_mirror_target_log(struct dm_tree_node *node,
                        log_error("Couldn't find mirror log uuid %s.", log_uuid);
                        return 0;
                }
+
                if (!_link_tree_nodes(node, log_node))
                        return_0;
+
+               if (!(seg->uuid = dm_pool_strdup(node->dtree->mem, log_uuid))) {
+                       log_error("log uuid pool_strdup failed");
+                       return 0;
+               }
        }
 
        seg->log = log_node;
This page took 0.028253 seconds and 5 git commands to generate.