Blame SOURCES/lvm2-2_02_133-check-for-space-in-thin-pool-before-creating-new-thin.patch

a4cb28
 WHATS_NEW               |  4 ++++
a4cb28
 lib/metadata/lv_manip.c | 23 ++++++++++++++++++-----
a4cb28
 2 files changed, 22 insertions(+), 5 deletions(-)
a4cb28
a4cb28
diff --git a/WHATS_NEW b/WHATS_NEW
a4cb28
index 1718c29..0fa6bb6 100644
a4cb28
--- a/WHATS_NEW
a4cb28
+++ b/WHATS_NEW
a4cb28
@@ -1,3 +1,7 @@
a4cb28
+Version 2.02.133 - 
a4cb28
+======================================
a4cb28
+  Check for enough space in thin-pool in command before creating new thin.
a4cb28
+
a4cb28
 Version 2.02.131 - 
a4cb28
 =====================================
a4cb28
   Fix vgimportclone cache_dir path name (2.02.115).
a4cb28
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
a4cb28
index 88c516b..32aa666 100644
a4cb28
--- a/lib/metadata/lv_manip.c
a4cb28
+++ b/lib/metadata/lv_manip.c
a4cb28
@@ -7038,12 +7038,25 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg,
a4cb28
 			}
a4cb28
 		}
a4cb28
 
a4cb28
-		if (seg_is_thin_volume(lp) &&
a4cb28
-		    lv_is_new_thin_pool(pool_lv)) {
a4cb28
+		if (seg_is_thin_volume(lp)) {
a4cb28
 			thin_pool_was_active = lv_is_active(pool_lv);
a4cb28
-			if (!check_new_thin_pool(pool_lv))
a4cb28
-				return_NULL;
a4cb28
-			/* New pool is now inactive */
a4cb28
+			if (lv_is_new_thin_pool(pool_lv)) {
a4cb28
+				if (!check_new_thin_pool(pool_lv))
a4cb28
+					return_NULL;
a4cb28
+				/* New pool is now inactive */
a4cb28
+			} else {
a4cb28
+				if (!activate_lv_excl_local(cmd, pool_lv)) {
a4cb28
+					log_error("Aborting. Failed to locally activate thin pool %s.",
a4cb28
+						  display_lvname(pool_lv));
a4cb28
+					return 0;
a4cb28
+				}
a4cb28
+				if (!pool_below_threshold(first_seg(pool_lv))) {
a4cb28
+					log_error("Cannot create new thin volume, free space in "
a4cb28
+						  "thin pool %s reached threshold.",
a4cb28
+						  display_lvname(pool_lv));
a4cb28
+					return NULL;
a4cb28
+				}
a4cb28
+			}
a4cb28
 		}
a4cb28
 
a4cb28
 		if (seg_is_cache(lp) &&