Commit 47874c98 authored by Bruce Johnston's avatar Bruce Johnston Committed by Mikulas Patocka

dm vdo: add dmsetup message for returning configuration info

Add a new dmsetup message called config, which will return
useful configuration information for the vdo volume and
the uds index associated with it. The output is a YAML
string, and contains a version number to allow future
additions to the content.
Signed-off-by: default avatarBruce Johnston <bjohnsto@redhat.com>
Signed-off-by: default avatarMatthew Sakai <msakai@redhat.com>
Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
parent 3a59b2ec
...@@ -251,7 +251,12 @@ The messages are: ...@@ -251,7 +251,12 @@ The messages are:
by the vdostats userspace program to interpret the output by the vdostats userspace program to interpret the output
buffer. buffer.
dump: config:
Outputs useful vdo configuration information. Mostly used
by users who want to recreate a similar VDO volume and
want to know the creation configuration used.
dump:
Dumps many internal structures to the system log. This is Dumps many internal structures to the system log. This is
not always safe to run, so it should only be used to debug not always safe to run, so it should only be used to debug
a hung vdo. Optional parameters to specify structures to a hung vdo. Optional parameters to specify structures to
......
...@@ -1105,6 +1105,9 @@ static int vdo_message(struct dm_target *ti, unsigned int argc, char **argv, ...@@ -1105,6 +1105,9 @@ static int vdo_message(struct dm_target *ti, unsigned int argc, char **argv,
if ((argc == 1) && (strcasecmp(argv[0], "stats") == 0)) { if ((argc == 1) && (strcasecmp(argv[0], "stats") == 0)) {
vdo_write_stats(vdo, result_buffer, maxlen); vdo_write_stats(vdo, result_buffer, maxlen);
result = 1; result = 1;
} else if ((argc == 1) && (strcasecmp(argv[0], "config") == 0)) {
vdo_write_config(vdo, &result_buffer, &maxlen);
result = 1;
} else { } else {
result = vdo_status_to_errno(process_vdo_message(vdo, argc, argv)); result = vdo_status_to_errno(process_vdo_message(vdo, argc, argv));
} }
...@@ -2832,7 +2835,7 @@ static void vdo_resume(struct dm_target *ti) ...@@ -2832,7 +2835,7 @@ static void vdo_resume(struct dm_target *ti)
static struct target_type vdo_target_bio = { static struct target_type vdo_target_bio = {
.features = DM_TARGET_SINGLETON, .features = DM_TARGET_SINGLETON,
.name = "vdo", .name = "vdo",
.version = { 9, 0, 0 }, .version = { 9, 1, 0 },
.module = THIS_MODULE, .module = THIS_MODULE,
.ctr = vdo_ctr, .ctr = vdo_ctr,
.dtr = vdo_dtr, .dtr = vdo_dtr,
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*/ */
#include "dedupe.h" #include "dedupe.h"
#include "indexer.h"
#include "logger.h" #include "logger.h"
#include "memory-alloc.h" #include "memory-alloc.h"
#include "message-stats.h" #include "message-stats.h"
...@@ -430,3 +431,50 @@ int vdo_write_stats(struct vdo *vdo, char *buf, unsigned int maxlen) ...@@ -430,3 +431,50 @@ int vdo_write_stats(struct vdo *vdo, char *buf, unsigned int maxlen)
vdo_free(stats); vdo_free(stats);
return VDO_SUCCESS; return VDO_SUCCESS;
} }
static void write_index_memory(u32 mem, char **buf, unsigned int *maxlen)
{
char *prefix = "memorySize : ";
/* Convert index memory to fractional value */
if (mem == (u32)UDS_MEMORY_CONFIG_256MB)
write_string(prefix, "0.25, ", NULL, buf, maxlen);
else if (mem == (u32)UDS_MEMORY_CONFIG_512MB)
write_string(prefix, "0.50, ", NULL, buf, maxlen);
else if (mem == (u32)UDS_MEMORY_CONFIG_768MB)
write_string(prefix, "0.75, ", NULL, buf, maxlen);
else
write_u32(prefix, mem, ", ", buf, maxlen);
}
static void write_index_config(struct index_config *config, char **buf,
unsigned int *maxlen)
{
write_string("index : ", "{ ", NULL, buf, maxlen);
/* index mem size */
write_index_memory(config->mem, buf, maxlen);
/* whether the index is sparse or not */
write_bool("isSparse : ", config->sparse, ", ", buf, maxlen);
write_string(NULL, "}", ", ", buf, maxlen);
}
int vdo_write_config(struct vdo *vdo, char **buf, unsigned int *maxlen)
{
struct vdo_config *config = &vdo->states.vdo.config;
write_string(NULL, "{ ", NULL, buf, maxlen);
/* version */
write_u32("version : ", 1, ", ", buf, maxlen);
/* physical size */
write_block_count_t("physicalSize : ", config->physical_blocks * VDO_BLOCK_SIZE, ", ",
buf, maxlen);
/* logical size */
write_block_count_t("logicalSize : ", config->logical_blocks * VDO_BLOCK_SIZE, ", ",
buf, maxlen);
/* slab size */
write_block_count_t("slabSize : ", config->slab_size, ", ", buf, maxlen);
/* index config */
write_index_config(&vdo->geometry.index_config, buf, maxlen);
write_string(NULL, "}", NULL, buf, maxlen);
return VDO_SUCCESS;
}
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "types.h" #include "types.h"
int vdo_write_config(struct vdo *vdo, char **buf, unsigned int *maxlen);
int vdo_write_stats(struct vdo *vdo, char *buf, unsigned int maxlen); int vdo_write_stats(struct vdo *vdo, char *buf, unsigned int maxlen);
#endif /* VDO_MESSAGE_STATS_H */ #endif /* VDO_MESSAGE_STATS_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment