neil / rpms / libblockdev

Forked from rpms/libblockdev a year ago
Clone

Blame 0002-LVM-thin-metadata-calculation-fix.patch

Vojtech Trefny 75aaea
From 2bb371937c7ef73f26717e57a5eb78cafe90a9f7 Mon Sep 17 00:00:00 2001
Vojtech Trefny 75aaea
From: Vojtech Trefny <vtrefny@redhat.com>
Vojtech Trefny 75aaea
Date: Fri, 20 Sep 2019 09:58:01 +0200
Vojtech Trefny 75aaea
Subject: [PATCH 1/5] Mark all GIR file constants as guint64
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
See 9676585e65f69ec1c309f45ba139035408d59b8e for more information.
Vojtech Trefny 75aaea
---
Vojtech Trefny 75aaea
 src/lib/plugin_apis/btrfs.api  |  2 +-
Vojtech Trefny 75aaea
 src/lib/plugin_apis/crypto.api |  2 +-
Vojtech Trefny 75aaea
 src/lib/plugin_apis/lvm.api    | 20 ++++++++++----------
Vojtech Trefny 75aaea
 src/lib/plugin_apis/mdraid.api |  4 ++--
Vojtech Trefny 75aaea
 4 files changed, 14 insertions(+), 14 deletions(-)
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
diff --git a/src/lib/plugin_apis/btrfs.api b/src/lib/plugin_apis/btrfs.api
Vojtech Trefny 75aaea
index b52fb4ce..ef0f6c28 100644
Vojtech Trefny 75aaea
--- a/src/lib/plugin_apis/btrfs.api
Vojtech Trefny 75aaea
+++ b/src/lib/plugin_apis/btrfs.api
Vojtech Trefny 75aaea
@@ -3,7 +3,7 @@
Vojtech Trefny 75aaea
 #include <blockdev/utils.h>
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 #define BD_BTRFS_MAIN_VOLUME_ID 5
Vojtech Trefny 75aaea
-#define BD_BTRFS_MIN_MEMBER_SIZE (128 MiB)
Vojtech Trefny 75aaea
+#define BD_BTRFS_MIN_MEMBER_SIZE G_GUINT64_CONSTANT (134217728ULL) // 128 MiB
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 GQuark bd_btrfs_error_quark (void) {
Vojtech Trefny 75aaea
     return g_quark_from_static_string ("g-bd-btrfs-error-quark");
Vojtech Trefny 75aaea
diff --git a/src/lib/plugin_apis/crypto.api b/src/lib/plugin_apis/crypto.api
Vojtech Trefny 75aaea
index e3d69986..ef0217fe 100644
Vojtech Trefny 75aaea
--- a/src/lib/plugin_apis/crypto.api
Vojtech Trefny 75aaea
+++ b/src/lib/plugin_apis/crypto.api
Vojtech Trefny 75aaea
@@ -1,7 +1,7 @@
Vojtech Trefny 75aaea
 #include <glib.h>
Vojtech Trefny 75aaea
 #include <blockdev/utils.h>
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-#define BD_CRYPTO_LUKS_METADATA_SIZE (2 MiB)
Vojtech Trefny 75aaea
+#define BD_CRYPTO_LUKS_METADATA_SIZE G_GUINT64_CONSTANT (2097152ULL) // 2 MiB
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 GQuark bd_crypto_error_quark (void) {
Vojtech Trefny 75aaea
     return g_quark_from_static_string ("g-bd-crypto-error-quark");
Vojtech Trefny 75aaea
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
index 21c8f74d..ea52263b 100644
Vojtech Trefny 75aaea
--- a/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
+++ b/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
@@ -15,18 +15,18 @@
Vojtech Trefny 75aaea
 #define BD_LVM_MAX_LV_SIZE G_GUINT64_CONSTANT (9223372036854775808ULL)
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-#define BD_LVM_DEFAULT_PE_START (1 MiB)
Vojtech Trefny 75aaea
-#define BD_LVM_DEFAULT_PE_SIZE (4 MiB)
Vojtech Trefny 75aaea
-#define BD_LVM_MIN_PE_SIZE (1 KiB)
Vojtech Trefny 75aaea
-#define BD_LVM_MAX_PE_SIZE (16 GiB)
Vojtech Trefny 75aaea
-#define BD_LVM_MIN_THPOOL_MD_SIZE (2 MiB)
Vojtech Trefny 75aaea
-#define BD_LVM_MAX_THPOOL_MD_SIZE (16 GiB)
Vojtech Trefny 75aaea
-#define BD_LVM_MIN_THPOOL_CHUNK_SIZE (64 KiB)
Vojtech Trefny 75aaea
-#define BD_LVM_MAX_THPOOL_CHUNK_SIZE (1 GiB)
Vojtech Trefny 75aaea
-#define BD_LVM_DEFAULT_CHUNK_SIZE (64 KiB)
Vojtech Trefny 75aaea
+#define BD_LVM_DEFAULT_PE_START G_GUINT64_CONSTANT (1048576ULL) // 1 MiB
Vojtech Trefny 75aaea
+#define BD_LVM_DEFAULT_PE_SIZE G_GUINT64_CONSTANT (4194304ULL) // 4 MiB
Vojtech Trefny 75aaea
+#define BD_LVM_MIN_PE_SIZE G_GUINT64_CONSTANT (1024ULL) // 1 KiB
Vojtech Trefny 75aaea
+#define BD_LVM_MAX_PE_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
Vojtech Trefny 75aaea
+#define BD_LVM_MIN_THPOOL_MD_SIZE G_GUINT64_CONSTANT (2097152ULL) // 2 MiB
Vojtech Trefny 75aaea
+#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
Vojtech Trefny 75aaea
+#define BD_LVM_MIN_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
Vojtech Trefny 75aaea
+#define BD_LVM_MAX_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (1073741824ULL) // 1 GiB
Vojtech Trefny 75aaea
+#define BD_LVM_DEFAULT_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 /* according to lvmcache (7) */
Vojtech Trefny 75aaea
-#define BD_LVM_MIN_CACHE_MD_SIZE (8 MiB)
Vojtech Trefny 75aaea
+#define BD_LVM_MIN_CACHE_MD_SIZE (8388608ULL) // 8 MiB
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 GQuark bd_lvm_error_quark (void) {
Vojtech Trefny 75aaea
     return g_quark_from_static_string ("g-bd-lvm-error-quark");
Vojtech Trefny 75aaea
diff --git a/src/lib/plugin_apis/mdraid.api b/src/lib/plugin_apis/mdraid.api
Vojtech Trefny 75aaea
index 3bd9eaf2..02ca9530 100644
Vojtech Trefny 75aaea
--- a/src/lib/plugin_apis/mdraid.api
Vojtech Trefny 75aaea
+++ b/src/lib/plugin_apis/mdraid.api
Vojtech Trefny 75aaea
@@ -7,8 +7,8 @@
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 /* taken from blivet */
Vojtech Trefny 75aaea
 // these defaults were determined empirically
Vojtech Trefny 75aaea
-#define BD_MD_SUPERBLOCK_SIZE (2 MiB)
Vojtech Trefny 75aaea
-#define BD_MD_CHUNK_SIZE (512 KiB)
Vojtech Trefny 75aaea
+#define BD_MD_SUPERBLOCK_SIZE G_GUINT64_CONSTANT (2097152ULL) // 2 MiB
Vojtech Trefny 75aaea
+#define BD_MD_CHUNK_SIZE G_GUINT64_CONSTANT (524288ULL) // 512 KiB
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 GQuark bd_md_error_quark (void) {
Vojtech Trefny 75aaea
     return g_quark_from_static_string ("g-bd-md-error-quark");
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
From aeedce3bcaa8182c9878cc51d3f85a6c6eb6a01f Mon Sep 17 00:00:00 2001
Vojtech Trefny 75aaea
From: Vojtech Trefny <vtrefny@redhat.com>
Vojtech Trefny 75aaea
Date: Thu, 3 Dec 2020 14:41:25 +0100
Vojtech Trefny 75aaea
Subject: [PATCH 2/5] lvm: Set thin metadata limits to match limits LVM uses in
Vojtech Trefny 75aaea
 lvcreate
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
---
Vojtech Trefny 75aaea
 src/lib/plugin_apis/lvm.api | 4 ++--
Vojtech Trefny 75aaea
 src/plugins/lvm.h           | 9 +++++++--
Vojtech Trefny 75aaea
 tests/lvm_dbus_tests.py     | 7 ++++---
Vojtech Trefny 75aaea
 tests/lvm_test.py           | 7 ++++---
Vojtech Trefny 75aaea
 4 files changed, 17 insertions(+), 10 deletions(-)
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
index ea52263b..e843c916 100644
Vojtech Trefny 75aaea
--- a/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
+++ b/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
@@ -19,8 +19,8 @@
Vojtech Trefny 75aaea
 #define BD_LVM_DEFAULT_PE_SIZE G_GUINT64_CONSTANT (4194304ULL) // 4 MiB
Vojtech Trefny 75aaea
 #define BD_LVM_MIN_PE_SIZE G_GUINT64_CONSTANT (1024ULL) // 1 KiB
Vojtech Trefny 75aaea
 #define BD_LVM_MAX_PE_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
Vojtech Trefny 75aaea
-#define BD_LVM_MIN_THPOOL_MD_SIZE G_GUINT64_CONSTANT (2097152ULL) // 2 MiB
Vojtech Trefny 75aaea
-#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
Vojtech Trefny 75aaea
+#define BD_LVM_MIN_THPOOL_MD_SIZE G_GUINT64_CONSTANT (4194304ULL) // 4 MiB
Vojtech Trefny 75aaea
+#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (33957085184ULL) // 31.62 GiB
Vojtech Trefny 75aaea
 #define BD_LVM_MIN_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
Vojtech Trefny 75aaea
 #define BD_LVM_MAX_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (1073741824ULL) // 1 GiB
Vojtech Trefny 75aaea
 #define BD_LVM_DEFAULT_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
Vojtech Trefny 75aaea
diff --git a/src/plugins/lvm.h b/src/plugins/lvm.h
Vojtech Trefny 75aaea
index 4b970f2e..01c06ca4 100644
Vojtech Trefny 75aaea
--- a/src/plugins/lvm.h
Vojtech Trefny 75aaea
+++ b/src/plugins/lvm.h
Vojtech Trefny 75aaea
@@ -1,5 +1,6 @@
Vojtech Trefny 75aaea
 #include <glib.h>
Vojtech Trefny 75aaea
 #include <blockdev/utils.h>
Vojtech Trefny 75aaea
+#include <libdevmapper.h>
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 #ifndef BD_LVM
Vojtech Trefny 75aaea
 #define BD_LVM
Vojtech Trefny 75aaea
@@ -21,8 +22,12 @@
Vojtech Trefny 75aaea
 #define USE_DEFAULT_PE_SIZE 0
Vojtech Trefny 75aaea
 #define RESOLVE_PE_SIZE(size) ((size) == USE_DEFAULT_PE_SIZE ? BD_LVM_DEFAULT_PE_SIZE : (size))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-#define BD_LVM_MIN_THPOOL_MD_SIZE (2 MiB)
Vojtech Trefny 75aaea
-#define BD_LVM_MAX_THPOOL_MD_SIZE (16 GiB)
Vojtech Trefny 75aaea
+/* lvm constants for thin pool metadata size are actually half of these
Vojtech Trefny 75aaea
+   but when they calculate the actual metadata size they double the limits
Vojtech Trefny 75aaea
+   so lets just double the limits here too */
Vojtech Trefny 75aaea
+#define BD_LVM_MIN_THPOOL_MD_SIZE (4 MiB)
Vojtech Trefny 75aaea
+#define BD_LVM_MAX_THPOOL_MD_SIZE (DM_THIN_MAX_METADATA_SIZE KiB)
Vojtech Trefny 75aaea
+
Vojtech Trefny 75aaea
 #define BD_LVM_MIN_THPOOL_CHUNK_SIZE (64 KiB)
Vojtech Trefny 75aaea
 #define BD_LVM_MAX_THPOOL_CHUNK_SIZE (1 GiB)
Vojtech Trefny 75aaea
 #define BD_LVM_DEFAULT_CHUNK_SIZE (64 KiB)
Vojtech Trefny 75aaea
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
index 47402fc3..b517aae9 100644
Vojtech Trefny 75aaea
--- a/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
+++ b/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
@@ -160,12 +160,13 @@ def test_get_thpool_meta_size(self):
Vojtech Trefny 75aaea
     def test_is_valid_thpool_md_size(self):
Vojtech Trefny 75aaea
         """Verify that is_valid_thpool_md_size works as expected"""
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(2 * 1024**2))
Vojtech Trefny 75aaea
-        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
Vojtech Trefny 75aaea
+        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(4 * 1024**2))
Vojtech Trefny 75aaea
+        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(5 * 1024**2))
Vojtech Trefny 75aaea
         self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
         self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(1 * 1024**2))
