summaryrefslogtreecommitdiff
path: root/device_mapper/vdo
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2018-12-20 13:17:30 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2018-12-20 13:26:55 +0100
commit3320ab8334794684b4d324bb78d0b293a27287a6 (patch)
treed0778d63bb504f8173da958abca0dfb600271a77 /device_mapper/vdo
parent9785e40b8d52fd87d7c451ed838f450aee41ba8d (diff)
downloadlvm2-3320ab8334794684b4d324bb78d0b293a27287a6.tar.gz
lib: move towards v2 version of VDO format
Drop very old original format of VDO target and focus on V2 version. So some variables were renamed or replaced. There is no compatibility preserved (with assumption so far this is experimental feature and there is no real user). Note - version currently VDO calls this version 6.2.
Diffstat (limited to 'device_mapper/vdo')
-rw-r--r--device_mapper/vdo/target.h15
-rw-r--r--device_mapper/vdo/vdo_limits.h7
-rw-r--r--device_mapper/vdo/vdo_target.c20
3 files changed, 26 insertions, 16 deletions
diff --git a/device_mapper/vdo/target.h b/device_mapper/vdo/target.h
index c597491ed..f83cffd86 100644
--- a/device_mapper/vdo/target.h
+++ b/device_mapper/vdo/target.h
@@ -74,16 +74,16 @@ enum dm_vdo_write_policy {
// FIXME: review whether we should use the createParams from the userlib
struct dm_vdo_target_params {
+ uint32_t minimum_io_size;
uint32_t block_map_cache_size_mb;
- uint32_t block_map_period;
+ uint32_t block_map_era_length; // format period
uint32_t check_point_frequency;
- uint32_t index_memory_size_mb;
+ uint32_t index_memory_size_mb; // format
- uint32_t read_cache_size_mb;
-
- uint32_t slab_size_mb;
+ uint32_t slab_size_mb; // format
+ uint32_t max_discard;
// threads
uint32_t ack_threads;
uint32_t bio_threads;
@@ -95,9 +95,8 @@ struct dm_vdo_target_params {
bool use_compression;
bool use_deduplication;
- bool emulate_512_sectors;
- bool use_sparse_index;
- bool use_read_cache;
+ bool use_metadata_hints;
+ bool use_sparse_index; // format
// write policy
enum dm_vdo_write_policy write_policy;
diff --git a/device_mapper/vdo/vdo_limits.h b/device_mapper/vdo/vdo_limits.h
index 40cf2049d..e145100b1 100644
--- a/device_mapper/vdo/vdo_limits.h
+++ b/device_mapper/vdo/vdo_limits.h
@@ -21,8 +21,8 @@
#define DM_VDO_BLOCK_MAP_CACHE_SIZE_MAXIMUM_MB (16 * 1024 * 1024 - 1) // 16TiB - 1
#define DM_VDO_BLOCK_MAP_CACHE_SIZE_MINIMUM_PER_LOGICAL_THREAD (4096 * DM_VDO_BLOCK_SIZE_KB)
-#define DM_VDO_BLOCK_MAP_PERIOD_MINIMUM 1
-#define DM_VDO_BLOCK_MAP_PERIOD_MAXIMUM (16380)
+#define DM_VDO_BLOCK_MAP_ERA_LENGTH_MINIMUM (1)
+#define DM_VDO_BLOCK_MAP_ERA_LENGTH_MAXIMUM (16380)
#define DM_VDO_INDEX_MEMORY_SIZE_MINIMUM_MB (256) // 0.25 GiB
#define DM_VDO_INDEX_MEMORY_SIZE_MAXIMUM_MB (1024 * 1024 * 1024) // 1TiB
@@ -57,4 +57,7 @@
//#define DM_VDO_PHYSICAL_THREADS_MINIMUM (0)
#define DM_VDO_PHYSICAL_THREADS_MAXIMUM (16)
+#define DM_VDO_MAX_DISCARD_MINIMUM (1)
+#define DM_VDO_MAX_DISCARD_MAXIMUM (UINT32_MAX / 4096)
+
#endif // DEVICE_MAPPER_VDO_LIMITS_H
diff --git a/device_mapper/vdo/vdo_target.c b/device_mapper/vdo/vdo_target.c
index c488023b5..976d71af2 100644
--- a/device_mapper/vdo/vdo_target.c
+++ b/device_mapper/vdo/vdo_target.c
@@ -23,6 +23,13 @@ bool dm_vdo_validate_target_params(const struct dm_vdo_target_params *vtp,
{
bool valid = true;
+ if ((vtp->minimum_io_size != 512) &&
+ (vtp->minimum_io_size != 4096)) {
+ log_error("VDO minimum io size %u is unsupported.",
+ vtp->minimum_io_size);
+ valid = false;
+ }
+
if ((vtp->block_map_cache_size_mb < DM_VDO_BLOCK_MAP_CACHE_SIZE_MINIMUM_MB) ||
(vtp->block_map_cache_size_mb > DM_VDO_BLOCK_MAP_CACHE_SIZE_MAXIMUM_MB)) {
log_error("VDO block map cache size %u out of range.",
@@ -37,12 +44,6 @@ bool dm_vdo_validate_target_params(const struct dm_vdo_target_params *vtp,
valid = false;
}
- if (vtp->read_cache_size_mb > DM_VDO_READ_CACHE_SIZE_MAXIMUM_MB) {
- log_error("VDO read cache size %u out of range.",
- vtp->read_cache_size_mb);
- valid = false;
- }
-
if ((vtp->slab_size_mb < DM_VDO_SLAB_SIZE_MINIMUM_MB) ||
(vtp->slab_size_mb > DM_VDO_SLAB_SIZE_MAXIMUM_MB)) {
log_error("VDO slab size %u out of range.",
@@ -50,6 +51,13 @@ bool dm_vdo_validate_target_params(const struct dm_vdo_target_params *vtp,
valid = false;
}
+ if ((vtp->max_discard < DM_VDO_MAX_DISCARD_MINIMUM) ||
+ (vtp->max_discard > DM_VDO_MAX_DISCARD_MAXIMUM)) {
+ log_error("VDO max discard %u out of range.",
+ vtp->max_discard);
+ valid = false;
+ }
+
if (vtp->ack_threads > DM_VDO_ACK_THREADS_MAXIMUM) {
log_error("VDO ack threads %u out of range.", vtp->ack_threads);
valid = false;