stable-2.02 - lvchange: snapshot thick origin permission rw/r
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=02978e1f0135b757896...
Commit: 02978e1f0135b75789669ee4042855b08f57f8b4
Parent: 7bb472bc30c88fc56ff7007d540777a30b144185
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 00:38:37 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 12:14:54 2021 +0100
lvchange: snapshot thick origin permission rw/r
User is allowed to change permission for thick origin.
FIXME: it's not quite clear why few others are prohibited to change.
---
tools/command-lines.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/command-lines.in b/tools/command-lines.in
index c7fe577ab..fff3f16f9 100644
--- a/tools/command-lines.in
+++ b/tools/command-lines.in
@@ -249,7 +249,7 @@ RULE: --writebehind --writemostly and LV_raid1
RULE: --cachemode --cachepolicy --cachesettings and LV_cache LV_cachepool
RULE: --errorwhenfull --discards --zero and LV_thinpool
RULE: --permission not lv_is_external_origin lv_is_raid_metadata lv_is_raid_image LV_thinpool
-RULE: --alloc --contiguous --metadataprofile --permission --persistent --profile --readahead not lv_is_thick_origin
+RULE: --alloc --contiguous --metadataprofile --persistent --profile --readahead not lv_is_thick_origin
RULE: --alloc --discards --zero --cachemode --cachepolicy --cachesettings not lv_is_partial
# It's unfortunate that activate needs to be optionally allowed here,
3 years, 1 month
stable-2.02 - lvconvert: read-only origin cannot be merged
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=7bb472bc30c88fc56ff...
Commit: 7bb472bc30c88fc56ff7007d540777a30b144185
Parent: 86cd2c630944f0db3429f05cdee967b273f3dff7
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 00:40:21 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 12:14:54 2021 +0100
lvconvert: read-only origin cannot be merged
When user sets snapshost origin as read-only,
lvm will not allow simple merge and user needs to
flip permission,
---
tools/lvconvert.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 4d2b0365d..5826955d0 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -2049,15 +2049,21 @@ static int _lvconvert_merge_old_snapshot(struct cmd_context *cmd,
log_error("Cannot merge snapshot %s into the origin %s "
"with merging snapshot %s.",
display_lvname(lv), display_lvname(origin),
- display_lvname(find_snapshot(origin)->lv));
+ display_lvname(snap_seg->lv));
return 0;
}
- if (lv_is_external_origin(origin_from_cow(lv))) {
+ if (lv_is_external_origin(origin)) {
log_error("Cannot merge snapshot %s into "
"the read-only external origin %s.",
- display_lvname(lv),
- display_lvname(origin_from_cow(lv)));
+ display_lvname(lv), display_lvname(origin));
+ return 0;
+ }
+
+ if (!(origin->status & LVM_WRITE)) {
+ log_error("Cannot merge snapshot %s into "
+ "the read-only origin %s. (Use lvchange -p rw).",
+ display_lvname(lv), display_lvname(origin));
return 0;
}
3 years, 1 month
stable-2.02 - tests: avoid killing test machines with kernel bug
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=86cd2c630944f0db342...
Commit: 86cd2c630944f0db3429f05cdee967b273f3dff7
Parent: 8bc7bb2dbf7126d9e6ba92d4bc8ccbd6dc026965
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Feb 1 15:02:38 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 12:09:16 2021 +0100
tests: avoid killing test machines with kernel bug
Bug 1916891 still applies:
https://bugzilla.redhat.com/show_bug.cgi?id=1916891
---
test/shell/lvconvert-raid-reshape-stripes-load-reload.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/shell/lvconvert-raid-reshape-stripes-load-reload.sh b/test/shell/lvconvert-raid-reshape-stripes-load-reload.sh
index b79561fbb..3920da1a5 100644
--- a/test/shell/lvconvert-raid-reshape-stripes-load-reload.sh
+++ b/test/shell/lvconvert-raid-reshape-stripes-load-reload.sh
@@ -22,7 +22,7 @@ which mkfs.ext4 || skip
aux have_raid 1 13 2 || skip
case "$(uname -r)" in
- 5.[89]*|3.10.0-862*) die "Cannot run this test on unfixed kernel." ;;
+ 5.[891]*|3.10.0-862*) die "Cannot run this test on unfixed kernel." ;;
esac
mount_dir="mnt"
3 years, 1 month
stable-2.02 - tests: check for raid target support
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=8bc7bb2dbf7126d9e6b...
Commit: 8bc7bb2dbf7126d9e6ba92d4bc8ccbd6dc026965
Parent: a157c9e1a145819276586b39565b8c41019932df
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Feb 1 15:01:04 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 12:09:16 2021 +0100
tests: check for raid target support
---
test/shell/lvdisplay-raid.sh | 2 ++
1 file changed, 2 insertions(+)
diff --git a/test/shell/lvdisplay-raid.sh b/test/shell/lvdisplay-raid.sh
index 18ea9ae1e..95205ba81 100644
--- a/test/shell/lvdisplay-raid.sh
+++ b/test/shell/lvdisplay-raid.sh
@@ -18,6 +18,8 @@ SKIP_WITH_LVMPOLLD=1
. lib/inittest
+aux have_raid 1 7 0 || skip
+
aux prepare_vg 6
get_devs
3 years, 1 month
stable-2.02 - libdm: simplify line emitter checking
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=a157c9e1a1458192765...
Commit: a157c9e1a145819276586b39565b8c41019932df
Parent: 0914ce76bdca540f220800f7a00842c73d0840b8
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 10 15:10:28 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 12:09:16 2021 +0100
libdm: simplify line emitter checking
---
libdm/libdm-deptree.c | 20 ++++++++------------
libdm/libdm-report.c | 2 +-
2 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
index 4f71a7008..ba1ed1991 100644
--- a/libdm/libdm-deptree.c
+++ b/libdm/libdm-deptree.c
@@ -2231,7 +2231,7 @@ static int _mirror_emit_segment_line(struct dm_task *dmt, struct load_segment *s
EMIT_PARAMS(pos, " %u ", seg->mirror_area_count);
- if (_emit_areas_line(dmt, seg, params, paramsize, &pos) <= 0)
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
return_0;
if (handle_errors)
@@ -2433,7 +2433,7 @@ static int _raid_emit_segment_line(struct dm_task *dmt, uint32_t major,
/* Print number of metadata/data device pairs */
EMIT_PARAMS(pos, " %u", area_count);
- if (_emit_areas_line(dmt, seg, params, paramsize, &pos) <= 0)
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
return_0;
return 1;
@@ -2561,7 +2561,6 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
size_t paramsize)
{
int pos = 0;
- int r;
int target_type_is_raid = 0;
char originbuf[DM_FORMAT_DEV_BUFSIZE], cowbuf[DM_FORMAT_DEV_BUFSIZE];
@@ -2572,8 +2571,7 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
break;
case SEG_MIRRORED:
/* Mirrors are pretty complicated - now in separate function */
- r = _mirror_emit_segment_line(dmt, seg, params, paramsize);
- if (!r)
+ if (!_mirror_emit_segment_line(dmt, seg, params, paramsize))
return_0;
break;
case SEG_SNAPSHOT:
@@ -2619,9 +2617,8 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
case SEG_RAID6_LA_6:
case SEG_RAID6_RA_6:
target_type_is_raid = 1;
- r = _raid_emit_segment_line(dmt, major, minor, seg, seg_start,
- params, paramsize);
- if (!r)
+ if (!_raid_emit_segment_line(dmt, major, minor, seg, seg_start,
+ params, paramsize))
return_0;
break;
@@ -2652,10 +2649,9 @@ static int _emit_segment_line(struct dm_task *dmt, uint32_t major,
case SEG_CRYPT:
case SEG_LINEAR:
case SEG_STRIPED:
- if ((r = _emit_areas_line(dmt, seg, params, paramsize, &pos)) <= 0) {
- stack;
- return r;
- }
+ if (!_emit_areas_line(dmt, seg, params, paramsize, &pos))
+ return_0;
+
if (!params[0]) {
log_error("No parameters supplied for %s target "
"%u:%u.", _dm_segtypes[seg->type].target,
diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c
index b58e3fe5a..04df20120 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -491,7 +491,7 @@ static int _report_field_string_list(struct dm_report *rh,
delimiter = ",";
delimiter_len = strlen(delimiter);
- i = pos = len = 0;
+ i = pos = 0;
dm_list_iterate_items(sl, data) {
arr[i].str = sl->str;
if (!sort) {
3 years, 1 month
stable-2.02 - tests: readonly snapshot thick origin can't be merged
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=0914ce76bdca540f220...
Commit: 0914ce76bdca540f220800f7a00842c73d0840b8
Parent: b6dda4ade2bbf3ec98e10860213f345d15a28971
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 17 11:38:28 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 11:56:26 2021 +0100
tests: readonly snapshot thick origin can't be merged
When user sets snapshot thick origin as read-only - lvconvert --merge refuses
to merge until user swiches origin to 'read-write'.
---
test/shell/snapshot-merge.sh | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/test/shell/snapshot-merge.sh b/test/shell/snapshot-merge.sh
index a50ffdcd8..ff9de96f8 100644
--- a/test/shell/snapshot-merge.sh
+++ b/test/shell/snapshot-merge.sh
@@ -55,6 +55,12 @@ setup_merge_ $vg $lv1
# make sure lvconvert --merge requires explicit LV listing
not lvconvert --merge
+# check read-only origin is protected from being merge
+lvchange -pr $vg/$lv1
+not lvconvert --merge "$vg/$(snap_lv_name_ "$lv1")" |& tee out
+grep "read-only origin" out
+lvchange -prw $vg/$lv1
+
# check exclusive lock is preserved after merge
check lv_field "$vg/$lv1" lv_active_exclusively "active exclusively"
lvconvert --merge "$vg/$(snap_lv_name_ "$lv1")"
3 years, 1 month
stable-2.02 - lvchange: remove unneeded call
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=b6dda4ade2bbf3ec98e...
Commit: b6dda4ade2bbf3ec98e10860213f345d15a28971
Parent: 5acbd709c18eab8ae455d0002892e756ed18fa13
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sun Feb 14 17:27:45 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 11:56:13 2021 +0100
lvchange: remove unneeded call
Sync is already happining in activate_and_wipe_lvlist().
---
tools/lvchange.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/tools/lvchange.c b/tools/lvchange.c
index 7d0ec8ffd..e9f0f7c9a 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -436,13 +436,6 @@ static int _lvchange_resync(struct cmd_context *cmd, struct logical_volume *lv)
if (!activate_and_wipe_lvlist(&device_list, 0))
return 0;
- /* Wait until devices are away */
- if (!sync_local_dev_names(lv->vg->cmd)) {
- log_error("Failed to sync local devices after updating %s.",
- display_lvname(lv));
- return 0;
- }
-
/* Put metadata sub-LVs back in place */
if (!_attach_metadata_devices(seg, &device_list)) {
log_error("Failed to reattach %s device after clearing.",
3 years, 1 month
stable-2.02 - lv_manip: avoid removing LV when converting
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=5acbd709c18eab8ae45...
Commit: 5acbd709c18eab8ae455d0002892e756ed18fa13
Parent: 1f6c287aaca04aa1a791c341cbff7b6cbff9a29b
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Wed Feb 17 11:09:41 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 11:56:13 2021 +0100
lv_manip: avoid removing LV when converting
In some cases we use 'creation' also during conversion.
Here it can be actually unwanted side effect we may remove
not just newly created layers - but also original converted LV.
So until we make clear how to properly revert from some errors
in middle of conversion, disable removal for any 'lvconvert' commands.
---
lib/metadata/lv_manip.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index e9ce8cd28..8dd3e7140 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -8334,7 +8334,9 @@ revert_new_lv:
lockd_free_lv(vg->cmd, vg, lv->name, &lv->lvid.id[1], lv->lock_args);
/* FIXME Better to revert to backup of metadata? */
- if (!lv_remove(lv) || !vg_write(vg) || !vg_commit(vg))
+ /* Do not remove anything for create during conversion operation */
+ if (!strncmp(cmd->name, "lvconvert", 9) ||
+ !lv_remove(lv) || !vg_write(vg) || !vg_commit(vg))
log_error("Manual intervention may be required to remove "
"abandoned LV(s) before retrying.");
else
3 years, 1 month
stable-2.02 - tests: lvdisplay does not crash for merged thin
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=1f6c287aaca04aa1a79...
Commit: 1f6c287aaca04aa1a791c341cbff7b6cbff9a29b
Parent: 7243e32ce56c2f33fb7cfd735dc6abf27f868c00
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sat Feb 13 23:10:15 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 11:56:13 2021 +0100
tests: lvdisplay does not crash for merged thin
---
test/shell/thin-merge.sh | 3 +++
1 file changed, 3 insertions(+)
diff --git a/test/shell/thin-merge.sh b/test/shell/thin-merge.sh
index c0a022c57..34f5c7428 100644
--- a/test/shell/thin-merge.sh
+++ b/test/shell/thin-merge.sh
@@ -64,6 +64,9 @@ grep "Merging of thin snapshot $vg/snap will occur on next activation of $vg/${l
not lvconvert --merge $vg/snap1 &>out
grep "Cannot merge snapshot" out
+# Check lvdisplay is not crashing while merge needs to wait
+lvdisplay -a $vg
+
umount mnt
# Merge cannot happen
3 years, 1 month
stable-2.02 - lvdisplay: fix show of merged thin snapshot
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=7243e32ce56c2f33fb7...
Commit: 7243e32ce56c2f33fb7cfd735dc6abf27f868c00
Parent: 9344a04b3794b154b06fa44da62d088f0b057486
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Fri Feb 12 15:11:48 2021 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Wed Feb 17 11:56:12 2021 +0100
lvdisplay: fix show of merged thin snapshot
When lvdisplay was executed and thin snaphost has be merged to
thin origin and the operation has been postponed till devices
are closed, command crashed.
Check LV is COW before trying to check snapshot percentage.
---
lib/display/display.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/display/display.c b/lib/display/display.c
index cd911feea..f6a212c7b 100644
--- a/lib/display/display.c
+++ b/lib/display/display.c
@@ -474,7 +474,7 @@ int lvdisplay_full(struct cmd_context *cmd,
snap_active ? "active" : "INACTIVE");
}
snap_seg = NULL;
- } else if ((snap_seg = find_snapshot(lv))) {
+ } else if (lv_is_cow(lv) && (snap_seg = find_snapshot(lv))) {
if (inkernel &&
(snap_active = lv_snapshot_percent(snap_seg->cow,
&snap_percent)))
3 years, 1 month