Vojtech Trefny 75aaea
-        self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(17 * 1024**3))
Vojtech Trefny 75aaea
+        self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
Vojtech Trefny 75aaea
+        self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(32 * 1024**3))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     @tag_test(TestTags.NOSTORAGE)
Vojtech Trefny 75aaea
     def test_is_valid_thpool_chunk_size(self):
Vojtech Trefny 75aaea
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
Vojtech Trefny 75aaea
index 149cf54a..d0085651 100644
Vojtech Trefny 75aaea
--- a/tests/lvm_test.py
Vojtech Trefny 75aaea
+++ b/tests/lvm_test.py
Vojtech Trefny 75aaea
@@ -153,12 +153,13 @@ def test_get_thpool_meta_size(self):
Vojtech Trefny 75aaea
     def test_is_valid_thpool_md_size(self):
Vojtech Trefny 75aaea
         """Verify that is_valid_thpool_md_size works as expected"""
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(2 * 1024**2))
Vojtech Trefny 75aaea
-        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
Vojtech Trefny 75aaea
+        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(4 * 1024**2))
Vojtech Trefny 75aaea
+        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(5 * 1024**2))
Vojtech Trefny 75aaea
         self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
         self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(1 * 1024**2))
Vojtech Trefny 75aaea
-        self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(17 * 1024**3))
Vojtech Trefny 75aaea
+        self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
Vojtech Trefny 75aaea
+        self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(32 * 1024**3))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     @tag_test(TestTags.NOSTORAGE)
Vojtech Trefny 75aaea
     def test_is_valid_thpool_chunk_size(self):
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
From 15fcf1bb62865083a3483fc51f45e11cdc2d7386 Mon Sep 17 00:00:00 2001
Vojtech Trefny 75aaea
From: Vojtech Trefny <vtrefny@redhat.com>
Vojtech Trefny 75aaea
Date: Thu, 3 Dec 2020 14:46:00 +0100
Vojtech Trefny 75aaea
Subject: [PATCH 3/5] lvm: Do not use thin_metadata_size to recommend thin
Vojtech Trefny 75aaea
 metadata size
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
thin_metadata_size calculates the metadata size differently and
Vojtech Trefny 75aaea
recommends smaller metadata than lvcreate so we should use the
Vojtech Trefny 75aaea
lvcreate formula instead.
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
Resolves: rhbz#1898668
Vojtech Trefny 75aaea
---
Vojtech Trefny 75aaea
 dist/libblockdev.spec.in            |  4 --
Vojtech Trefny 75aaea
 src/lib/plugin_apis/lvm.api         |  8 +--
Vojtech Trefny 75aaea
 src/plugins/lvm-dbus.c              | 78 ++++++-----------------------
Vojtech Trefny 75aaea
 src/plugins/lvm.c                   | 66 +++++++-----------------
Vojtech Trefny 75aaea
 src/python/gi/overrides/BlockDev.py |  6 +++
Vojtech Trefny 75aaea
 tests/library_test.py               |  6 +--
Vojtech Trefny 75aaea
 tests/lvm_dbus_tests.py             | 20 ++++----
Vojtech Trefny 75aaea
 tests/lvm_test.py                   | 15 ++----
Vojtech Trefny 75aaea
 tests/utils.py                      |  2 +-
