summaryrefslogtreecommitdiff
path: root/device_mapper/vdo
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2022-06-24 15:54:08 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2022-07-11 01:18:24 +0200
commitb5c8e591ed9ee30b67e79d60705d3c0bb8509a2a (patch)
treea5dc3f91cc5f9f208ae1c44774a429f04ab3f0e3 /device_mapper/vdo
parentf445624c339a5c1436a47d2b51046869f183eb03 (diff)
downloadlvm2-b5c8e591ed9ee30b67e79d60705d3c0bb8509a2a.tar.gz
vdo: use defines also for configuration defines
Keep single source for most of values printed in lvm.conf (still needs some conversion) Correct max for logical threads to 60 (we may refuse some older configuration which might eventually user higher numbers - but so far let's assume no user have ever set this as it's been non-trivial and if would complicate code unnecessarily.) Accept maximum of 4PiB for virtual size of VDO LV (lvm2 will drop 'header borders to 0 for this case').
Diffstat (limited to 'device_mapper/vdo')
-rw-r--r--device_mapper/vdo/vdo_limits.h55
-rw-r--r--device_mapper/vdo/vdo_target.c11
2 files changed, 35 insertions, 31 deletions
diff --git a/device_mapper/vdo/vdo_limits.h b/device_mapper/vdo/vdo_limits.h
index e145100b1..db365ace2 100644
--- a/device_mapper/vdo/vdo_limits.h
+++ b/device_mapper/vdo/vdo_limits.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2018-2022 Red Hat, Inc. All rights reserved.
*
* This file is part of the device-mapper userspace tools.
*
@@ -15,49 +15,52 @@
#ifndef DEVICE_MAPPER_VDO_LIMITS_H
#define DEVICE_MAPPER_VDO_LIMITS_H
+#ifndef SECTOR_SHIFT
+#define SECTOR_SHIFT 9L
+#endif
+
#define DM_VDO_BLOCK_SIZE UINT64_C(8) // 4KiB in sectors
+#define DM_VDO_BLOCK_SIZE_KB (DM_VDO_BLOCK_SIZE << SECTOR_SHIFT)
#define DM_VDO_BLOCK_MAP_CACHE_SIZE_MINIMUM_MB (128) // 128MiB
#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_ERA_LENGTH_MINIMUM (1)
-#define DM_VDO_BLOCK_MAP_ERA_LENGTH_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_MINIMUM_MB 256 // 0.25 GiB
#define DM_VDO_INDEX_MEMORY_SIZE_MAXIMUM_MB (1024 * 1024 * 1024) // 1TiB
-//#define DM_VDO_READ_CACHE_SIZE_MINIMUM_MB (0)
-#define DM_VDO_READ_CACHE_SIZE_MAXIMUM_MB (16 * 1024 * 1024 - 1) // 16TiB - 1
-
-#define DM_VDO_SLAB_SIZE_MINIMUM_MB (128) // 128MiB
+#define DM_VDO_SLAB_SIZE_MINIMUM_MB 128 // 128MiB
#define DM_VDO_SLAB_SIZE_MAXIMUM_MB (32 * 1024) // 32GiB
+#define DM_VDO_SLABS_MAXIMUM 8192
-//#define DM_VDO_LOGICAL_SIZE_MINIMUM_MB (0)
-#define DM_VDO_LOGICAL_SIZE_MAXIMUM_MB (UINT64_C(4) * 1024 * 1024 * 1024) // 4PiB
+#define DM_VDO_LOGICAL_SIZE_MAXIMUM (UINT64_C(4) * 1024 * 1024 * 1024 * 1024 * 1024 >> SECTOR_SHIFT) // 4PiB
+#define DM_VDO_PHYSICAL_SIZE_MAXIMUM (UINT64_C(64) * DM_VDO_BLOCK_SIZE_KB * 1024 * 1024 * 1024 >> SECTOR_SHIFT) // 256TiB
-//#define DM_VDO_ACK_THREADS_MINIMUM (0)
-#define DM_VDO_ACK_THREADS_MAXIMUM (100)
+#define DM_VDO_ACK_THREADS_MINIMUM 0
+#define DM_VDO_ACK_THREADS_MAXIMUM 100
-#define DM_VDO_BIO_THREADS_MINIMUM (1)
-#define DM_VDO_BIO_THREADS_MAXIMUM (100)
+#define DM_VDO_BIO_THREADS_MINIMUM 1
+#define DM_VDO_BIO_THREADS_MAXIMUM 100
-#define DM_VDO_BIO_ROTATION_MINIMUM (1)
-#define DM_VDO_BIO_ROTATION_MAXIMUM (1024)
+#define DM_VDO_BIO_ROTATION_MINIMUM 1
+#define DM_VDO_BIO_ROTATION_MAXIMUM 1024
-#define DM_VDO_CPU_THREADS_MINIMUM (1)
-#define DM_VDO_CPU_THREADS_MAXIMUM (100)
+#define DM_VDO_CPU_THREADS_MINIMUM 1
+#define DM_VDO_CPU_THREADS_MAXIMUM 100
-//#define DM_VDO_HASH_ZONE_THREADS_MINIMUM (0)
-#define DM_VDO_HASH_ZONE_THREADS_MAXIMUM (100)
+#define DM_VDO_HASH_ZONE_THREADS_MINIMUM 0
+#define DM_VDO_HASH_ZONE_THREADS_MAXIMUM 100
-//#define DM_VDO_LOGICAL_THREADS_MINIMUM (0)
-#define DM_VDO_LOGICAL_THREADS_MAXIMUM (100)
+#define DM_VDO_LOGICAL_THREADS_MINIMUM 0
+#define DM_VDO_LOGICAL_THREADS_MAXIMUM 60
-//#define DM_VDO_PHYSICAL_THREADS_MINIMUM (0)
-#define DM_VDO_PHYSICAL_THREADS_MAXIMUM (16)
+#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)
+#define DM_VDO_MAX_DISCARD_MINIMUM 1
+#define DM_VDO_MAX_DISCARD_MAXIMUM (UINT32_MAX / (uint32_t)(DM_VDO_BLOCK_SIZE_KB))
#endif // DEVICE_MAPPER_VDO_LIMITS_H
diff --git a/device_mapper/vdo/vdo_target.c b/device_mapper/vdo/vdo_target.c
index 0e5abd162..3ebe0592e 100644
--- a/device_mapper/vdo/vdo_target.c
+++ b/device_mapper/vdo/vdo_target.c
@@ -18,14 +18,15 @@
#include "vdo_limits.h"
#include "target.h"
+/* validate vdo target parameters and 'vdo_size' in sectors */
bool dm_vdo_validate_target_params(const struct dm_vdo_target_params *vtp,
uint64_t vdo_size)
{
bool valid = true;
/* 512 or 4096 bytes only ATM */
- if ((vtp->minimum_io_size != 1) &&
- (vtp->minimum_io_size != 8)) {
+ if ((vtp->minimum_io_size != (512 >> SECTOR_SHIFT)) &&
+ (vtp->minimum_io_size != (4096 >> SECTOR_SHIFT))) {
log_error("VDO minimum io size %u is unsupported.",
vtp->minimum_io_size);
valid = false;
@@ -127,10 +128,10 @@ bool dm_vdo_validate_target_params(const struct dm_vdo_target_params *vtp,
valid = false;
}
- if (vdo_size >= (DM_VDO_LOGICAL_SIZE_MAXIMUM_MB * UINT64_C(1024 * 2))) {
+ if (vdo_size > DM_VDO_LOGICAL_SIZE_MAXIMUM) {
log_error("VDO logical size is by " FMTu64 "KiB bigger then limit " FMTu64 "TiB.",
- (vdo_size - (DM_VDO_LOGICAL_SIZE_MAXIMUM_MB * UINT64_C(1024 * 2))) / 2,
- DM_VDO_LOGICAL_SIZE_MAXIMUM_MB / UINT64_C(1024) / UINT64_C(1024));
+ (vdo_size - DM_VDO_LOGICAL_SIZE_MAXIMUM) / 2,
+ DM_VDO_LOGICAL_SIZE_MAXIMUM / (UINT64_C(1024) * 1024 * 1024 * 1024 >> SECTOR_SHIFT));
valid = false;
}