]> sourceware.org Git - lvm2.git/commitdiff
dm: migration_threshold for old linked tools
authorZdenek Kabelac <zkabelac@redhat.com>
Sun, 20 Jan 2019 10:45:27 +0000 (11:45 +0100)
committerZdenek Kabelac <zkabelac@redhat.com>
Mon, 21 Jan 2019 11:52:16 +0000 (12:52 +0100)
Just like with precending  lvm2 device_mapper patch, ensure
that old users of libdm will also get fixed migration threshold
for caches.

WHATS_NEW_DM
libdm/libdm-deptree.c

index 3d45bc3ab295db022e6c38a1d00f6ce2018e0516..7c8b8535a0f6d77f7e04ca2dcd7a984ca36e4e1e 100644 (file)
@@ -1,5 +1,6 @@
 Version 1.02.155 - 
 ====================================
+  Ensure migration_threshold for cache is at least 8 chunks.
   Include correct internal header inside libdm list.c.
   Enhance ioctl flattening and add parameters only when needed.
   Add DM_DEVICE_ARM_POLL for API completness matching kernel.
index 3f95a0d6c8d132b56d0bb76a735c371511d384df..ee12da2b2d442ab4f5087c30f35251845226acd1 100644 (file)
@@ -192,6 +192,7 @@ struct load_segment {
        uint64_t transaction_id;        /* Thin_pool */
        uint64_t low_water_mark;        /* Thin_pool */
        uint32_t data_block_size;       /* Thin_pool + cache */
+       uint32_t migration_threshold;   /* Cache */
        unsigned skip_block_zeroing;    /* Thin_pool */
        unsigned ignore_discard;        /* Thin_pool target vsn 1.1 */
        unsigned no_discard_passdown;   /* Thin_pool target vsn 1.1 */
@@ -2462,10 +2463,14 @@ static int _cache_emit_segment_line(struct dm_task *dmt,
 
        EMIT_PARAMS(pos, " %s", name);
 
-       EMIT_PARAMS(pos, " %u", seg->policy_argc * 2);
+       /* Do not pass migration_threshold 2048 which is default */
+       EMIT_PARAMS(pos, " %u", (seg->policy_argc + (seg->migration_threshold != 2048) ? 1 : 0) * 2);
+       if (seg->migration_threshold != 2048)
+                   EMIT_PARAMS(pos, " migration_threshold %u", seg->migration_threshold);
        if (seg->policy_settings)
                for (cn = seg->policy_settings->child; cn; cn = cn->sib)
-                       EMIT_PARAMS(pos, " %s %" PRIu64, cn->key, cn->v->v.i);
+                       if (cn->v) /* Skip deleted entry */
+                               EMIT_PARAMS(pos, " %s %" PRIu64, cn->key, cn->v->v.i);
 
        return 1;
 }
@@ -3373,6 +3378,7 @@ int dm_tree_node_add_cache_target(struct dm_tree_node *node,
        seg->data_block_size = data_block_size;
        seg->flags = feature_flags;
        seg->policy_name = policy_name;
+       seg->migration_threshold = 2048; /* Default migration threshold 1MiB */
 
        /* FIXME: better validation missing */
        if (policy_settings) {
@@ -3385,10 +3391,18 @@ int dm_tree_node_add_cache_target(struct dm_tree_node *node,
                                log_error("Cache policy parameter %s is without integer value.", cn->key);
                                return 0;
                        }
-                       seg->policy_argc++;
+                       if (strcmp(cn->key, "migration_threshold") == 0) {
+                               seg->migration_threshold = cn->v->v.i;
+                               cn->v = NULL; /* skip this entry */
+                       } else
+                               seg->policy_argc++;
                }
        }
 
+       /* Always some throughput available for cache to proceed */
+       if (seg->migration_threshold < data_block_size * 8)
+               seg->migration_threshold = data_block_size * 8;
+
        return 1;
 }
 
This page took 0.043001 seconds and 5 git commands to generate.