Vojtech Trefny 75aaea
 9 files changed, 61 insertions(+), 144 deletions(-)
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
diff --git a/dist/libblockdev.spec.in b/dist/libblockdev.spec.in
Vojtech Trefny 75aaea
index 7c775174..3e0a53c6 100644
Vojtech Trefny 75aaea
--- a/dist/libblockdev.spec.in
Vojtech Trefny 75aaea
+++ b/dist/libblockdev.spec.in
Vojtech Trefny 75aaea
@@ -387,8 +387,6 @@ BuildRequires: device-mapper-devel
Vojtech Trefny 75aaea
 Summary:     The LVM plugin for the libblockdev library
Vojtech Trefny 75aaea
 Requires: %{name}-utils%{?_isa} >= 0.11
Vojtech Trefny 75aaea
 Requires: lvm2
Vojtech Trefny 75aaea
-# for thin_metadata_size
Vojtech Trefny 75aaea
-Requires: device-mapper-persistent-data
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 %description lvm
Vojtech Trefny 75aaea
 The libblockdev library plugin (and in the same time a standalone library)
Vojtech Trefny 75aaea
@@ -411,8 +409,6 @@ BuildRequires: device-mapper-devel
Vojtech Trefny 75aaea
 Summary:     The LVM plugin for the libblockdev library
Vojtech Trefny 75aaea
 Requires: %{name}-utils%{?_isa} >= 1.4
Vojtech Trefny 75aaea
 Requires: lvm2-dbusd >= 2.02.156
Vojtech Trefny 75aaea
-# for thin_metadata_size
Vojtech Trefny 75aaea
-Requires: device-mapper-persistent-data
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 %description lvm-dbus
Vojtech Trefny 75aaea
 The libblockdev library plugin (and in the same time a standalone library)
Vojtech Trefny 75aaea
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
index e843c916..9f25c1ed 100644
Vojtech Trefny 75aaea
--- a/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
+++ b/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
@@ -704,11 +704,13 @@ guint64 bd_lvm_get_thpool_padding (guint64 size, guint64 pe_size, gboolean inclu
Vojtech Trefny 75aaea
  * bd_lvm_get_thpool_meta_size:
Vojtech Trefny 75aaea
  * @size: size of the thin pool
Vojtech Trefny 75aaea
  * @chunk_size: chunk size of the thin pool or 0 to use the default (%BD_LVM_DEFAULT_CHUNK_SIZE)
Vojtech Trefny 75aaea
- * @n_snapshots: number of snapshots that will be created in the pool
Vojtech Trefny 75aaea
+ * @n_snapshots: ignored
Vojtech Trefny 75aaea
  * @error: (out): place to store error (if any)
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
- * Returns: recommended size of the metadata space for the specified pool or 0
Vojtech Trefny 75aaea
- *          in case of error
Vojtech Trefny 75aaea
+ * Note: This function will be changed in 3.0: the @n_snapshots parameter
Vojtech Trefny 75aaea
+ *       is currently not used and will be removed.
Vojtech Trefny 75aaea
+ *
Vojtech Trefny 75aaea
+ * Returns: recommended size of the metadata space for the specified pool
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
Vojtech Trefny 75aaea
index 9f821a99..24d54426 100644
Vojtech Trefny 75aaea
--- a/src/plugins/lvm-dbus.c
Vojtech Trefny 75aaea
+++ b/src/plugins/lvm-dbus.c
Vojtech Trefny 75aaea
@@ -20,7 +20,6 @@
Vojtech Trefny 75aaea
 #include <glib.h>
Vojtech Trefny 75aaea
 #include <math.h>
Vojtech Trefny 75aaea
 #include <string.h>
Vojtech Trefny 75aaea
-#include <libdevmapper.h>
Vojtech Trefny 75aaea
 #include <unistd.h>
Vojtech Trefny 75aaea
 #include <blockdev/utils.h>
Vojtech Trefny 75aaea
 #include <gio/gio.h>
Vojtech Trefny 75aaea
@@ -248,14 +247,6 @@ static volatile guint avail_features = 0;
Vojtech Trefny 75aaea
 static volatile guint avail_module_deps = 0;
Vojtech Trefny 75aaea
 static GMutex deps_check_lock;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-#define DEPS_THMS 0
Vojtech Trefny 75aaea
-#define DEPS_THMS_MASK (1 << DEPS_THMS)
Vojtech Trefny 75aaea
-#define DEPS_LAST 1
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-static const UtilDep deps[DEPS_LAST] = {
Vojtech Trefny 75aaea
-    {"thin_metadata_size", NULL, NULL, NULL},
Vojtech Trefny 75aaea
-};
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
 #define DBUS_DEPS_LVMDBUSD 0
Vojtech Trefny 75aaea
 #define DBUS_DEPS_LVMDBUSD_MASK (1 << DBUS_DEPS_LVMDBUSD)
Vojtech Trefny 75aaea
 #define DBUS_DEPS_LAST 1
Vojtech Trefny 75aaea
@@ -301,17 +292,6 @@ gboolean bd_lvm_check_deps (void) {
Vojtech Trefny 75aaea
         check_ret = check_ret && success;
Vojtech Trefny 75aaea
     }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-    for (i=0; i < DEPS_LAST; i++) {
Vojtech Trefny 75aaea
-        success = bd_utils_check_util_version (deps[i].name, deps[i].version,
Vojtech Trefny 75aaea
-                                               deps[i].ver_arg, deps[i].ver_regexp, &error);
Vojtech Trefny 75aaea
-        if (!success)
Vojtech Trefny 75aaea
-            g_warning ("%s", error->message);
Vojtech Trefny 75aaea
-        else
Vojtech Trefny 75aaea
-            g_atomic_int_or (&avail_deps, 1 << i);
Vojtech Trefny 75aaea
-        g_clear_error (&error);
Vojtech Trefny 75aaea
-        check_ret = check_ret && success;
Vojtech Trefny 75aaea
-    }
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
     if (!check_ret)
Vojtech Trefny 75aaea
         g_warning("Cannot load the LVM plugin");
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -386,10 +366,7 @@ gboolean bd_lvm_is_tech_avail (BDLVMTech tech, guint64 mode, GError **error) {
Vojtech Trefny 75aaea
             g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_TECH_UNAVAIL,
Vojtech Trefny 75aaea
                          "Only 'query' supported for thin calculations");
Vojtech Trefny 75aaea
             return FALSE;
Vojtech Trefny 75aaea
-        } else if ((mode & BD_LVM_TECH_MODE_QUERY) &&
Vojtech Trefny 75aaea
-            !check_deps (&avail_deps, DEPS_THMS_MASK, deps, DEPS_LAST, &deps_check_lock, error))
Vojtech Trefny 75aaea
-            return FALSE;
Vojtech Trefny 75aaea
-        else
Vojtech Trefny 75aaea
+        } else
Vojtech Trefny 75aaea
             return TRUE;
Vojtech Trefny 75aaea
     case BD_LVM_TECH_CALCS:
