summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2019-04-03 12:56:48 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2019-04-03 13:27:17 +0200
commit7c3de2fd935aee428af8d75e774f5dd23a74c409 (patch)
treec01bf937f899cbaed50d163007f069f033089305
parentbca0a4df9a5c6287bee682b40f4feae6f450729d (diff)
downloadlvm2-7c3de2fd935aee428af8d75e774f5dd23a74c409.tar.gz
thin: introduce estimate_thin_pool_metadata_size
Add function for estimation of thin-pool metadata size for given size of data. Function is using already existing internal API so it can be reused for resize of thin-pool data.
-rw-r--r--lib/metadata/metadata.h1
-rw-r--r--lib/metadata/thin_manip.c12
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h
index f57832516..8e9c18a6c 100644
--- a/lib/metadata/metadata.h
+++ b/lib/metadata/metadata.h
@@ -490,6 +490,7 @@ int pool_below_threshold(const struct lv_segment *pool_seg);
int pool_check_overprovisioning(const struct logical_volume *lv);
int create_pool(struct logical_volume *pool_lv, const struct segment_type *segtype,
struct alloc_handle *ah, uint32_t stripes, uint32_t stripe_size);
+uint64_t estimate_thin_pool_metadata_size(uint32_t data_extents, uint32_t extent_size, uint32_t chunk_size);
/*
* Begin skeleton for external LVM library
diff --git a/lib/metadata/thin_manip.c b/lib/metadata/thin_manip.c
index 79fadc2c1..b9c01ee21 100644
--- a/lib/metadata/thin_manip.c
+++ b/lib/metadata/thin_manip.c
@@ -908,3 +908,15 @@ int validate_thin_pool_chunk_size(struct cmd_context *cmd, uint32_t chunk_size)
return r;
}
+
+uint64_t estimate_thin_pool_metadata_size(uint32_t data_extents, uint32_t extent_size, uint32_t chunk_size)
+{
+ uint64_t sz = _estimate_metadata_size(data_extents, extent_size, chunk_size);
+
+ if (sz > (2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE))
+ sz = 2 * DEFAULT_THIN_POOL_MAX_METADATA_SIZE;
+ else if (sz < (2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE))
+ sz = 2 * DEFAULT_THIN_POOL_MIN_METADATA_SIZE;
+
+ return sz;
+}