master - cleanup: relocate size assign

Zdenek Kabelac <[email protected]> Wed, 20 Jan 2016 12:53:58 +0000 (UTC)
Newsgroups dev.linux.lists.lvm-devel
Message-ID <[email protected]>
Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b64703401da1f4bef60579a0b3766c087fcfe96a
Commit:        b64703401da1f4bef60579a0b3766c087fcfe96a
Parent:        ca878a3426197b629c76e98cfc049948da470cd7
Author:        Zdenek Kabelac <[email protected]>
AuthorDate:    Mon Jan 18 23:22:48 2016 +0100
Committer:     Zdenek Kabelac <[email protected]>
CommitterDate: Wed Jan 20 13:44:47 2016 +0100

cleanup: relocate size assign

Directly set thin-pool size when thin data LV size changes.
---
 lib/metadata/lv_manip.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index b283756..4507f8e 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -1730,7 +1730,7 @@ static int _setup_alloced_segment(struct logical_volume *lv, uint64_t status,
 				  uint32_t region_size)
 {
 	uint32_t s, extents, area_multiple;
-	struct lv_segment *seg;
+	struct lv_segment *seg, *thin_pool_seg;
 
 	area_multiple = _calc_area_multiple(segtype, area_count, 0);
 	extents = aa[0].len * area_multiple;
@@ -1753,6 +1753,15 @@ static int _setup_alloced_segment(struct logical_volume *lv, uint64_t status,
 	lv->le_count += extents;
 	lv->size += (uint64_t) extents * lv->vg->extent_size;
 
+	if (lv_is_thin_pool_data(lv)) {
+		/* Update thin pool segment from the layered LV */
+		thin_pool_seg = get_only_segment_using_this_lv(lv);
+		thin_pool_seg->lv->le_count =
+			thin_pool_seg->len =
+			thin_pool_seg->area_len = lv->le_count;
+		thin_pool_seg->lv->size = lv->size;
+	}
+
 	return 1;
 }
 
@@ -5239,11 +5248,6 @@ static struct logical_volume *_lvresize_volume(struct cmd_context *cmd,
 					display_size(cmd, (uint64_t) lv->le_count * vg->extent_size), lv->le_count);
 
 	if (lock_lv) {
-		/* Update thin pool segment from the layered LV */
-		seg->area_len = lv->le_count;
-		seg->len = lv->le_count;
-		lock_lv->le_count = lv->le_count;
-		lock_lv->size = lv->size;
 	/* If thin metadata, must suspend thin pool */
 	} else if (lv_is_thin_pool_metadata(lv)) {
 		if (!(lock_lv = find_pool_lv(lv)))