diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2019-04-03 12:56:48 +0200 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2019-04-03 13:27:17 +0200 |
commit | 7c3de2fd935aee428af8d75e774f5dd23a74c409 (patch) | |
tree | c01bf937f899cbaed50d163007f069f033089305 | |
parent | bca0a4df9a5c6287bee682b40f4feae6f450729d (diff) | |
download | lvm2-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.h | 1 | ||||
-rw-r--r-- | lib/metadata/thin_manip.c | 12 |
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; +} |