From c3d533a0ea20aa26868c55959365a52f3eaf34d1 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Fri, 19 Aug 2022 14:48:01 +0200 Subject: [PATCH 083/115] vdo: extend volume and pool without flush When the volume size is extended, there is no need to flush IO operations (nothing can be targeting new space yet). VDO target is supported as target that can safely work with this condition. Such support is also needed, when extending VDOPOOL size while the pool is reaching its capacity - since this allows to continue working without reaching 'out-of-space' condition due to flushing of all in flight IO. (cherry picked from commit e26c21cb8d5841141dcfdfc77f46da1108a81255) --- WHATS_NEW | 1 + lib/activate/activate.c | 6 +++++- lib/activate/dev_manager.c | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/WHATS_NEW b/WHATS_NEW index 705fbde74..48b1d7d86 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.03.17 - =============================== + Extend VDO and VDOPOOL without flushing and locking fs. Fix lvconvert --test --type vdo-pool execution. Fix vdo_slab_size_mb value for converted VDO volume. diff --git a/lib/activate/activate.c b/lib/activate/activate.c index 727bd2386..76740bb2b 100644 --- a/lib/activate/activate.c +++ b/lib/activate/activate.c @@ -2124,7 +2124,11 @@ static int _lv_suspend(struct cmd_context *cmd, const char *lvid_s, * TODO: Relax this limiting condition further */ if (!flush_required && (lv_is_pvmove(lv) || pvmove_lv || - (!lv_is_mirror(lv) && !lv_is_thin_pool(lv) && !lv_is_thin_volume(lv)))) { + (!lv_is_mirror(lv) && + !lv_is_thin_volume(lv) && + !lv_is_thin_pool(lv) && + !lv_is_vdo(lv) && + !lv_is_vdo_pool(lv)))) { log_debug("Requiring flush for LV %s.", display_lvname(lv)); flush_required = 1; } diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c index 284254d68..9058510e4 100644 --- a/lib/activate/dev_manager.c +++ b/lib/activate/dev_manager.c @@ -3826,6 +3826,8 @@ static int _tree_action(struct dev_manager *dm, const struct logical_volume *lv, * non 'thin pool/volume' and size increase */ else if (!lv_is_thin_volume(lv) && !lv_is_thin_pool(lv) && + !lv_is_vdo(lv) && + !lv_is_vdo_pool(lv) && dm_tree_node_size_changed(root)) dm->flush_required = 1; -- 2.41.0