diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2021-01-29 23:20:18 +0100 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2021-02-01 14:35:53 +0100 |
commit | 72b12033a9ffb45b858d738b956dc39f71782ecd (patch) | |
tree | 003d419f15ac5a35b688a63e0b2993edec994b15 | |
parent | 586bac0b10d3c1757708129433e8401a4797a7ee (diff) | |
download | lvm2-72b12033a9ffb45b858d738b956dc39f71782ecd.tar.gz |
pool: limit pmspare to 16GiB
There is not much point to let allocate more then this size
even when i.e. converted LV is bigger then 16GiB (%extent_size)
ATM neither thin-pool nor cache-pool supports bigger metadata.
-rw-r--r-- | lib/metadata/pool_manip.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/metadata/pool_manip.c b/lib/metadata/pool_manip.c index ead302155..54b824a5e 100644 --- a/lib/metadata/pool_manip.c +++ b/lib/metadata/pool_manip.c @@ -683,6 +683,8 @@ static struct logical_volume *_alloc_pool_metadata_spare(struct volume_group *vg int handle_pool_metadata_spare(struct volume_group *vg, uint32_t extents, struct dm_list *pvh, int poolmetadataspare) { + /* Max usable size of any spare volume is currently 16GiB rouned to extent size */ + const uint64_t MAX_SIZE = (UINT64_C(2 * 16) * 1024 * 1024 + vg->extent_size - 1) / vg->extent_size; struct logical_volume *lv = vg->pool_metadata_spare_lv; uint32_t seg_mirrors; struct lv_segment *seg; @@ -692,8 +694,11 @@ int handle_pool_metadata_spare(struct volume_group *vg, uint32_t extents, /* Find maximal size of metadata LV */ dm_list_iterate_items(lvl, &vg->lvs) if (lv_is_pool_metadata(lvl->lv) && - (lvl->lv->le_count > extents)) + (lvl->lv->le_count > extents)) { extents = lvl->lv->le_count; + if (extents >= MAX_SIZE) + break; + } if (!poolmetadataspare) { /* TODO: Not showing when lvm.conf would define 'n' ? */ @@ -704,6 +709,9 @@ int handle_pool_metadata_spare(struct volume_group *vg, uint32_t extents, return 1; } + if (extents > MAX_SIZE) + extents = MAX_SIZE; + if (!lv) { if (!_alloc_pool_metadata_spare(vg, extents, pvh)) return_0; |