summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2021-02-20 22:22:51 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2021-02-23 14:56:47 +0100
commitac09fa08aa7a10cc3f807830de5d625d499ed1b1 (patch)
treefa6e5c29cdbbcd80e149003cdb18b875ae664edc
parente43b5f1e3c8b445577b9aebea9afecbe0e9ab9c7 (diff)
downloadlvm2-ac09fa08aa7a10cc3f807830de5d625d499ed1b1.tar.gz
lvextend: enable resize of writecached LV
-rw-r--r--lib/metadata/lv_manip.c16
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))) ||