master - test: clean-up failing test case and document 'should' cases
by Jonathan Brassow
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=bc29785d098ea0d663a...
Commit: bc29785d098ea0d663a07705e07eac27522c164d
Parent: 248144d06654a509249938c44bb68ece4a71e6f1
Author: Jonathan Brassow <jbrassow(a)redhat.com>
AuthorDate: Mon Oct 30 21:58:38 2017 -0500
Committer: Jonathan Brassow <jbrassow(a)redhat.com>
CommitterDate: Mon Oct 30 21:58:38 2017 -0500
test: clean-up failing test case and document 'should' cases
There are two known bugs in the lvconvert-raid-status-validation.sh
test. The first one I consider to be more of an annoyance (1507719).
The second one I consider to be more serious (1507729).
RHBZ 1507719 simply documents the fact that the three RAID status
fields may not always be coherent due to the way they are set and
unset when the MD thread is shutting down and starting up. For
example, the sync ratio may be 100% but the sync action may not
yet have switched to "idle" and the health characters may not yet
all be 'A's (i.e. the devices set to InSync).
RHBZ 1507729 is more serious. The sync ratio can be 100% for a
short period of time after upconverting linear -> RAID1. It is
reset to 0 once the MD sync thread gets to work on it. It does
this because, technically, the array /is/ in-sync if the new
devices are excluded - i.e. the data is 100% available and
consistent. I'm not sure what to do about this problem, but we'd
much rather not have this state that looks exactly like the
end of the process when the sync ratio is 100% because the
"recover" process finished, but the sync action and health
characters haven't been updated yet. Put simply, the problem
is that we can't tell if a sync is starting or finished based
on the status output.
---
test/shell/lvconvert-raid-status-validation.sh | 39 +++++++++++++++++------
1 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/test/shell/lvconvert-raid-status-validation.sh b/test/shell/lvconvert-raid-status-validation.sh
index b4140a9..9ffaaf3 100644
--- a/test/shell/lvconvert-raid-status-validation.sh
+++ b/test/shell/lvconvert-raid-status-validation.sh
@@ -24,7 +24,11 @@ export LVM_TEST_LVMETAD_DEBUG_OPTS=${LVM_TEST_LVMETAD_DEBUG_OPTS-}
# check for version 1.9.0
# - it is the point at which linear->raid1 uses "recover"
-aux have_raid 1 9 0 || skip
+# check for version 1.13.0 instead
+# - it is the point at which a finishing "recover" doesn't print all 'a's
+aux have_raid 1 13 0 || skip
+
+
aux prepare_pvs 9
get_devs
@@ -39,7 +43,16 @@ lvcreate -aey -l 2 -n $lv1 $vg "$dev1"
lvconvert --type raid1 -y -m 1 $vg/$lv1 "$dev2"
while ! check in_sync $vg $lv1; do
a=( $(dmsetup status $vg-$lv1) ) || die "Unable to get status of $vg/$lv1"
- [ "${a[5]}" != "aa" ]
+ b=( $(echo "${a[6]}" | sed s:/:' ':) )
+ if [ "${b[0]}" -ne "${b[1]}" ]; then
+ # First, 'check in_sync' should only need to check the ratio
+ # If we are here, it is probably doing more than that.
+ # If not in-sync, then we should only ever see "Aa"
+ [ "${a[5]}" == "Aa" ]
+ else
+ [ "${a[5]}" != "aa" ]
+ should [ "${a[5]}" == "AA" ] # RHBZ 1507719
+ fi
sleep .1
done
aux enable_dev "$dev2"
@@ -53,7 +66,7 @@ lvcreate -aey -l 2 -n $lv1 $vg "$dev1"
lvconvert --type raid1 -y -m 1 $vg/$lv1 "$dev2"
a=( $(dmsetup status $vg-$lv1) ) || die "Unable to get status of $vg/$lv1"
b=( $(echo "${a[6]}" | sed s:/:' ':) )
-[ "${b[0]}" -ne "${b[1]}" ]
+should [ "${b[0]}" -ne "${b[1]}" ] # RHBZ 1507729
aux enable_dev "$dev2"
lvremove -ff $vg
@@ -76,8 +89,8 @@ while true; do
# Before starting sync thread: "Aa X/X recover"
# from the valid case,
# Just finished sync thread: "Aa X/X recover"
- [ "${a[5]}" = "AA" ]
- [ "${a[7]}" = "idle" ]
+ should [ "${a[5]}" = "AA" ] # RHBZ 1507719
+ should [ "${a[7]}" = "idle" ] # RHBZ 1507719
break
fi
sleep .1
@@ -90,6 +103,7 @@ lvremove -ff $vg
###########################################
aux delay_dev "$dev3" 0 50
lvcreate --type raid1 -m 1 -aey -l 2 -n $lv1 $vg "$dev1" "$dev2"
+aux wait_for_sync $vg $lv1
lvconvert -y -m +1 $vg/$lv1 "$dev3"
while true; do
a=( $(dmsetup status $vg-$lv1) ) || die "Unable to get status of $vg/$lv1"
@@ -104,8 +118,8 @@ while true; do
# Before starting sync thread: "AAa X/X recover"
# from the valid case,
# Just finished sync thread: "AAa X/X recover"
- [ "${a[5]}" = "AAA" ]
- [ "${a[7]}" = "idle" ]
+ should [ "${a[5]}" = "AAA" ] # RHBZ 1507719
+ should [ "${a[7]}" = "idle" ] # RHBZ 1507719
break
fi
sleep .1
@@ -125,10 +139,15 @@ while true; do
# If the sync operation ("resync" in this case) is not
# finished, then it better be as follows:
[ "${a[5]}" = "aa" ]
- [ "${a[7]}" = "resync" ]
+
+ # Should be in "resync", but it is possible things are only
+ # just getting going - in which case, it could be "idle"
+ # with 0% sync ratio
+ [ "${a[7]}" = "resync" ] || \
+ [[ "${a[7]}" = "idle" && "${b[0]}" -eq "0" ]]
else
- [ "${a[5]}" = "AA" ]
- [ "${a[7]}" = "idle" ]
+ should [ "${a[5]}" = "AA" ] # RHBZ 1507719
+ should [ "${a[7]}" = "idle" ] # RHBZ 1507719
break
fi
sleep .1
5 years, 11 months
master - liblvm: Fix segfault in lvm_pv_remove.
by Alasdair Kergon
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=248144d06654a509249...
Commit: 248144d06654a509249938c44bb68ece4a71e6f1
Parent: 7e3be7d1ba4c6ae56dd80ec7ae098e9e451de775
Author: Alasdair G Kergon <agk(a)redhat.com>
AuthorDate: Mon Oct 30 22:03:35 2017 +0000
Committer: Alasdair G Kergon <agk(a)redhat.com>
CommitterDate: Mon Oct 30 22:03:35 2017 +0000
liblvm: Fix segfault in lvm_pv_remove.
Since 4fa5add6b1bd4d7f7313f2950021a09e4130ad08 ("pvcreate: Wipe cached
bootloaderarea when wiping label.") label_remove is responsible
for the lvmcache_del. (toollib and liblvm need fixing to share
the code.)
---
WHATS_NEW | 1 +
lib/metadata/metadata-liblvm.c | 3 ---
2 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 0ee52ba..ab4f656 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.176 -
===================================
+ liblvm: Fix segfault in lvm_pv_remove. (2.02.173)
Do not allow storing VG metadata with LV without any segment.
Fix printed message when thin snapshot was already merged.
Remove created spare LV when creation of thin-pool failed.
diff --git a/lib/metadata/metadata-liblvm.c b/lib/metadata/metadata-liblvm.c
index f37008d..4202950 100644
--- a/lib/metadata/metadata-liblvm.c
+++ b/lib/metadata/metadata-liblvm.c
@@ -602,9 +602,6 @@ static int _pvremove_single(struct cmd_context *cmd, const char *pv_name,
goto out;
}
- if (info)
- lvmcache_del(info);
-
if (!lvmetad_pv_gone_by_dev(dev))
goto_out;
5 years, 11 months
master - tests: revert commit change
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=7e3be7d1ba4c6ae56dd...
Commit: 7e3be7d1ba4c6ae56dd80ec7ae098e9e451de775
Parent: 2b6391538c53e19a6fccdb4e3638ba9dd221819a
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 30 17:26:42 2017 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 30 17:27:29 2017 +0100
tests: revert commit change
Commit 04244107732feb5274bc24efed428a0d4ddae8f6 by mistake took also
this unwanted local modification of test - revert it.
---
test/shell/metadata-balance.sh | 15 +++------------
1 files changed, 3 insertions(+), 12 deletions(-)
diff --git a/test/shell/metadata-balance.sh b/test/shell/metadata-balance.sh
index 1f22b24..fe94aed 100644
--- a/test/shell/metadata-balance.sh
+++ b/test/shell/metadata-balance.sh
@@ -189,8 +189,8 @@ done
echo Test special situations, vgsplit, vgmerge, etc
for mdacp in 1 2; do
pvcreate --metadatacopies $mdacp "$dev1" "$dev2" "$dev3" "$dev4" "$dev5"
- vgcreate -cy --vgmetadatacopies 2 $vg1 "$dev1" "$dev2" "$dev3"
- vgcreate -cy --vgmetadatacopies $(( mdacp * 1 )) $vg2 "$dev4" "$dev5"
+ vgcreate --vgmetadatacopies 2 $vg1 "$dev1" "$dev2" "$dev3"
+ vgcreate --vgmetadatacopies $(( mdacp * 1 )) $vg2 "$dev4" "$dev5"
echo vgsplit/vgmerge preserves value of metadata copies
check vg_field $vg1 vg_mda_copies 2
check vg_field $vg2 vg_mda_copies $(( mdacp * 1 ))
@@ -200,16 +200,7 @@ for mdacp in 1 2; do
check vg_field $vg1 vg_mda_copies 2
check vg_field $vg1 vg_mda_count $(( mdacp * 5 ))
echo vgsplit into new vg sets proper value of vgmetadatacopies
-# echo y | pvchange -y --metadataignore n "$dev3" || true
-# echo y | pvchange -y --metadataignore y "$dev4" || true
-# echo y | pvchange -y --metadataignore n "$dev5" || true
-# echo y | pvchange -y --metadataignore y "$dev1" || true
-# echo y | pvchange -y --metadataignore y "$dev2" || true
- pvs -o+pv_mda_size,pv_mda_count,pv_mda_used_count,pv_in_use
- pvdisplay
-
- #LVM_GDB=1
- vgsplit --vgmetadatacopies $(( mdacp * 2 )) $vg1 $vg2 "$dev1" "$dev2"
+ vgsplit --vgmetadatacopies $(( mdacp * 2 )) $vg1 $vg2 "$dev1" "$dev2"
check vg_field $vg2 vg_mda_copies $(( mdacp * 2 ))
echo vgchange fails if given both vgmetadatacopies and metadatacopies
not vgchange --vgmetadatacopies 5 --metadatacopies 7 $vg2
5 years, 11 months
master - raid: setup LV size earlier
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=2b6391538c53e19a6fc...
Commit: 2b6391538c53e19a6fccdb4e3638ba9dd221819a
Parent: 3efd1f9c6e1e63c70d12cf3bc2f8eadcba47d7e5
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 30 17:23:56 2017 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 30 17:23:56 2017 +0100
raid: setup LV size earlier
New validation code which does require to not store LV with no size
(no segments) revealed this size setup code needs to happen
earlier.
---
lib/metadata/lv_manip.c | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index a3634ac..f0e492b 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -4028,6 +4028,15 @@ static int _lv_extend_layered_lv(struct alloc_handle *ah,
fa += stripes;
}
+ seg->len += extents;
+ if (seg_is_raid(seg))
+ seg->area_len = seg->len;
+ else
+ seg->area_len += extents / area_multiple;
+
+ if (!_setup_lv_size(lv, lv->le_count + extents))
+ return_0;
+
if (clear_metadata) {
/*
* We must clear the metadata areas upon creation.
@@ -4092,15 +4101,6 @@ static int _lv_extend_layered_lv(struct alloc_handle *ah,
lv_set_hidden(seg_metalv(seg, s));
}
- seg->len += extents;
- if (seg_is_raid(seg))
- seg->area_len = seg->len;
- else
- seg->area_len += extents / area_multiple;
-
- if (!_setup_lv_size(lv, lv->le_count + extents))
- return_0;
-
return 1;
}
5 years, 11 months
master - lvreduce: check LV has segment
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=83d5db056ba646ae691...
Commit: 83d5db056ba646ae69135b5f0114d1cc19b26044
Parent: 04244107732feb5274bc24efed428a0d4ddae8f6
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 30 14:35:31 2017 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 30 14:39:16 2017 +0100
lvreduce: check LV has segment
Before accessing content make sure LV has segment.
This can be used in case code removes LV without segments
(i.e. on some error path)
---
lib/metadata/lv_manip.c | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 01ba564..a3634ac 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -1315,13 +1315,19 @@ static int _lv_segment_reduce(struct lv_segment *seg, uint32_t reduction)
*/
static int _lv_reduce(struct logical_volume *lv, uint32_t extents, int delete)
{
- struct lv_segment *seg = first_seg(lv);;
+ struct lv_segment *seg = NULL;
uint32_t count = extents;
uint32_t reduction;
struct logical_volume *pool_lv;
struct logical_volume *external_lv = NULL;
- int is_raid10 = seg_is_any_raid10(seg) && seg->reshape_len;
- uint32_t data_copies = seg->data_copies;
+ int is_raid10 = 0;
+ uint32_t data_copies = 0;
+
+ if (!dm_list_empty(&lv->segments)) {
+ seg = first_seg(lv);
+ is_raid10 = seg_is_any_raid10(seg) && seg->reshape_len;
+ data_copies = seg->data_copies;
+ }
if (lv_is_merging_origin(lv)) {
log_debug_metadata("Dropping snapshot merge of %s to removed origin %s.",
@@ -7660,8 +7666,10 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
lp->mirrors,
segtype_is_pool(create_segtype) ? lp->pool_metadata_extents : lp->region_size,
segtype_is_thin_volume(create_segtype) ? lp->virtual_extents : lp->extents,
- lp->pvh, lp->alloc, lp->approx_alloc))
+ lp->pvh, lp->alloc, lp->approx_alloc)) {
+ unlink_lv_from_vg(lv); /* Keep VG consistent and remove LV without any segment */
return_NULL;
+ }
/* rhbz1269533: allow for 100%FREE allocation to work with "mirror" and a disk log */
if (segtype_is_mirror(create_segtype) &&
5 years, 11 months
master - tests: load reiserfs
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=3efd1f9c6e1e63c70d1...
Commit: 3efd1f9c6e1e63c70d12cf3bc2f8eadcba47d7e5
Parent: 83d5db056ba646ae69135b5f0114d1cc19b26044
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 30 13:28:08 2017 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 30 14:39:16 2017 +0100
tests: load reiserfs
Preload reiserfs module for the case, fs is present/compiled for a
kernel but it's not present in memory.
Size reducition needs --yes confirmation to preceed for reiserfs.
---
test/shell/fsadm-crypt.sh | 5 +++--
test/shell/fsadm.sh | 1 +
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/test/shell/fsadm-crypt.sh b/test/shell/fsadm-crypt.sh
index 5104feb..634fef3 100644
--- a/test/shell/fsadm-crypt.sh
+++ b/test/shell/fsadm-crypt.sh
@@ -55,6 +55,7 @@ grep xfs /proc/filesystems || check_xfs=${check_xfs:-no_xfs}
which mkfs.reiserfs || check_reiserfs=${check_reiserfs:-mkfs.reiserfs}
which reiserfsck || check_reiserfs=${check_reiserfs:-reiserfsck}
+modprobe reiserfs || true
grep reiserfs /proc/filesystems || check_reiserfs=${check_reiserfs:-no_reiserfs}
vg_lv=$vg/$lv1
@@ -295,8 +296,8 @@ test_reiserfs_resize() {
test_reiserfs_small_shrink() {
mkfs.reiserfs -s 513 -f "$3"
- lvresize -L-1 -r $1
- lvresize -L-1 -r $1
+ lvresize -y -L-1 -r $1
+ lvresize -y -L-1 -r $1
fscheck_reiserfs "$3"
}
diff --git a/test/shell/fsadm.sh b/test/shell/fsadm.sh
index 35c3443..62eb7d3 100644
--- a/test/shell/fsadm.sh
+++ b/test/shell/fsadm.sh
@@ -36,6 +36,7 @@ grep xfs /proc/filesystems || check_xfs=${check_xfs:-no_xfs}
which mkfs.reiserfs || check_reiserfs=${check_reiserfs:-mkfs.reiserfs}
which reiserfsck || check_reiserfs=${check_reiserfs:-reiserfsck}
+modprobe reiserfs || true
grep reiserfs /proc/filesystems || check_reiserfs=${check_reiserfs:-no_reiserfs}
vg_lv=$vg/$lv1
5 years, 11 months
master - validation: capture store of LV without segment
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=04244107732feb5274b...
Commit: 04244107732feb5274bc24efed428a0d4ddae8f6
Parent: e9206fb93dcbc7c07ee7f6c4438f1dbd91c4d73a
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 30 14:34:30 2017 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 30 14:39:16 2017 +0100
validation: capture store of LV without segment
---
WHATS_NEW | 1 +
lib/metadata/merge.c | 5 +++++
test/shell/metadata-balance.sh | 15 ++++++++++++---
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index e8e6bb0..0ee52ba 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.176 -
===================================
+ Do not allow storing VG metadata with LV without any segment.
Fix printed message when thin snapshot was already merged.
Remove created spare LV when creation of thin-pool failed.
Avoid reading ignored metadata when mda gets used again.
diff --git a/lib/metadata/merge.c b/lib/metadata/merge.c
index 7de0c10..d5024cf 100644
--- a/lib/metadata/merge.c
+++ b/lib/metadata/merge.c
@@ -628,6 +628,11 @@ int check_lv_segments(struct logical_volume *lv, int complete_vg)
inc_error_count;
}
+ if (!le) {
+ log_error("LV %s: has no segment.", lv->name);
+ inc_error_count;
+ }
+
dm_list_iterate_items(sl, &lv->segs_using_this_lv) {
seg = sl->seg;
seg_found = 0;
diff --git a/test/shell/metadata-balance.sh b/test/shell/metadata-balance.sh
index fe94aed..1f22b24 100644
--- a/test/shell/metadata-balance.sh
+++ b/test/shell/metadata-balance.sh
@@ -189,8 +189,8 @@ done
echo Test special situations, vgsplit, vgmerge, etc
for mdacp in 1 2; do
pvcreate --metadatacopies $mdacp "$dev1" "$dev2" "$dev3" "$dev4" "$dev5"
- vgcreate --vgmetadatacopies 2 $vg1 "$dev1" "$dev2" "$dev3"
- vgcreate --vgmetadatacopies $(( mdacp * 1 )) $vg2 "$dev4" "$dev5"
+ vgcreate -cy --vgmetadatacopies 2 $vg1 "$dev1" "$dev2" "$dev3"
+ vgcreate -cy --vgmetadatacopies $(( mdacp * 1 )) $vg2 "$dev4" "$dev5"
echo vgsplit/vgmerge preserves value of metadata copies
check vg_field $vg1 vg_mda_copies 2
check vg_field $vg2 vg_mda_copies $(( mdacp * 1 ))
@@ -200,7 +200,16 @@ for mdacp in 1 2; do
check vg_field $vg1 vg_mda_copies 2
check vg_field $vg1 vg_mda_count $(( mdacp * 5 ))
echo vgsplit into new vg sets proper value of vgmetadatacopies
- vgsplit --vgmetadatacopies $(( mdacp * 2 )) $vg1 $vg2 "$dev1" "$dev2"
+# echo y | pvchange -y --metadataignore n "$dev3" || true
+# echo y | pvchange -y --metadataignore y "$dev4" || true
+# echo y | pvchange -y --metadataignore n "$dev5" || true
+# echo y | pvchange -y --metadataignore y "$dev1" || true
+# echo y | pvchange -y --metadataignore y "$dev2" || true
+ pvs -o+pv_mda_size,pv_mda_count,pv_mda_used_count,pv_in_use
+ pvdisplay
+
+ #LVM_GDB=1
+ vgsplit --vgmetadatacopies $(( mdacp * 2 )) $vg1 $vg2 "$dev1" "$dev2"
check vg_field $vg2 vg_mda_copies $(( mdacp * 2 ))
echo vgchange fails if given both vgmetadatacopies and metadatacopies
not vgchange --vgmetadatacopies 5 --metadatacopies 7 $vg2
5 years, 11 months
master - devcache: track more udev errors
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=e9206fb93dcbc7c07ee...
Commit: e9206fb93dcbc7c07ee7f6c4438f1dbd91c4d73a
Parent: af21263cb39bb850d5bf437fe0371e173b8c0246
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 30 13:16:50 2017 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 30 13:16:50 2017 +0100
devcache: track more udev errors
Add a bit more details for failing udev function.
---
lib/device/dev-cache.c | 25 +++++++++++++++----------
1 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/lib/device/dev-cache.c b/lib/device/dev-cache.c
index 83c2b12..dd12da1 100644
--- a/lib/device/dev-cache.c
+++ b/lib/device/dev-cache.c
@@ -939,12 +939,20 @@ static int _insert_udev_dir(struct udev *udev, const char *dir)
struct udev_device *device;
int r = 1;
- if (!(udev_enum = udev_enumerate_new(udev)))
- goto bad;
+ if (!(udev_enum = udev_enumerate_new(udev))) {
+ log_error("Failed to udev_enumerate_new.");
+ return 0;
+ }
- if (udev_enumerate_add_match_subsystem(udev_enum, "block") ||
- udev_enumerate_scan_devices(udev_enum))
- goto bad;
+ if (udev_enumerate_add_match_subsystem(udev_enum, "block")) {
+ log_error("Failed to udev_enumerate_add_match_subsystem.");
+ goto out;
+ }
+
+ if (udev_enumerate_scan_devices(udev_enum)) {
+ log_error("Failed to udev_enumerate_scan_devices.");
+ goto out;
+ }
/*
* Report any missing information as "log_very_verbose" only, do not
@@ -981,13 +989,10 @@ static int _insert_udev_dir(struct udev *udev, const char *dir)
udev_device_unref(device);
}
+out:
udev_enumerate_unref(udev_enum);
- return r;
-bad:
- log_error("Failed to enumerate udev device list.");
- udev_enumerate_unref(udev_enum);
- return 0;
+ return r;
}
static void _insert_dirs(struct dm_list *dirs)
5 years, 11 months
master - thin: fix merging messages
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=af21263cb39bb850d5b...
Commit: af21263cb39bb850d5bf437fe0371e173b8c0246
Parent: 90ee7783b4c2b1b13122e6107cebeb28ca30326d
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 30 11:00:31 2017 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 30 11:53:39 2017 +0100
thin: fix merging messages
Correct reported message when thin snapshot has been already merged.
So lvm2 is no longer reporting "Mergins of snapshot X will occur..."
(even with swapped names).
---
WHATS_NEW | 1 +
test/shell/thin-merge.sh | 6 ++++--
tools/lvconvert.c | 24 +++++++++++-------------
3 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 961c7e5..e8e6bb0 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.176 -
===================================
+ Fix printed message when thin snapshot was already merged.
Remove created spare LV when creation of thin-pool failed.
Avoid reading ignored metadata when mda gets used again.
Fix detection of moved PVs in vgsplit. (2.02.175)
diff --git a/test/shell/thin-merge.sh b/test/shell/thin-merge.sh
index 7baaa55..1841bf7 100644
--- a/test/shell/thin-merge.sh
+++ b/test/shell/thin-merge.sh
@@ -45,7 +45,8 @@ touch mntsnap/test_snap
lvs -o+tags,thin_id $vg
-lvconvert --merge $vg/snap
+lvconvert --merge $vg/snap &>out
+grep "Merging of thin snapshot $vg/snap will occur on next activation of $vg/${lv1}." out
umount mnt
@@ -115,7 +116,8 @@ check lv_field $vg/$lv1 thin_id "3"
# Check --mergethin
lvcreate -s -n snap $vg/$lv1
check lv_field $vg/snap thin_id "4"
-lvconvert --mergethin $vg/snap
+lvconvert --mergethin $vg/snap &>out
+grep "Volume $vg/snap replaced origin $vg/${lv1}." out
check lv_field $vg/$lv1 thin_id "4"
vgremove -ff $vg
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 76be5cb..3a025c7 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -2098,7 +2098,7 @@ static int _lvconvert_merge_old_snapshot(struct cmd_context *cmd,
static int _lvconvert_merge_thin_snapshot(struct cmd_context *cmd,
struct logical_volume *lv)
{
- int origin_is_active = 0, r = 0;
+ int origin_is_active = 0;
struct lv_segment *snap_seg = first_seg(lv);
struct logical_volume *origin = snap_seg->origin;
@@ -2151,16 +2151,18 @@ static int _lvconvert_merge_thin_snapshot(struct cmd_context *cmd,
* replace the origin LV with its snapshot LV.
*/
if (!thin_merge_finish(cmd, origin, lv))
- goto_out;
+ return_0;
+
+ log_print_unless_silent("Volume %s replaced origin %s.",
+ display_lvname(origin), display_lvname(lv));
if (origin_is_active && !activate_lv(cmd, lv)) {
log_error("Failed to reactivate origin %s.",
display_lvname(lv));
- goto out;
+ return 0;
}
- r = 1;
- goto out;
+ return 1;
}
init_snapshot_merge(snap_seg, origin);
@@ -2169,16 +2171,12 @@ static int _lvconvert_merge_thin_snapshot(struct cmd_context *cmd,
if (!vg_write(lv->vg) || !vg_commit(lv->vg))
return_0;
- r = 1;
-out:
+ log_print_unless_silent("Merging of thin snapshot %s will occur on "
+ "next activation of %s.",
+ display_lvname(lv), display_lvname(origin));
backup(lv->vg);
- if (r)
- log_print_unless_silent("Merging of thin snapshot %s will occur on "
- "next activation of %s.",
- display_lvname(lv), display_lvname(origin));
-
- return r;
+ return 1;
}
static int _lvconvert_thin_pool_repair(struct cmd_context *cmd,
5 years, 11 months
master - pool: drop create spare on error path
by Zdenek Kabelac
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=90ee7783b4c2b1b1312...
Commit: 90ee7783b4c2b1b13122e6107cebeb28ca30326d
Parent: 52fd66210b120bf1185fbbc91b6bc487d99dd33a
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Sat Oct 28 00:10:16 2017 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 30 11:53:39 2017 +0100
pool: drop create spare on error path
When thin/cache pool creation fails and command created _pmspare,
such volume is now removed on error path.
---
WHATS_NEW | 1 +
tools/lvcreate.c | 7 +++++++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 4d1a6a8..961c7e5 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.176 -
===================================
+ Remove created spare LV when creation of thin-pool failed.
Avoid reading ignored metadata when mda gets used again.
Fix detection of moved PVs in vgsplit. (2.02.175)
Ignore --stripes/--stripesize on RAID takeover
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index 09bbe10..7f86a37 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -1579,6 +1579,7 @@ static int _lvcreate_single(struct cmd_context *cmd, const char *vg_name,
struct processing_params *pp = (struct processing_params *) handle->custom_handle;
struct lvcreate_params *lp = pp->lp;
struct lvcreate_cmdline_params *lcp = pp->lcp;
+ struct logical_volume *spare = vg->pool_metadata_spare_lv;
int ret = ECMD_FAILED;
if (!_read_activation_params(cmd, vg, lp))
@@ -1652,6 +1653,12 @@ static int _lvcreate_single(struct cmd_context *cmd, const char *vg_name,
ret = ECMD_PROCESSED;
out:
+ if (ret != ECMD_PROCESSED && !spare && vg->pool_metadata_spare_lv)
+ /* Remove created spare volume for failed pool creation */
+ if (!lvremove_single(cmd, vg->pool_metadata_spare_lv, NULL))
+ log_error("Removal of created spare volume failed. "
+ "Manual intervention required.");
+
return ret;
}
5 years, 11 months