Vojtech Trefny 75aaea
         if (mode & ~BD_LVM_TECH_MODE_QUERY) {
Vojtech Trefny 75aaea
@@ -1303,53 +1280,28 @@ guint64 bd_lvm_get_thpool_padding (guint64 size, guint64 pe_size, gboolean inclu
Vojtech Trefny 75aaea
  * bd_lvm_get_thpool_meta_size:
Vojtech Trefny 75aaea
  * @size: size of the thin pool
Vojtech Trefny 75aaea
  * @chunk_size: chunk size of the thin pool or 0 to use the default (%BD_LVM_DEFAULT_CHUNK_SIZE)
Vojtech Trefny 75aaea
- * @n_snapshots: number of snapshots that will be created in the pool
Vojtech Trefny 75aaea
+ * @n_snapshots: ignored
Vojtech Trefny 75aaea
  * @error: (out): place to store error (if any)
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
- * Returns: recommended size of the metadata space for the specified pool or 0
Vojtech Trefny 75aaea
- *          in case of error
Vojtech Trefny 75aaea
+ * Note: This function will be changed in 3.0: the @n_snapshots parameter
Vojtech Trefny 75aaea
+ *       is currently not used and will be removed.
Vojtech Trefny 75aaea
+ *
Vojtech Trefny 75aaea
+ * Returns: recommended size of the metadata space for the specified pool
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n_snapshots, GError **error) {
Vojtech Trefny 75aaea
-    /* ub - output in bytes, n - output just the number */
Vojtech Trefny 75aaea
-    const gchar* args[7] = {"thin_metadata_size", "-ub", "-n", NULL, NULL, NULL, NULL};
Vojtech Trefny 75aaea
-    gchar *output = NULL;
Vojtech Trefny 75aaea
-    gboolean success = FALSE;
Vojtech Trefny 75aaea
-    guint64 ret = 0;
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-    if (!check_deps (&avail_deps, DEPS_THMS_MASK, deps, DEPS_LAST, &deps_check_lock, error))
Vojtech Trefny 75aaea
-        return 0;
Vojtech Trefny 75aaea
+guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n_snapshots UNUSED, GError **error UNUSED) {
Vojtech Trefny 75aaea
+    guint64 md_size = 0;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-    /* s - total size, b - chunk size, m - number of snapshots */
Vojtech Trefny 75aaea
-    args[3] = g_strdup_printf ("-s%"G_GUINT64_FORMAT, size);
Vojtech Trefny 75aaea
-    args[4] = g_strdup_printf ("-b%"G_GUINT64_FORMAT,
Vojtech Trefny 75aaea
-                               chunk_size != 0 ? chunk_size : (guint64) BD_LVM_DEFAULT_CHUNK_SIZE);
Vojtech Trefny 75aaea
-    args[5] = g_strdup_printf ("-m%"G_GUINT64_FORMAT, n_snapshots);
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-    success = bd_utils_exec_and_capture_output (args, NULL, &output, error);
Vojtech Trefny 75aaea
-    g_free ((gchar*) args[3]);
Vojtech Trefny 75aaea
-    g_free ((gchar*) args[4]);
Vojtech Trefny 75aaea
-    g_free ((gchar*) args[5]);
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-    if (!success) {
Vojtech Trefny 75aaea
-        /* error is already set */
Vojtech Trefny 75aaea
-        g_free (output);
Vojtech Trefny 75aaea
-        return 0;
Vojtech Trefny 75aaea
-    }
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-    ret = g_ascii_strtoull (output, NULL, 0);
Vojtech Trefny 75aaea
-    if (ret == 0) {
Vojtech Trefny 75aaea
-        g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_PARSE,
Vojtech Trefny 75aaea
-                     "Failed to parse number from thin_metadata_size's output: '%s'",
Vojtech Trefny 75aaea
-                     output);
Vojtech Trefny 75aaea
-        g_free (output);
Vojtech Trefny 75aaea
-        return 0;
Vojtech Trefny 75aaea
-    }
Vojtech Trefny 75aaea
+    /* based on lvcreate metadata size calculation */
Vojtech Trefny 75aaea
+    md_size = UINT64_C(64) * size / (chunk_size ? chunk_size : BD_LVM_DEFAULT_CHUNK_SIZE);
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-    g_free (output);
Vojtech Trefny 75aaea
+    if (md_size > BD_LVM_MAX_THPOOL_MD_SIZE)
Vojtech Trefny 75aaea
+        md_size = BD_LVM_MAX_THPOOL_MD_SIZE;
Vojtech Trefny 75aaea
+    else if (md_size < BD_LVM_MIN_THPOOL_MD_SIZE)
Vojtech Trefny 75aaea
+        md_size = BD_LVM_MIN_THPOOL_MD_SIZE;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-    return MAX (ret, BD_LVM_MIN_THPOOL_MD_SIZE);
Vojtech Trefny 75aaea
+    return md_size;
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 /**
Vojtech Trefny 75aaea
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
Vojtech Trefny 75aaea
index 6bfaa338..74493feb 100644
Vojtech Trefny 75aaea
--- a/src/plugins/lvm.c
Vojtech Trefny 75aaea
+++ b/src/plugins/lvm.c
Vojtech Trefny 75aaea
@@ -20,7 +20,6 @@
Vojtech Trefny 75aaea
 #include <glib.h>
Vojtech Trefny 75aaea
 #include <math.h>
Vojtech Trefny 75aaea
 #include <string.h>
Vojtech Trefny 75aaea
-#include <libdevmapper.h>
Vojtech Trefny 75aaea
 #include <unistd.h>
Vojtech Trefny 75aaea
 #include <blockdev/utils.h>
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -213,13 +212,10 @@ static GMutex deps_check_lock;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 #define DEPS_LVM 0
Vojtech Trefny 75aaea
 #define DEPS_LVM_MASK (1 << DEPS_LVM)
Vojtech Trefny 75aaea
-#define DEPS_THMS 1
Vojtech Trefny 75aaea
-#define DEPS_THMS_MASK (1 << DEPS_THMS)
Vojtech Trefny 75aaea
-#define DEPS_LAST 2
Vojtech Trefny 75aaea
+#define DEPS_LAST 1
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 static const UtilDep deps[DEPS_LAST] = {
Vojtech Trefny 75aaea
     {"lvm", LVM_MIN_VERSION, "version", "LVM version:\\s+([\\d\\.]+)"},
Vojtech Trefny 75aaea
-    {"thin_metadata_size", NULL, NULL, NULL},
Vojtech Trefny 75aaea
 };
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 #define FEATURES_VDO 0
Vojtech Trefny 75aaea
@@ -236,6 +232,8 @@ static const UtilFeatureDep features[FEATURES_LAST] = {
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 static const gchar*const module_deps[MODULE_DEPS_LAST] = { "kvdo" };
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
+#define UNUSED __attribute__((unused))
Vojtech Trefny 75aaea
+
Vojtech Trefny 75aaea
 /**
Vojtech Trefny 75aaea
  * bd_lvm_check_deps:
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
@@ -317,10 +315,7 @@ gboolean bd_lvm_is_tech_avail (BDLVMTech tech, guint64 mode, GError **error) {
Vojtech Trefny 75aaea
             g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_TECH_UNAVAIL,
Vojtech Trefny 75aaea
                          "Only 'query' supported for thin calculations");
Vojtech Trefny 75aaea
             return FALSE;
Vojtech Trefny 75aaea
-        } else if ((mode & BD_LVM_TECH_MODE_QUERY) &&
Vojtech Trefny 75aaea
-            !check_deps (&avail_deps, DEPS_THMS_MASK, deps, DEPS_LAST, &deps_check_lock, error))
Vojtech Trefny 75aaea
-            return FALSE;
Vojtech Trefny 75aaea
-        else
Vojtech Trefny 75aaea
+        } else
Vojtech Trefny 75aaea
             return TRUE;
Vojtech Trefny 75aaea
     case BD_LVM_TECH_CALCS:
Vojtech Trefny 75aaea
         if (mode & ~BD_LVM_TECH_MODE_QUERY) {
Vojtech Trefny 75aaea
@@ -820,53 +815,28 @@ guint64 bd_lvm_get_thpool_padding (guint64 size, guint64 pe_size, gboolean inclu
Vojtech Trefny 75aaea
  * bd_lvm_get_thpool_meta_size:
Vojtech Trefny 75aaea
  * @size: size of the thin pool
Vojtech Trefny 75aaea
  * @chunk_size: chunk size of the thin pool or 0 to use the default (%BD_LVM_DEFAULT_CHUNK_SIZE)
Vojtech Trefny 75aaea
- * @n_snapshots: number of snapshots that will be created in the pool
Vojtech Trefny 75aaea
+ * @n_snapshots: ignored
Vojtech Trefny 75aaea
  * @error: (out): place to store error (if any)
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
- * Returns: recommended size of the metadata space for the specified pool or 0
Vojtech Trefny 75aaea
- *          in case of error
Vojtech Trefny 75aaea
+ * Note: This function will be changed in 3.0: the @n_snapshots parameter
Vojtech Trefny 75aaea
+ *       is currently not used and will be removed.
Vojtech Trefny 75aaea
+ *
Vojtech Trefny 75aaea
+ * Returns: recommended size of the metadata space for the specified pool
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n_snapshots, GError **error) {
Vojtech Trefny 75aaea
-    /* ub - output in bytes, n - output just the number */
Vojtech Trefny 75aaea
-    const gchar* args[7] = {"thin_metadata_size", "-ub", "-n", NULL, NULL, NULL, NULL};
Vojtech Trefny 75aaea
-    gchar *output = NULL;
Vojtech Trefny 75aaea
-    gboolean success = FALSE;
Vojtech Trefny 75aaea
-    guint64 ret = 0;
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-    if (!check_deps (&avail_deps, DEPS_THMS_MASK, deps, DEPS_LAST, &deps_check_lock, error))
Vojtech Trefny 75aaea
-        return 0;
Vojtech Trefny 75aaea
+guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n_snapshots UNUSED, GError **error UNUSED) {
Vojtech Trefny 75aaea
+    guint64 md_size = 0;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-    /* s - total size, b - chunk size, m - number of snapshots */
Vojtech Trefny 75aaea
-    args[3] = g_strdup_printf ("-s%"G_GUINT64_FORMAT, size);
Vojtech Trefny 75aaea
-    args[4] = g_strdup_printf ("-b%"G_GUINT64_FORMAT,
Vojtech Trefny 75aaea
-                               chunk_size != 0 ? chunk_size : (guint64) BD_LVM_DEFAULT_CHUNK_SIZE);
Vojtech Trefny 75aaea
-    args[5] = g_strdup_printf ("-m%"G_GUINT64_FORMAT, n_snapshots);
Vojtech Trefny 75aaea
+    /* based on lvcreate metadata size calculation */
Vojtech Trefny 75aaea
+    md_size = UINT64_C(64) * size / (chunk_size ? chunk_size : BD_LVM_DEFAULT_CHUNK_SIZE);
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-    success = bd_utils_exec_and_capture_output (args, NULL, &output, error);
Vojtech Trefny 75aaea
-    g_free ((gchar*) args[3]);
Vojtech Trefny 75aaea
-    g_free ((gchar*) args[4]);
Vojtech Trefny 75aaea
-    g_free ((gchar*) args[5]);
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-    if (!success) {
Vojtech Trefny 75aaea
-        /* error is already set */
Vojtech Trefny 75aaea
-        g_free (output);
Vojtech Trefny 75aaea
-        return 0;
Vojtech Trefny 75aaea
-    }
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-    ret = g_ascii_strtoull (output, NULL, 0);
Vojtech Trefny 75aaea
-    if (ret == 0) {
Vojtech Trefny 75aaea
-        g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_PARSE,
Vojtech Trefny 75aaea
-                     "Failed to parse number from thin_metadata_size's output: '%s'",
Vojtech Trefny 75aaea
-                     output);
Vojtech Trefny 75aaea
-        g_free (output);
Vojtech Trefny 75aaea
-        return 0;
Vojtech Trefny 75aaea
-    }
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-    g_free (output);
Vojtech Trefny 75aaea
+    if (md_size > BD_LVM_MAX_THPOOL_MD_SIZE)
Vojtech Trefny 75aaea
+        md_size = BD_LVM_MAX_THPOOL_MD_SIZE;
Vojtech Trefny 75aaea
+    else if (md_size < BD_LVM_MIN_THPOOL_MD_SIZE)
Vojtech Trefny 75aaea
+        md_size = BD_LVM_MIN_THPOOL_MD_SIZE;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-    return MAX (ret, BD_LVM_MIN_THPOOL_MD_SIZE);
Vojtech Trefny 75aaea
+    return md_size;
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 /**
Vojtech Trefny 75aaea
diff --git a/src/python/gi/overrides/BlockDev.py b/src/python/gi/overrides/BlockDev.py
Vojtech Trefny 75aaea
index d78bfaab..f768c8bd 100644
Vojtech Trefny 75aaea
--- a/src/python/gi/overrides/BlockDev.py
Vojtech Trefny 75aaea
+++ b/src/python/gi/overrides/BlockDev.py
Vojtech Trefny 75aaea
@@ -462,6 +462,12 @@ def lvm_get_thpool_padding(size, pe_size=0, included=False):
Vojtech Trefny 75aaea
     return _lvm_get_thpool_padding(size, pe_size, included)
Vojtech Trefny 75aaea
 __all__.append("lvm_get_thpool_padding")
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
+_lvm_get_thpool_meta_size = BlockDev.lvm_get_thpool_meta_size
Vojtech Trefny 75aaea
+@override(BlockDev.lvm_get_thpool_meta_size)
Vojtech Trefny 75aaea
+def lvm_get_thpool_meta_size(size, chunk_size=0, n_snapshots=0):
Vojtech Trefny 75aaea
+    return _lvm_get_thpool_meta_size(size, chunk_size, n_snapshots)
Vojtech Trefny 75aaea
+__all__.append("lvm_get_thpool_meta_size")
Vojtech Trefny 75aaea
+
Vojtech Trefny 75aaea
 _lvm_pvcreate = BlockDev.lvm_pvcreate
Vojtech Trefny 75aaea
 @override(BlockDev.lvm_pvcreate)
Vojtech Trefny 75aaea
 def lvm_pvcreate(device, data_alignment=0, metadata_size=0, extra=None, **kwargs):
Vojtech Trefny 75aaea
diff --git a/tests/library_test.py b/tests/library_test.py
Vojtech Trefny 75aaea
index e8bb175a..08e44fdc 100644
Vojtech Trefny 75aaea
--- a/tests/library_test.py
Vojtech Trefny 75aaea
+++ b/tests/library_test.py
Vojtech Trefny 75aaea
@@ -349,8 +349,7 @@ def test_try_reinit(self):
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
         # try reinitializing with only some utilities being available and thus
Vojtech Trefny 75aaea
         # only some plugins able to load
Vojtech Trefny 75aaea
-        with fake_path("tests/lib_missing_utils", keep_utils=["swapon", "swapoff", "mkswap", "lvm",
Vojtech Trefny 75aaea
-                                                              "thin_metadata_size", "swaplabel"]):
Vojtech Trefny 75aaea
+        with fake_path("tests/lib_missing_utils", keep_utils=["swapon", "swapoff", "mkswap", "lvm", "swaplabel"]):
Vojtech Trefny 75aaea
             succ, loaded = BlockDev.try_reinit(self.requested_plugins, True, None)
Vojtech Trefny 75aaea
             self.assertFalse(succ)
Vojtech Trefny 75aaea
             for plug_name in ("swap", "lvm", "crypto"):
Vojtech Trefny 75aaea
@@ -361,8 +360,7 @@ def test_try_reinit(self):
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
         # now the same with a subset of plugins requested
Vojtech Trefny 75aaea
         plugins = BlockDev.plugin_specs_from_names(["lvm", "swap", "crypto"])
Vojtech Trefny 75aaea
-        with fake_path("tests/lib_missing_utils", keep_utils=["swapon", "swapoff", "mkswap", "lvm",
Vojtech Trefny 75aaea
-                                                              "thin_metadata_size", "swaplabel"]):
Vojtech Trefny 75aaea
+        with fake_path("tests/lib_missing_utils", keep_utils=["swapon", "swapoff", "mkswap", "lvm","swaplabel"]):
Vojtech Trefny 75aaea
             succ, loaded = BlockDev.try_reinit(plugins, True, None)
Vojtech Trefny 75aaea
             self.assertTrue(succ)
Vojtech Trefny 75aaea
             self.assertEqual(set(loaded), set(["swap", "lvm", "crypto"]))
Vojtech Trefny 75aaea
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
index b517aae9..c06a480c 100644
Vojtech Trefny 75aaea
--- a/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
+++ b/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
@@ -141,21 +141,19 @@ def test_get_thpool_padding(self):
Vojtech Trefny 75aaea
     def test_get_thpool_meta_size(self):
Vojtech Trefny 75aaea
         """Verify that getting recommended thin pool metadata size works as expected"""
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        # no idea how thin_metadata_size works, but let's at least check that
Vojtech Trefny 75aaea
-        # the function works and returns what thin_metadata_size says
Vojtech Trefny 75aaea
-        out1 = subprocess.check_output(["thin_metadata_size", "-ub", "-n", "-b64k", "-s1t", "-m100"])
Vojtech Trefny 75aaea
-        self.assertEqual(int(out1), BlockDev.lvm_get_thpool_meta_size (1 * 1024**4, 64 * 1024, 100))
Vojtech Trefny 75aaea
+        # metadata size is calculated as 64 * pool_size / chunk_size
Vojtech Trefny 75aaea
+        self.assertEqual(BlockDev.lvm_get_thpool_meta_size(1 * 1024**4, 64 * 1024), 1 * 1024**3)
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        out2 = subprocess.check_output(["thin_metadata_size", "-ub", "-n", "-b128k", "-s1t", "-m100"])
Vojtech Trefny 75aaea
-        self.assertEqual(int(out2), BlockDev.lvm_get_thpool_meta_size (1 * 1024**4, 128 * 1024, 100))
Vojtech Trefny 75aaea
+        self.assertEqual(BlockDev.lvm_get_thpool_meta_size(1 * 1024**4, 128 * 1024),  512 * 1024**2)
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        # twice the chunk_size -> roughly half the metadata needed
Vojtech Trefny 75aaea
-        self.assertAlmostEqual(float(out1) / float(out2), 2, places=2)
Vojtech Trefny 75aaea
-
Vojtech Trefny 75aaea
-        # unless thin_metadata_size gives a value that is not valid (too small)
Vojtech Trefny 75aaea
-        self.assertEqual(BlockDev.lvm_get_thpool_meta_size (100 * 1024**2, 128 * 1024, 100),
Vojtech Trefny 75aaea
+        # lower limit is 4 MiB
Vojtech Trefny 75aaea
+        self.assertEqual(BlockDev.lvm_get_thpool_meta_size(100 * 1024**2, 128 * 1024),
Vojtech Trefny 75aaea
                          BlockDev.LVM_MIN_THPOOL_MD_SIZE)
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
+        # upper limit is 31.62 GiB
Vojtech Trefny 75aaea
+        self.assertEqual(BlockDev.lvm_get_thpool_meta_size(100 * 1024**4, 64 * 1024),
Vojtech Trefny 75aaea
+                         BlockDev.LVM_MAX_THPOOL_MD_SIZE)
Vojtech Trefny 75aaea
+
Vojtech Trefny 75aaea
     @tag_test(TestTags.NOSTORAGE)
Vojtech Trefny 75aaea
     def test_is_valid_thpool_md_size(self):
Vojtech Trefny 75aaea
         """Verify that is_valid_thpool_md_size works as expected"""
Vojtech Trefny 75aaea
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
Vojtech Trefny 75aaea
index d0085651..b84adece 100644
Vojtech Trefny 75aaea
--- a/tests/lvm_test.py
Vojtech Trefny 75aaea
+++ b/tests/lvm_test.py
Vojtech Trefny 75aaea
@@ -134,19 +134,14 @@ def test_get_thpool_padding(self):
Vojtech Trefny 75aaea
     def test_get_thpool_meta_size(self):
Vojtech Trefny 75aaea
         """Verify that getting recommended thin pool metadata size works as expected"""
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        # no idea how thin_metadata_size works, but let's at least check that
Vojtech Trefny 75aaea
-        # the function works and returns what thin_metadata_size says
Vojtech Trefny 75aaea
-        out1 = subprocess.check_output(["thin_metadata_size", "-ub", "-n", "-b64k", "-s1t", "-m100"])
Vojtech Trefny 75aaea
-        self.assertEqual(int(out1), BlockDev.lvm_get_thpool_meta_size (1 * 1024**4, 64 * 1024, 100))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        out2 = subprocess.check_output(["thin_metadata_size", "-ub", "-n", "-b128k", "-s1t", "-m100"])
Vojtech Trefny 75aaea
-        self.assertEqual(int(out2), BlockDev.lvm_get_thpool_meta_size (1 * 1024**4, 128 * 1024, 100))
Vojtech Trefny 75aaea
+        self.assertEqual(BlockDev.lvm_get_thpool_meta_size(1 * 1024**4, 64 * 1024),
Vojtech Trefny 75aaea
+                         1 * 1024**3)
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        # twice the chunk_size -> roughly half the metadata needed
Vojtech Trefny 75aaea
-        self.assertAlmostEqual(float(out1) / float(out2), 2, places=2)
Vojtech Trefny 75aaea
+        self.assertEqual(BlockDev.lvm_get_thpool_meta_size(1 * 1024**4, 128 * 1024),
Vojtech Trefny 75aaea
+                         512 * 1024**2)
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-        # unless thin_metadata_size gives a value that is not valid (too small)
Vojtech Trefny 75aaea
-        self.assertEqual(BlockDev.lvm_get_thpool_meta_size (100 * 1024**2, 128 * 1024, 100),
Vojtech Trefny 75aaea
+        self.assertEqual(BlockDev.lvm_get_thpool_meta_size(100 * 1024**2, 128 * 1024),
Vojtech Trefny 75aaea
                          BlockDev.LVM_MIN_THPOOL_MD_SIZE)
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     @tag_test(TestTags.NOSTORAGE)
Vojtech Trefny 75aaea
diff --git a/tests/utils.py b/tests/utils.py
Vojtech Trefny 75aaea
index 182eda6a..584fde5c 100644
Vojtech Trefny 75aaea
--- a/tests/utils.py
Vojtech Trefny 75aaea
+++ b/tests/utils.py
Vojtech Trefny 75aaea
@@ -70,7 +70,7 @@ def fake_utils(path="."):
Vojtech Trefny 75aaea
     finally:
Vojtech Trefny 75aaea
         os.environ["PATH"] = old_path
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-ALL_UTILS = {"lvm", "thin_metadata_size", "btrfs", "mkswap", "swaplabel", "multipath", "mpathconf", "dmsetup", "mdadm", "make-bcache", "sgdisk", "sfdisk"}
Vojtech Trefny 75aaea
+ALL_UTILS = {"lvm", "btrfs", "mkswap", "swaplabel", "multipath", "mpathconf", "dmsetup", "mdadm", "make-bcache", "sgdisk", "sfdisk"}
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 @contextmanager
Vojtech Trefny 75aaea
 def fake_path(path=None, keep_utils=None, all_but=None):
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
From 27961a3fcb205ea51f40668d68765dd8d388777b Mon Sep 17 00:00:00 2001
Vojtech Trefny 75aaea
From: Vojtech Trefny <vtrefny@redhat.com>
Vojtech Trefny 75aaea
Date: Thu, 3 Dec 2020 14:48:08 +0100
Vojtech Trefny 75aaea
Subject: [PATCH 4/5] lvm: Use the UNUSED macro instead of
Vojtech Trefny 75aaea
 __attribute__((unused))
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
for unused attributes. It makes the function definition a little
Vojtech Trefny 75aaea
bit more readable.
Vojtech Trefny 75aaea
---
Vojtech Trefny 75aaea
 src/plugins/lvm-dbus.c | 24 ++++++++++++------------
Vojtech Trefny 75aaea
 src/plugins/lvm.c      | 20 ++++++++++----------
Vojtech Trefny 75aaea
 2 files changed, 22 insertions(+), 22 deletions(-)
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
Vojtech Trefny 75aaea
index 24d54426..b7b4480e 100644
Vojtech Trefny 75aaea
--- a/src/plugins/lvm-dbus.c
Vojtech Trefny 75aaea
+++ b/src/plugins/lvm-dbus.c
Vojtech Trefny 75aaea
@@ -959,7 +959,7 @@ static BDLVMPVdata* get_pv_data_from_props (GVariant *props, GError **error) {
Vojtech Trefny 75aaea
     return data;
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-static BDLVMVGdata* get_vg_data_from_props (GVariant *props, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+static BDLVMVGdata* get_vg_data_from_props (GVariant *props, GError **error UNUSED) {
Vojtech Trefny 75aaea
     BDLVMVGdata *data = g_new0 (BDLVMVGdata, 1);
Vojtech Trefny 75aaea
     GVariantDict dict;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -1061,7 +1061,7 @@ static BDLVMLVdata* get_lv_data_from_props (GVariant *props, GError **error) {
Vojtech Trefny 75aaea
     return data;
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-static BDLVMVDOPooldata* get_vdo_data_from_props (GVariant *props, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+static BDLVMVDOPooldata* get_vdo_data_from_props (GVariant *props, GError **error UNUSED) {
Vojtech Trefny 75aaea
     BDLVMVDOPooldata *data = g_new0 (BDLVMVDOPooldata, 1);
Vojtech Trefny 75aaea
     GVariantDict dict;
Vojtech Trefny 75aaea
     gchar *value = NULL;
Vojtech Trefny 75aaea
@@ -1165,7 +1165,7 @@ static GVariant* create_size_str_param (guint64 size, const gchar *unit) {
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error UNUSED) {
Vojtech Trefny 75aaea
     return (((size % 2) == 0) && (size >= (BD_LVM_MIN_PE_SIZE)) && (size <= (BD_LVM_MAX_PE_SIZE)));
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -1177,7 +1177,7 @@ gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error __attribute__
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 *bd_lvm_get_supported_pe_sizes (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+guint64 *bd_lvm_get_supported_pe_sizes (GError **error UNUSED) {
Vojtech Trefny 75aaea
     guint8 i;
Vojtech Trefny 75aaea
     guint64 val = BD_LVM_MIN_PE_SIZE;
Vojtech Trefny 75aaea
     guint8 num_items = ((guint8) round (log2 ((double) BD_LVM_MAX_PE_SIZE))) - ((guint8) round (log2 ((double) BD_LVM_MIN_PE_SIZE))) + 2;
Vojtech Trefny 75aaea
@@ -1199,7 +1199,7 @@ guint64 *bd_lvm_get_supported_pe_sizes (GError **error __attribute__((unused)))
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 bd_lvm_get_max_lv_size (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+guint64 bd_lvm_get_max_lv_size (GError **error UNUSED) {
Vojtech Trefny 75aaea
     return BD_LVM_MAX_LV_SIZE;
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -1219,7 +1219,7 @@ guint64 bd_lvm_get_max_lv_size (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 bd_lvm_round_size_to_pe (guint64 size, guint64 pe_size, gboolean roundup, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+guint64 bd_lvm_round_size_to_pe (guint64 size, guint64 pe_size, gboolean roundup, GError **error UNUSED) {
Vojtech Trefny 75aaea
     pe_size = RESOLVE_PE_SIZE(pe_size);
Vojtech Trefny 75aaea
     guint64 delta = size % pe_size;
Vojtech Trefny 75aaea
     if (delta == 0)
Vojtech Trefny 75aaea
@@ -1313,7 +1313,7 @@ guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error UNUSED) {
Vojtech Trefny 75aaea
     return ((BD_LVM_MIN_THPOOL_MD_SIZE <= size) && (size <= BD_LVM_MAX_THPOOL_MD_SIZE));
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -1327,7 +1327,7 @@ gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error __attribut
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gboolean bd_lvm_is_valid_thpool_chunk_size (guint64 size, gboolean discard, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gboolean bd_lvm_is_valid_thpool_chunk_size (guint64 size, gboolean discard, GError **error UNUSED) {
Vojtech Trefny 75aaea
     gdouble size_log2 = 0.0;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     if ((size < BD_LVM_MIN_THPOOL_CHUNK_SIZE) || (size > BD_LVM_MAX_THPOOL_CHUNK_SIZE))
Vojtech Trefny 75aaea
@@ -2616,7 +2616,7 @@ gboolean bd_lvm_thsnapshotcreate (const gchar *vg_name, const gchar *origin_name
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_GLOB_CONF no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error UNUSED) {
Vojtech Trefny 75aaea
     /* XXX: the error attribute will likely be used in the future when
Vojtech Trefny 75aaea
        some validation comes into the game */
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -2641,7 +2641,7 @@ gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error __att
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_GLOB_CONF no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gchar* bd_lvm_get_global_config (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gchar* bd_lvm_get_global_config (GError **error UNUSED) {
Vojtech Trefny 75aaea
     gchar *ret = NULL;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     g_mutex_lock (&global_config_lock);
Vojtech Trefny 75aaea
@@ -2660,7 +2660,7 @@ gchar* bd_lvm_get_global_config (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CACHE_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error UNUSED) {
Vojtech Trefny 75aaea
     return MAX ((guint64) cache_size / 1000, BD_LVM_MIN_CACHE_MD_SIZE);
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -2670,7 +2670,7 @@ guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error __a
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Get LV type string from flags.
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-static const gchar* get_lv_type_from_flags (BDLVMCachePoolFlags flags, gboolean meta, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+static const gchar* get_lv_type_from_flags (BDLVMCachePoolFlags flags, gboolean meta, GError **error UNUSED) {
Vojtech Trefny 75aaea
     if (!meta) {
Vojtech Trefny 75aaea
         if (flags & BD_LVM_CACHE_POOL_STRIPED)
Vojtech Trefny 75aaea
             return "striped";
Vojtech Trefny 75aaea
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
Vojtech Trefny 75aaea
index 74493feb..2be1dbdb 100644
Vojtech Trefny 75aaea
--- a/src/plugins/lvm.c
Vojtech Trefny 75aaea
+++ b/src/plugins/lvm.c
Vojtech Trefny 75aaea
@@ -700,7 +700,7 @@ static BDLVMVDOPooldata* get_vdo_data_from_table (GHashTable *table, gboolean fr
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error UNUSED) {
Vojtech Trefny 75aaea
     return (((size % 2) == 0) && (size >= (BD_LVM_MIN_PE_SIZE)) && (size <= (BD_LVM_MAX_PE_SIZE)));
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -712,7 +712,7 @@ gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error __attribute__
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 *bd_lvm_get_supported_pe_sizes (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+guint64 *bd_lvm_get_supported_pe_sizes (GError **error UNUSED) {
Vojtech Trefny 75aaea
     guint8 i;
Vojtech Trefny 75aaea
     guint64 val = BD_LVM_MIN_PE_SIZE;
Vojtech Trefny 75aaea
     guint8 num_items = ((guint8) round (log2 ((double) BD_LVM_MAX_PE_SIZE))) - ((guint8) round (log2 ((double) BD_LVM_MIN_PE_SIZE))) + 2;
Vojtech Trefny 75aaea
@@ -734,7 +734,7 @@ guint64 *bd_lvm_get_supported_pe_sizes (GError **error __attribute__((unused)))
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 bd_lvm_get_max_lv_size (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+guint64 bd_lvm_get_max_lv_size (GError **error UNUSED) {
Vojtech Trefny 75aaea
     return BD_LVM_MAX_LV_SIZE;
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -754,7 +754,7 @@ guint64 bd_lvm_get_max_lv_size (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 bd_lvm_round_size_to_pe (guint64 size, guint64 pe_size, gboolean roundup, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+guint64 bd_lvm_round_size_to_pe (guint64 size, guint64 pe_size, gboolean roundup, GError **error UNUSED) {
Vojtech Trefny 75aaea
     pe_size = RESOLVE_PE_SIZE(pe_size);
Vojtech Trefny 75aaea
     guint64 delta = size % pe_size;
Vojtech Trefny 75aaea
     if (delta == 0)
Vojtech Trefny 75aaea
@@ -848,7 +848,7 @@ guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error UNUSED) {
Vojtech Trefny 75aaea
     return ((BD_LVM_MIN_THPOOL_MD_SIZE <= size) && (size <= BD_LVM_MAX_THPOOL_MD_SIZE));
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -862,7 +862,7 @@ gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error __attribut
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gboolean bd_lvm_is_valid_thpool_chunk_size (guint64 size, gboolean discard, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gboolean bd_lvm_is_valid_thpool_chunk_size (guint64 size, gboolean discard, GError **error UNUSED) {
Vojtech Trefny 75aaea
     gdouble size_log2 = 0.0;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     if ((size < BD_LVM_MIN_THPOOL_CHUNK_SIZE) || (size > BD_LVM_MAX_THPOOL_CHUNK_SIZE))
Vojtech Trefny 75aaea
@@ -1983,7 +1983,7 @@ gboolean bd_lvm_thsnapshotcreate (const gchar *vg_name, const gchar *origin_name
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_GLOB_CONF no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error UNUSED) {
Vojtech Trefny 75aaea
     /* XXX: the error attribute will likely be used in the future when
Vojtech Trefny 75aaea
        some validation comes into the game */
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -2008,7 +2008,7 @@ gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error __att
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_GLOB_CONF no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-gchar* bd_lvm_get_global_config (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+gchar* bd_lvm_get_global_config (GError **error UNUSED) {
Vojtech Trefny 75aaea
     gchar *ret = NULL;
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     g_mutex_lock (&global_config_lock);
Vojtech Trefny 75aaea
@@ -2027,7 +2027,7 @@ gchar* bd_lvm_get_global_config (GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Tech category: %BD_LVM_TECH_CACHE_CALCS no mode (it is ignored)
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error UNUSED) {
Vojtech Trefny 75aaea
     return MAX ((guint64) cache_size / 1000, BD_LVM_MIN_CACHE_MD_SIZE);
Vojtech Trefny 75aaea
 }
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
@@ -2037,7 +2037,7 @@ guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error __a
Vojtech Trefny 75aaea
  *
Vojtech Trefny 75aaea
  * Get LV type string from flags.
Vojtech Trefny 75aaea
  */
Vojtech Trefny 75aaea
-static const gchar* get_lv_type_from_flags (BDLVMCachePoolFlags flags, gboolean meta, GError **error __attribute__((unused))) {
Vojtech Trefny 75aaea
+static const gchar* get_lv_type_from_flags (BDLVMCachePoolFlags flags, gboolean meta, GError **error UNUSED) {
Vojtech Trefny 75aaea
     if (!meta) {
Vojtech Trefny 75aaea
         if (flags & BD_LVM_CACHE_POOL_STRIPED)
Vojtech Trefny 75aaea
             return "striped";
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
From f106e775d3c73e5f97512dd109627e00539b703a Mon Sep 17 00:00:00 2001
Vojtech Trefny 75aaea
From: Vojtech Trefny <vtrefny@redhat.com>
Vojtech Trefny 75aaea
Date: Tue, 15 Dec 2020 14:53:13 +0100
Vojtech Trefny 75aaea
Subject: [PATCH 5/5] Fix max size limit for LVM thinpool metadata
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
DM_THIN_MAX_METADATA_SIZE is in 512 sectors, not in KiB so the
Vojtech Trefny 75aaea
upper limit is 15.81 GiB not 31.62 GiB
Vojtech Trefny 75aaea
---
Vojtech Trefny 75aaea
 src/lib/plugin_apis/lvm.api |  2 +-
Vojtech Trefny 75aaea
 src/plugins/lvm.h           | 10 ++++++----
Vojtech Trefny 75aaea
 tests/lvm_dbus_tests.py     |  3 ++-
Vojtech Trefny 75aaea
 tests/lvm_test.py           |  3 ++-
Vojtech Trefny 75aaea
 4 files changed, 11 insertions(+), 7 deletions(-)
Vojtech Trefny 75aaea
Vojtech Trefny 75aaea
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
index 9f25c1ed..563c1041 100644
Vojtech Trefny 75aaea
--- a/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
+++ b/src/lib/plugin_apis/lvm.api
Vojtech Trefny 75aaea
@@ -20,7 +20,7 @@
Vojtech Trefny 75aaea
 #define BD_LVM_MIN_PE_SIZE G_GUINT64_CONSTANT (1024ULL) // 1 KiB
Vojtech Trefny 75aaea
 #define BD_LVM_MAX_PE_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
Vojtech Trefny 75aaea
 #define BD_LVM_MIN_THPOOL_MD_SIZE G_GUINT64_CONSTANT (4194304ULL) // 4 MiB
Vojtech Trefny 75aaea
-#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (33957085184ULL) // 31.62 GiB
Vojtech Trefny 75aaea
+#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (16978542592ULL) // 15.81 GiB
Vojtech Trefny 75aaea
 #define BD_LVM_MIN_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
Vojtech Trefny 75aaea
 #define BD_LVM_MAX_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (1073741824ULL) // 1 GiB
Vojtech Trefny 75aaea
 #define BD_LVM_DEFAULT_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
Vojtech Trefny 75aaea
diff --git a/src/plugins/lvm.h b/src/plugins/lvm.h
Vojtech Trefny 75aaea
index 01c06ca4..2162d769 100644
Vojtech Trefny 75aaea
--- a/src/plugins/lvm.h
Vojtech Trefny 75aaea
+++ b/src/plugins/lvm.h
Vojtech Trefny 75aaea
@@ -22,11 +22,13 @@
Vojtech Trefny 75aaea
 #define USE_DEFAULT_PE_SIZE 0
Vojtech Trefny 75aaea
 #define RESOLVE_PE_SIZE(size) ((size) == USE_DEFAULT_PE_SIZE ? BD_LVM_DEFAULT_PE_SIZE : (size))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
-/* lvm constants for thin pool metadata size are actually half of these
Vojtech Trefny 75aaea
-   but when they calculate the actual metadata size they double the limits
Vojtech Trefny 75aaea
-   so lets just double the limits here too */
Vojtech Trefny 75aaea
+/* lvm constant for thin pool metadata size is actually half of this
Vojtech Trefny 75aaea
+   but when they calculate the actual metadata size they double the limit
Vojtech Trefny 75aaea
+   so lets just double the limit here too */
Vojtech Trefny 75aaea
 #define BD_LVM_MIN_THPOOL_MD_SIZE (4 MiB)
Vojtech Trefny 75aaea
-#define BD_LVM_MAX_THPOOL_MD_SIZE (DM_THIN_MAX_METADATA_SIZE KiB)
Vojtech Trefny 75aaea
+
Vojtech Trefny 75aaea
+/* DM_THIN_MAX_METADATA_SIZE is in 512 sectors */
Vojtech Trefny 75aaea
+#define BD_LVM_MAX_THPOOL_MD_SIZE (DM_THIN_MAX_METADATA_SIZE * 512)
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
 #define BD_LVM_MIN_THPOOL_CHUNK_SIZE (64 KiB)
Vojtech Trefny 75aaea
 #define BD_LVM_MAX_THPOOL_CHUNK_SIZE (1 GiB)
Vojtech Trefny 75aaea
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
index c06a480c..8f2bb95d 100644
Vojtech Trefny 75aaea
--- a/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
+++ b/tests/lvm_dbus_tests.py
Vojtech Trefny 75aaea
@@ -160,10 +160,11 @@ def test_is_valid_thpool_md_size(self):
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
         self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(4 * 1024**2))
Vojtech Trefny 75aaea
         self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(5 * 1024**2))
Vojtech Trefny 75aaea
-        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
Vojtech Trefny 75aaea
+        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(15 * 1024**3))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
         self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(1 * 1024**2))
Vojtech Trefny 75aaea
         self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
Vojtech Trefny 75aaea
+        self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
Vojtech Trefny 75aaea
         self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(32 * 1024**3))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     @tag_test(TestTags.NOSTORAGE)
Vojtech Trefny 75aaea
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
Vojtech Trefny 75aaea
index b84adece..6f80a3ba 100644
Vojtech Trefny 75aaea
--- a/tests/lvm_test.py
Vojtech Trefny 75aaea
+++ b/tests/lvm_test.py
Vojtech Trefny 75aaea
@@ -150,10 +150,11 @@ def test_is_valid_thpool_md_size(self):
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
         self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(4 * 1024**2))
Vojtech Trefny 75aaea
         self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(5 * 1024**2))
Vojtech Trefny 75aaea
-        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
Vojtech Trefny 75aaea
+        self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(15 * 1024**3))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
         self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(1 * 1024**2))
Vojtech Trefny 75aaea
         self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
Vojtech Trefny 75aaea
+        self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
Vojtech Trefny 75aaea
         self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(32 * 1024**3))
Vojtech Trefny 75aaea
 
Vojtech Trefny 75aaea
     @tag_test(TestTags.NOSTORAGE)