diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2021-02-20 22:22:51 +0100 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2021-02-23 14:56:47 +0100 |
commit | ac09fa08aa7a10cc3f807830de5d625d499ed1b1 (patch) | |
tree | fa6e5c29cdbbcd80e149003cdb18b875ae664edc | |
parent | e43b5f1e3c8b445577b9aebea9afecbe0e9ab9c7 (diff) | |
download | lvm2-ac09fa08aa7a10cc3f807830de5d625d499ed1b1.tar.gz |
lvextend: enable resize of writecached LV
-rw-r--r-- | lib/metadata/lv_manip.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index 5cad4e07a..9bcab7477 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -1465,7 +1465,8 @@ static struct logical_volume *_get_resizable_layer_lv(struct logical_volume *lv) while (lv_is_cache(lv) || /* _corig */ lv_is_integrity(lv) || lv_is_thin_pool(lv) || /* _tdata */ - lv_is_vdo_pool(lv)) /* _vdata */ + lv_is_vdo_pool(lv) || /* _vdata */ + lv_is_writecache(lv)) /* _worigin */ lv = seg_lv(first_seg(lv), 0); /* component-level down */ return lv; @@ -1479,7 +1480,8 @@ static int _is_layered_lv(struct logical_volume *lv) return (lv_is_cache_origin(lv) || lv_is_integrity_origin(lv) || lv_is_thin_pool_data(lv) || - lv_is_vdo_pool_data(lv)); + lv_is_vdo_pool_data(lv) || + lv_is_writecache_origin(lv)); } /* Find the topmost LV in the stack - usually such LV is visible. */ @@ -5173,11 +5175,6 @@ static int _lvresize_check(struct logical_volume *lv, struct volume_group *vg = lv->vg; struct lv_segment *seg = first_seg(lv); - if (lv_is_writecache(lv)) { - log_error("Resize not yet allowed on LVs with writecache attached."); - return 0; - } - if (lv_is_external_origin(lv)) { /* * Since external-origin can be activated read-only, @@ -5803,6 +5800,11 @@ static int _lvresize_check_type(const struct logical_volume *lv, display_lvname(lv)); return 0; } + if (lv_is_writecache(lv)) { + /* TODO: detect kernel with support for reduction */ + log_error("Reduce not yet allowed on LVs with writecache attached."); + return 0; + } } else if (lp->resize == LV_EXTEND) { if (lv_is_thin_pool_metadata(lv) && (!(seg = find_pool_seg(first_seg(lv))) || |