[lvm-devel] master - raid: reload on removing images

Heinz Mauelshagen heinzm at sourceware.org
Wed Apr 5 22:59:56 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=e350b83d508aca11969ad5429d1095fb2e066432
Commit:        e350b83d508aca11969ad5429d1095fb2e066432
Parent:        a8d5ada452570e1c9b0c6e0ae0a311870056896a
Author:        Heinz Mauelshagen <heinzm at redhat.com>
AuthorDate:    Thu Apr 6 00:47:34 2017 +0200
Committer:     Heinz Mauelshagen <heinzm at redhat.com>
CommitterDate: Thu Apr 6 00:47:34 2017 +0200

raid: reload on removing images

Requesting _raid_remove_images() to commit the
metadata missed to reload the origin causing a
kernel takeover error converting a 2-legged raid1
(with previously removed images) to raid5.
---
 lib/metadata/raid_manip.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index 07bb131..05cbb74 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -1592,7 +1592,6 @@ static int _lv_free_reshape_space_with_status(struct logical_volume *lv, enum al
 		 */
 		if (!_lv_alloc_reshape_space(lv, alloc_end, &where, NULL))
 			return_0;
-
 		seg->extents_copied = first_seg(lv)->area_len;
 		if (!lv_reduce(lv, total_reshape_len))
 			return_0;
@@ -2918,6 +2917,8 @@ static int _raid_remove_images(struct logical_volume *lv, int yes,
 		return 0;
 	}
 
+	first_seg(lv)->area_count = new_count;
+
 	/* Convert to linear? */
 	if (new_count == 1) {
 		if (!yes && yes_no_prompt("Are you sure you want to convert %s LV %s to type %s loosing all resilience? [y/n]: ",
@@ -2944,13 +2945,11 @@ static int _raid_remove_images(struct logical_volume *lv, int yes,
 	/*
 	 * Eliminate the extracted LVs
 	 */
-	if (!dm_list_empty(removal_lvs)) {
-		if (!_deactivate_and_remove_lvs(lv->vg, removal_lvs))
-			return_0;
+	if (!_deactivate_and_remove_lvs(lv->vg, removal_lvs))
+		return_0;
 
-		if (!vg_write(lv->vg) || !vg_commit(lv->vg))
-			return_0;
-	}
+	if (!lv_update_and_reload_origin(lv))
+		return_0;
 
 	backup(lv->vg);
 




More information about the lvm-devel mailing list