Rebase to the latest upstream release 2.28
Resolves: rhbz#2123346 Resolves: rhbz#2121072 Resolves: rhbz#2116544
This commit is contained in:
parent
4e022d3ec0
commit
bb62668d70
1
.gitignore
vendored
1
.gitignore
vendored
@ -46,3 +46,4 @@
|
||||
/libblockdev-2.23.tar.gz
|
||||
/libblockdev-2.24.tar.gz
|
||||
/libblockdev-2.25.tar.gz
|
||||
/libblockdev-2.28.tar.gz
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 2da13152619ee7233650339797657b45088b2219 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 18 Aug 2020 09:44:29 +0200
|
||||
Subject: [PATCH] dm: Fix comparing DM RAID member devices UUID
|
||||
|
||||
There is no "UUID" property in UDev we must use the "ID_FS_UUID"
|
||||
one.
|
||||
This comparison works only because most DM RAID members don't have
|
||||
UUID so the check is skipped, but it fails for DDF RAID members
|
||||
which have a special GUID/UUID in UDev database.
|
||||
---
|
||||
src/plugins/dm.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/plugins/dm.c b/src/plugins/dm.c
|
||||
index a6412028..4ab0d2a4 100644
|
||||
--- a/src/plugins/dm.c
|
||||
+++ b/src/plugins/dm.c
|
||||
@@ -482,7 +482,7 @@ static gboolean raid_dev_matches_spec (struct raid_dev *raid_dev, const gchar *n
|
||||
|
||||
context = udev_new ();
|
||||
device = udev_device_new_from_subsystem_sysname (context, "block", dev_name);
|
||||
- dev_uuid = udev_device_get_property_value (device, "UUID");
|
||||
+ dev_uuid = udev_device_get_property_value (device, "ID_FS_UUID");
|
||||
major_str = udev_device_get_property_value (device, "MAJOR");
|
||||
minor_str = udev_device_get_property_value (device, "MINOR");
|
||||
|
@ -1,7 +1,7 @@
|
||||
From e364883416785d51ff8eb132b63bd802ab0ccfe9 Mon Sep 17 00:00:00 2001
|
||||
From 94d707dd225104ba14422eeb43c73b1f742b12da Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 13 Jul 2021 13:22:05 +0200
|
||||
Subject: [PATCH 1/8] lvm: Allow configuring global "device filter" for LVM
|
||||
Subject: [PATCH 1/7] lvm: Allow configuring global "device filter" for LVM
|
||||
commands
|
||||
|
||||
Starting with 2.03.12 LVM introduces a new system for telling LVM
|
||||
@ -14,17 +14,17 @@ for our users, this commit introduces a new function to configure
|
||||
this globally, which we already do for the --config option.
|
||||
---
|
||||
src/lib/plugin_apis/lvm.api | 23 +++
|
||||
src/plugins/lvm-dbus.c | 74 ++++++++-
|
||||
src/plugins/lvm-dbus.c | 75 ++++++++-
|
||||
src/plugins/lvm.c | 97 ++++++++++--
|
||||
src/plugins/lvm.h | 4 +
|
||||
tests/library_test.py | 304 ++++++++++++++++++++----------------
|
||||
tests/lvm_dbus_tests.py | 47 +++++-
|
||||
tests/lvm_test.py | 50 ++++++
|
||||
tests/overrides_test.py | 23 ++-
|
||||
8 files changed, 469 insertions(+), 153 deletions(-)
|
||||
8 files changed, 470 insertions(+), 153 deletions(-)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
|
||||
index 563c104..62f602f 100644
|
||||
index c695c111..23f68b81 100644
|
||||
--- a/src/lib/plugin_apis/lvm.api
|
||||
+++ b/src/lib/plugin_apis/lvm.api
|
||||
@@ -601,6 +601,7 @@ typedef enum {
|
||||
@ -65,7 +65,7 @@ index 563c104..62f602f 100644
|
||||
* bd_lvm_cache_get_default_md_size:
|
||||
* @cache_size: size of the cache to determine MD size for
|
||||
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
|
||||
index 144551f..d1726ed 100644
|
||||
index 51572c9a..b47ed0ef 100644
|
||||
--- a/src/plugins/lvm-dbus.c
|
||||
+++ b/src/plugins/lvm-dbus.c
|
||||
@@ -35,6 +35,8 @@
|
||||
@ -77,7 +77,13 @@ index 144551f..d1726ed 100644
|
||||
#define LVM_BUS_NAME "com.redhat.lvmdbus1"
|
||||
#define LVM_OBJ_PREFIX "/com/redhat/lvmdbus1"
|
||||
#define MANAGER_OBJ "/com/redhat/lvmdbus1/Manager"
|
||||
@@ -247,6 +249,14 @@ static volatile guint avail_features = 0;
|
||||
@@ -241,11 +243,20 @@ static gboolean setup_dbus_connection (GError **error) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+static volatile guint avail_deps = 0;
|
||||
static volatile guint avail_dbus_deps = 0;
|
||||
static volatile guint avail_features = 0;
|
||||
static volatile guint avail_module_deps = 0;
|
||||
static GMutex deps_check_lock;
|
||||
|
||||
@ -92,16 +98,16 @@ index 144551f..d1726ed 100644
|
||||
#define DBUS_DEPS_LVMDBUSD 0
|
||||
#define DBUS_DEPS_LVMDBUSD_MASK (1 << DBUS_DEPS_LVMDBUSD)
|
||||
#define DBUS_DEPS_LAST 1
|
||||
@@ -385,6 +395,8 @@ gboolean bd_lvm_is_tech_avail (BDLVMTech tech, guint64 mode, GError **error) {
|
||||
return check_dbus_deps (&avail_dbus_deps, DBUS_DEPS_LVMDBUSD_MASK, dbus_deps, DBUS_DEPS_LAST, &deps_check_lock, error) &&
|
||||
check_features (&avail_features, FEATURES_VDO_MASK, features, FEATURES_LAST, &deps_check_lock, error) &&
|
||||
check_module_deps (&avail_module_deps, MODULE_DEPS_VDO_MASK, module_deps, MODULE_DEPS_LAST, &deps_check_lock, error);
|
||||
@@ -378,6 +389,8 @@ gboolean bd_lvm_is_tech_avail (BDLVMTech tech, guint64 mode, GError **error) {
|
||||
return check_dbus_deps (&avail_dbus_deps, DBUS_DEPS_LVMDBUSD_MASK, dbus_deps, DBUS_DEPS_LAST, &deps_check_lock, error) &&
|
||||
check_features (&avail_features, FEATURES_VDO_MASK, features, FEATURES_LAST, &deps_check_lock, error) &&
|
||||
check_module_deps (&avail_module_deps, MODULE_DEPS_VDO_MASK, module_deps, MODULE_DEPS_LAST, &deps_check_lock, error);
|
||||
+ case BD_LVM_TECH_DEVICES:
|
||||
+ return check_deps (&avail_deps, DEPS_LVMDEVICES_MASK, deps, DEPS_LAST, &deps_check_lock, error);
|
||||
default:
|
||||
/* everything is supported by this implementation of the plugin */
|
||||
return check_dbus_deps (&avail_dbus_deps, DBUS_DEPS_LVMDBUSD_MASK, dbus_deps, DBUS_DEPS_LAST, &deps_check_lock, error);
|
||||
@@ -522,6 +534,7 @@ static gboolean unbox_params_and_add (GVariant *params, GVariantBuilder *builder
|
||||
@@ -515,6 +528,7 @@ static gboolean unbox_params_and_add (GVariant *params, GVariantBuilder *builder
|
||||
|
||||
static GVariant* call_lvm_method (const gchar *obj, const gchar *intf, const gchar *method, GVariant *params, GVariant *extra_params, const BDExtraArg **extra_args, guint64 *task_id, guint64 *progress_id, gboolean lock_config, GError **error) {
|
||||
GVariant *config = NULL;
|
||||
@ -109,7 +115,7 @@ index 144551f..d1726ed 100644
|
||||
GVariant *param = NULL;
|
||||
GVariantIter iter;
|
||||
GVariantBuilder builder;
|
||||
@@ -543,8 +556,8 @@ static GVariant* call_lvm_method (const gchar *obj, const gchar *intf, const gch
|
||||
@@ -536,8 +550,8 @@ static GVariant* call_lvm_method (const gchar *obj, const gchar *intf, const gch
|
||||
if (lock_config)
|
||||
g_mutex_lock (&global_config_lock);
|
||||
|
||||
@ -120,7 +126,7 @@ index 144551f..d1726ed 100644
|
||||
/* add the global config to the extra_params */
|
||||
g_variant_builder_init (&extra_builder, G_VARIANT_TYPE_DICTIONARY);
|
||||
|
||||
@@ -565,6 +578,11 @@ static GVariant* call_lvm_method (const gchar *obj, const gchar *intf, const gch
|
||||
@@ -558,6 +572,11 @@ static GVariant* call_lvm_method (const gchar *obj, const gchar *intf, const gch
|
||||
g_variant_builder_add (&extra_builder, "{sv}", "--config", config);
|
||||
added_extra = TRUE;
|
||||
}
|
||||
@ -132,7 +138,7 @@ index 144551f..d1726ed 100644
|
||||
|
||||
if (added_extra)
|
||||
config_extra_params = g_variant_builder_end (&extra_builder);
|
||||
@@ -2651,6 +2669,58 @@ gchar* bd_lvm_get_global_config (GError **error UNUSED) {
|
||||
@@ -2654,6 +2673,58 @@ gchar* bd_lvm_get_global_config (GError **error UNUSED) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -192,7 +198,7 @@ index 144551f..d1726ed 100644
|
||||
* bd_lvm_cache_get_default_md_size:
|
||||
* @cache_size: size of the cache to determine MD size for
|
||||
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
|
||||
index 2be1dbd..c0d8198 100644
|
||||
index 26af0d19..42ee0f90 100644
|
||||
--- a/src/plugins/lvm.c
|
||||
+++ b/src/plugins/lvm.c
|
||||
@@ -34,6 +34,8 @@
|
||||
@ -309,7 +315,7 @@ index 2be1dbd..c0d8198 100644
|
||||
g_free (argv);
|
||||
|
||||
return success;
|
||||
@@ -2018,6 +2041,58 @@ gchar* bd_lvm_get_global_config (GError **error UNUSED) {
|
||||
@@ -2033,6 +2056,58 @@ gchar* bd_lvm_get_global_config (GError **error UNUSED) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -369,7 +375,7 @@ index 2be1dbd..c0d8198 100644
|
||||
* bd_lvm_cache_get_default_md_size:
|
||||
* @cache_size: size of the cache to determine MD size for
|
||||
diff --git a/src/plugins/lvm.h b/src/plugins/lvm.h
|
||||
index 2162d76..8063693 100644
|
||||
index 2162d769..8063693f 100644
|
||||
--- a/src/plugins/lvm.h
|
||||
+++ b/src/plugins/lvm.h
|
||||
@@ -216,6 +216,7 @@ typedef enum {
|
||||
@ -391,7 +397,7 @@ index 2162d76..8063693 100644
|
||||
const gchar* bd_lvm_cache_get_mode_str (BDLVMCacheMode mode, GError **error);
|
||||
BDLVMCacheMode bd_lvm_cache_get_mode_from_str (const gchar *mode_str, GError **error);
|
||||
diff --git a/tests/library_test.py b/tests/library_test.py
|
||||
index 08e44fd..efd17bd 100644
|
||||
index 08e44fdc..efd17bd2 100644
|
||||
--- a/tests/library_test.py
|
||||
+++ b/tests/library_test.py
|
||||
@@ -13,18 +13,178 @@ class LibraryOpsTestCase(unittest.TestCase):
|
||||
@ -739,10 +745,10 @@ index 08e44fd..efd17bd 100644
|
||||
def test_dep_checks_disabled(self):
|
||||
"""Verify that disabling runtime dep checks works"""
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index 4882da8..35ace37 100644
|
||||
index 3fb7946a..ae26c6d2 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -33,6 +33,11 @@ class LVMTestCase(unittest.TestCase):
|
||||
@@ -50,6 +50,11 @@ class LVMTestCase(unittest.TestCase):
|
||||
else:
|
||||
BlockDev.reinit([cls.ps, cls.ps2], True, None)
|
||||
|
||||
@ -754,7 +760,7 @@ index 4882da8..35ace37 100644
|
||||
@classmethod
|
||||
def _get_lvm_version(cls):
|
||||
_ret, out, _err = run_command("lvm version")
|
||||
@@ -44,8 +49,7 @@ class LVMTestCase(unittest.TestCase):
|
||||
@@ -61,8 +66,7 @@ class LVMTestCase(unittest.TestCase):
|
||||
@unittest.skipUnless(lvm_dbus_running, "LVM DBus not running")
|
||||
class LvmNoDevTestCase(LVMTestCase):
|
||||
|
||||
@ -764,7 +770,7 @@ index 4882da8..35ace37 100644
|
||||
self._log = ""
|
||||
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
@@ -227,6 +231,45 @@ class LvmNoDevTestCase(LVMTestCase):
|
||||
@@ -250,6 +254,45 @@ class LvmNoDevTestCase(LVMTestCase):
|
||||
succ = BlockDev.lvm_set_global_config(None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
@ -811,10 +817,10 @@ index 4882da8..35ace37 100644
|
||||
def test_cache_get_default_md_size(self):
|
||||
"""Verify that default cache metadata size is calculated properly"""
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index eb94c91..b37a879 100644
|
||||
index 7be8f1ab..11d8c94e 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -22,10 +22,17 @@ class LVMTestCase(unittest.TestCase):
|
||||
@@ -39,10 +39,17 @@ class LVMTestCase(unittest.TestCase):
|
||||
ps.so_name = "libbd_lvm.so.2"
|
||||
cls.requested_plugins = [ps]
|
||||
|
||||
@ -832,7 +838,7 @@ index eb94c91..b37a879 100644
|
||||
|
||||
@classmethod
|
||||
def _get_lvm_version(cls):
|
||||
@@ -39,6 +46,8 @@ class LVMTestCase(unittest.TestCase):
|
||||
@@ -56,6 +63,8 @@ class LVMTestCase(unittest.TestCase):
|
||||
class LvmNoDevTestCase(LVMTestCase):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(LvmNoDevTestCase, self).__init__(*args, **kwargs)
|
||||
@ -841,7 +847,7 @@ index eb94c91..b37a879 100644
|
||||
self._log = ""
|
||||
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
@@ -213,6 +222,44 @@ class LvmNoDevTestCase(LVMTestCase):
|
||||
@@ -236,6 +245,44 @@ class LvmNoDevTestCase(LVMTestCase):
|
||||
succ = BlockDev.lvm_set_global_config(None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
@ -886,7 +892,7 @@ index eb94c91..b37a879 100644
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
def test_cache_get_default_md_size(self):
|
||||
"""Verify that default cache metadata size is calculated properly"""
|
||||
@@ -1335,6 +1382,9 @@ class LvmPVVGcachedThpoolstatsTestCase(LvmPVVGLVTestCase):
|
||||
@@ -1406,6 +1453,9 @@ class LvmPVVGcachedThpoolstatsTestCase(LvmPVVGLVTestCase):
|
||||
|
||||
class LVMUnloadTest(LVMTestCase):
|
||||
def setUp(self):
|
||||
@ -897,7 +903,7 @@ index eb94c91..b37a879 100644
|
||||
# tests
|
||||
self.addCleanup(BlockDev.reinit, self.requested_plugins, True, None)
|
||||
diff --git a/tests/overrides_test.py b/tests/overrides_test.py
|
||||
index 8e7f5a5..d3faf3c 100644
|
||||
index 8e7f5a5a..d3faf3cf 100644
|
||||
--- a/tests/overrides_test.py
|
||||
+++ b/tests/overrides_test.py
|
||||
@@ -15,10 +15,12 @@ class OverridesTest(unittest.TestCase):
|
||||
@ -957,13 +963,13 @@ index 8e7f5a5..d3faf3c 100644
|
||||
# load the plugins back
|
||||
self.assertTrue(BlockDev.reinit(self.requested_plugins, True, None))
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
||||
|
||||
From bebd74962db6fb7b5314be411a4d02b21554d80f Mon Sep 17 00:00:00 2001
|
||||
From 707de091b8848b95cc78faa4299119844aab4172 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 13 Jul 2021 13:27:32 +0200
|
||||
Subject: [PATCH 2/8] lvm: Add functions for managing LVM devices file
|
||||
Subject: [PATCH 2/7] lvm: Add functions for managing LVM devices file
|
||||
|
||||
Currently covers only --adddev and --deldev from the lvmdevices
|
||||
command.
|
||||
@ -978,7 +984,7 @@ command.
|
||||
7 files changed, 220 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
|
||||
index 62f602f..bce2920 100644
|
||||
index 23f68b81..b869afcc 100644
|
||||
--- a/src/lib/plugin_apis/lvm.api
|
||||
+++ b/src/lib/plugin_apis/lvm.api
|
||||
@@ -1685,4 +1685,30 @@ GHashTable* bd_lvm_vdo_get_stats_full (const gchar *vg_name, const gchar *pool_n
|
||||
@ -1013,10 +1019,10 @@ index 62f602f..bce2920 100644
|
||||
+
|
||||
#endif /* BD_LVM_API */
|
||||
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
|
||||
index d1726ed..44d2794 100644
|
||||
index b47ed0ef..86ca28ca 100644
|
||||
--- a/src/plugins/lvm-dbus.c
|
||||
+++ b/src/plugins/lvm-dbus.c
|
||||
@@ -3938,3 +3938,55 @@ BDLVMVDOStats* bd_lvm_vdo_get_stats (const gchar *vg_name, const gchar *pool_nam
|
||||
@@ -3950,3 +3950,55 @@ BDLVMVDOStats* bd_lvm_vdo_get_stats (const gchar *vg_name, const gchar *pool_nam
|
||||
|
||||
return stats;
|
||||
}
|
||||
@ -1073,10 +1079,10 @@ index d1726ed..44d2794 100644
|
||||
+ return bd_utils_exec_and_report_error (args, extra, error);
|
||||
+}
|
||||
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
|
||||
index c0d8198..94c6a22 100644
|
||||
index 42ee0f90..3bd8fae1 100644
|
||||
--- a/src/plugins/lvm.c
|
||||
+++ b/src/plugins/lvm.c
|
||||
@@ -3235,3 +3235,55 @@ BDLVMVDOStats* bd_lvm_vdo_get_stats (const gchar *vg_name, const gchar *pool_nam
|
||||
@@ -3250,3 +3250,55 @@ BDLVMVDOStats* bd_lvm_vdo_get_stats (const gchar *vg_name, const gchar *pool_nam
|
||||
|
||||
return stats;
|
||||
}
|
||||
@ -1133,7 +1139,7 @@ index c0d8198..94c6a22 100644
|
||||
+ return bd_utils_exec_and_report_error (args, extra, error);
|
||||
+}
|
||||
diff --git a/src/plugins/lvm.h b/src/plugins/lvm.h
|
||||
index 8063693..5ca2a9d 100644
|
||||
index 8063693f..5ca2a9d7 100644
|
||||
--- a/src/plugins/lvm.h
|
||||
+++ b/src/plugins/lvm.h
|
||||
@@ -333,4 +333,7 @@ BDLVMVDOWritePolicy bd_lvm_get_vdo_write_policy_from_str (const gchar *policy_st
|
||||
@ -1145,7 +1151,7 @@ index 8063693..5ca2a9d 100644
|
||||
+
|
||||
#endif /* BD_LVM */
|
||||
diff --git a/src/python/gi/overrides/BlockDev.py b/src/python/gi/overrides/BlockDev.py
|
||||
index f768c8b..715a262 100644
|
||||
index ea059060..8574ab04 100644
|
||||
--- a/src/python/gi/overrides/BlockDev.py
|
||||
+++ b/src/python/gi/overrides/BlockDev.py
|
||||
@@ -724,6 +724,21 @@ def lvm_vdo_pool_convert(vg_name, lv_name, pool_name, virtual_size, index_memory
|
||||
@ -1171,10 +1177,10 @@ index f768c8b..715a262 100644
|
||||
@override(BlockDev.md_get_superblock_size)
|
||||
def md_get_superblock_size(size, version=None):
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index 35ace37..fb1a9ed 100644
|
||||
index ae26c6d2..82e4761d 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -10,7 +10,7 @@ import subprocess
|
||||
@@ -12,7 +12,7 @@ from contextlib import contextmanager
|
||||
from distutils.version import LooseVersion
|
||||
from itertools import chain
|
||||
|
||||
@ -1183,10 +1189,10 @@ index 35ace37..fb1a9ed 100644
|
||||
from gi.repository import BlockDev, GLib
|
||||
|
||||
import dbus
|
||||
@@ -1696,3 +1696,38 @@ class LVMVDOTest(LVMTestCase):
|
||||
|
||||
full_stats = BlockDev.lvm_vdo_get_stats_full("testVDOVG", "vdoPool")
|
||||
self.assertIn("writeAmplificationRatio", full_stats.keys())
|
||||
@@ -1785,3 +1785,38 @@ class LvmConfigTestPvremove(LvmPVonlyTestCase):
|
||||
BlockDev.lvm_set_global_config("")
|
||||
succ = BlockDev.lvm_pvremove(self.loop_dev)
|
||||
self.assertTrue(succ)
|
||||
+
|
||||
+
|
||||
+class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@ -1223,11 +1229,11 @@ index 35ace37..fb1a9ed 100644
|
||||
+ dfile = read_file("/etc/lvm/devices/" + self.devicefile)
|
||||
+ self.assertNotIn(self.loop_dev, dfile)
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index b37a879..786434f 100644
|
||||
index 11d8c94e..6ddeaa6a 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -9,7 +9,7 @@ import shutil
|
||||
import subprocess
|
||||
@@ -11,7 +11,7 @@ import time
|
||||
from contextlib import contextmanager
|
||||
from distutils.version import LooseVersion
|
||||
|
||||
-from utils import create_sparse_tempfile, create_lio_device, delete_lio_device, fake_utils, fake_path, TestTags, tag_test, run_command
|
||||
@ -1235,10 +1241,10 @@ index b37a879..786434f 100644
|
||||
from gi.repository import BlockDev, GLib
|
||||
|
||||
|
||||
@@ -1682,3 +1682,38 @@ class LVMVDOTest(LVMTestCase):
|
||||
|
||||
full_stats = BlockDev.lvm_vdo_get_stats_full("testVDOVG", "vdoPool")
|
||||
self.assertIn("writeAmplificationRatio", full_stats.keys())
|
||||
@@ -1765,3 +1765,38 @@ class LvmConfigTestPvremove(LvmPVonlyTestCase):
|
||||
BlockDev.lvm_set_global_config("")
|
||||
succ = BlockDev.lvm_pvremove(self.loop_dev)
|
||||
self.assertTrue(succ)
|
||||
+
|
||||
+
|
||||
+class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@ -1275,13 +1281,13 @@ index b37a879..786434f 100644
|
||||
+ dfile = read_file("/etc/lvm/devices/" + self.devicefile)
|
||||
+ self.assertNotIn(self.loop_dev, dfile)
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
||||
|
||||
From 8d8cbe7169cb94b01e7064a0d00b7d86baf5e652 Mon Sep 17 00:00:00 2001
|
||||
From 4c832576df8918c269db8fe2cb7eb74e45628d6c Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 15 Oct 2021 13:18:54 +0200
|
||||
Subject: [PATCH 3/8] lvm: Report special error when system.devices file is not
|
||||
Subject: [PATCH 3/7] lvm: Report special error when system.devices file is not
|
||||
enabled
|
||||
|
||||
This can be disabled either in LVM by a compile time option or
|
||||
@ -1298,7 +1304,7 @@ and not being supported at all.
|
||||
6 files changed, 162 insertions(+)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
|
||||
index bce2920..b96bcfd 100644
|
||||
index b869afcc..b8cde70b 100644
|
||||
--- a/src/lib/plugin_apis/lvm.api
|
||||
+++ b/src/lib/plugin_apis/lvm.api
|
||||
@@ -44,6 +44,7 @@ typedef enum {
|
||||
@ -1310,10 +1316,10 @@ index bce2920..b96bcfd 100644
|
||||
|
||||
typedef enum {
|
||||
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
|
||||
index 44d2794..22204d5 100644
|
||||
index 86ca28ca..7f48e422 100644
|
||||
--- a/src/plugins/lvm-dbus.c
|
||||
+++ b/src/plugins/lvm-dbus.c
|
||||
@@ -3939,6 +3939,64 @@ BDLVMVDOStats* bd_lvm_vdo_get_stats (const gchar *vg_name, const gchar *pool_nam
|
||||
@@ -3951,6 +3951,64 @@ BDLVMVDOStats* bd_lvm_vdo_get_stats (const gchar *vg_name, const gchar *pool_nam
|
||||
return stats;
|
||||
}
|
||||
|
||||
@ -1378,7 +1384,7 @@ index 44d2794..22204d5 100644
|
||||
/**
|
||||
* bd_lvm_devices_add:
|
||||
* @device: device (PV) to add to the devices file
|
||||
@@ -3957,6 +4015,12 @@ gboolean bd_lvm_devices_add (const gchar *device, const gchar *devices_file, con
|
||||
@@ -3969,6 +4027,12 @@ gboolean bd_lvm_devices_add (const gchar *device, const gchar *devices_file, con
|
||||
if (!bd_lvm_is_tech_avail (BD_LVM_TECH_DEVICES, 0, error))
|
||||
return FALSE;
|
||||
|
||||
@ -1391,7 +1397,7 @@ index 44d2794..22204d5 100644
|
||||
if (devices_file) {
|
||||
devfile = g_strdup_printf ("--devicesfile=%s", devices_file);
|
||||
args[3] = devfile;
|
||||
@@ -3983,6 +4047,12 @@ gboolean bd_lvm_devices_delete (const gchar *device, const gchar *devices_file,
|
||||
@@ -3995,6 +4059,12 @@ gboolean bd_lvm_devices_delete (const gchar *device, const gchar *devices_file,
|
||||
if (!bd_lvm_is_tech_avail (BD_LVM_TECH_DEVICES, 0, error))
|
||||
return FALSE;
|
||||
|
||||
@ -1405,10 +1411,10 @@ index 44d2794..22204d5 100644
|
||||
devfile = g_strdup_printf ("--devicesfile=%s", devices_file);
|
||||
args[3] = devfile;
|
||||
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
|
||||
index 94c6a22..605fcb0 100644
|
||||
index 3bd8fae1..73d5005f 100644
|
||||
--- a/src/plugins/lvm.c
|
||||
+++ b/src/plugins/lvm.c
|
||||
@@ -3236,6 +3236,54 @@ BDLVMVDOStats* bd_lvm_vdo_get_stats (const gchar *vg_name, const gchar *pool_nam
|
||||
@@ -3251,6 +3251,54 @@ BDLVMVDOStats* bd_lvm_vdo_get_stats (const gchar *vg_name, const gchar *pool_nam
|
||||
return stats;
|
||||
}
|
||||
|
||||
@ -1463,7 +1469,7 @@ index 94c6a22..605fcb0 100644
|
||||
/**
|
||||
* bd_lvm_devices_add:
|
||||
* @device: device (PV) to add to the devices file
|
||||
@@ -3254,6 +3302,12 @@ gboolean bd_lvm_devices_add (const gchar *device, const gchar *devices_file, con
|
||||
@@ -3269,6 +3317,12 @@ gboolean bd_lvm_devices_add (const gchar *device, const gchar *devices_file, con
|
||||
if (!bd_lvm_is_tech_avail (BD_LVM_TECH_DEVICES, 0, error))
|
||||
return FALSE;
|
||||
|
||||
@ -1476,7 +1482,7 @@ index 94c6a22..605fcb0 100644
|
||||
if (devices_file) {
|
||||
devfile = g_strdup_printf ("--devicesfile=%s", devices_file);
|
||||
args[3] = devfile;
|
||||
@@ -3280,6 +3334,12 @@ gboolean bd_lvm_devices_delete (const gchar *device, const gchar *devices_file,
|
||||
@@ -3295,6 +3349,12 @@ gboolean bd_lvm_devices_delete (const gchar *device, const gchar *devices_file,
|
||||
if (!bd_lvm_is_tech_avail (BD_LVM_TECH_DEVICES, 0, error))
|
||||
return FALSE;
|
||||
|
||||
@ -1490,7 +1496,7 @@ index 94c6a22..605fcb0 100644
|
||||
devfile = g_strdup_printf ("--devicesfile=%s", devices_file);
|
||||
args[3] = devfile;
|
||||
diff --git a/src/plugins/lvm.h b/src/plugins/lvm.h
|
||||
index 5ca2a9d..fabf091 100644
|
||||
index 5ca2a9d7..fabf091f 100644
|
||||
--- a/src/plugins/lvm.h
|
||||
+++ b/src/plugins/lvm.h
|
||||
@@ -53,6 +53,7 @@ typedef enum {
|
||||
@ -1502,10 +1508,10 @@ index 5ca2a9d..fabf091 100644
|
||||
|
||||
typedef enum {
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index fb1a9ed..c411c9e 100644
|
||||
index 82e4761d..792c1cc8 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -1731,3 +1731,18 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1820,3 +1820,18 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
|
||||
dfile = read_file("/etc/lvm/devices/" + self.devicefile)
|
||||
self.assertNotIn(self.loop_dev, dfile)
|
||||
@ -1525,10 +1531,10 @@ index fb1a9ed..c411c9e 100644
|
||||
+ with self.assertRaisesRegex(GLib.GError, "LVM devices file not enabled."):
|
||||
+ BlockDev.lvm_devices_add("", self.devicefile)
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index 786434f..315dd07 100644
|
||||
index 6ddeaa6a..73fb1030 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -1717,3 +1717,18 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1800,3 +1800,18 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
|
||||
dfile = read_file("/etc/lvm/devices/" + self.devicefile)
|
||||
self.assertNotIn(self.loop_dev, dfile)
|
||||
@ -1548,13 +1554,13 @@ index 786434f..315dd07 100644
|
||||
+ with self.assertRaisesRegex(GLib.GError, "LVM devices file not enabled."):
|
||||
+ BlockDev.lvm_devices_add("", self.devicefile)
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
||||
|
||||
From 81df85e7ea6e129e78074b6967f80c505d1b08f0 Mon Sep 17 00:00:00 2001
|
||||
From 2fdec5f7e42de869d4b2ec80dce597d22dd57617 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 15 Oct 2021 14:21:03 +0200
|
||||
Subject: [PATCH 4/8] lvm: Force enable LVM devices file for LvmTestDevicesFile
|
||||
Subject: [PATCH 4/7] lvm: Force enable LVM devices file for LvmTestDevicesFile
|
||||
|
||||
This feauture might be disabled in lvm.conf so to be able to test
|
||||
it we need to override this. The correct handling of the disabled
|
||||
@ -1565,10 +1571,10 @@ state is checked in a separate test case.
|
||||
2 files changed, 16 insertions(+)
|
||||
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index c411c9e..9cfc647 100644
|
||||
index 792c1cc8..e55535cc 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -1711,6 +1711,12 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1800,6 +1800,12 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
if not self.devices_avail:
|
||||
self.skipTest("skipping LVM devices file test: not supported")
|
||||
|
||||
@ -1581,7 +1587,7 @@ index c411c9e..9cfc647 100644
|
||||
succ = BlockDev.lvm_pvcreate(self.loop_dev)
|
||||
self.assertTrue(succ)
|
||||
|
||||
@@ -1732,6 +1738,8 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1821,6 +1827,8 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
dfile = read_file("/etc/lvm/devices/" + self.devicefile)
|
||||
self.assertNotIn(self.loop_dev, dfile)
|
||||
|
||||
@ -1591,10 +1597,10 @@ index c411c9e..9cfc647 100644
|
||||
if not self.devices_avail:
|
||||
self.skipTest("skipping LVM devices file test: not supported")
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index 315dd07..ea3b7f8 100644
|
||||
index 73fb1030..907b4f59 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -1697,6 +1697,12 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1780,6 +1780,12 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
if not self.devices_avail:
|
||||
self.skipTest("skipping LVM devices file test: not supported")
|
||||
|
||||
@ -1607,7 +1613,7 @@ index 315dd07..ea3b7f8 100644
|
||||
succ = BlockDev.lvm_pvcreate(self.loop_dev)
|
||||
self.assertTrue(succ)
|
||||
|
||||
@@ -1718,6 +1724,8 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1801,6 +1807,8 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
dfile = read_file("/etc/lvm/devices/" + self.devicefile)
|
||||
self.assertNotIn(self.loop_dev, dfile)
|
||||
|
||||
@ -1617,13 +1623,13 @@ index 315dd07..ea3b7f8 100644
|
||||
if not self.devices_avail:
|
||||
self.skipTest("skipping LVM devices file test: not supported")
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
||||
|
||||
From 01237b62bb8ad67def7c937185c42152503fbc6f Mon Sep 17 00:00:00 2001
|
||||
From 1809a41c0b2b99c8d6a077b5aa70834686980181 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 12 Nov 2021 14:51:39 +0100
|
||||
Subject: [PATCH 5/8] tests: Fix resetting global LVM config after LVM devices
|
||||
Subject: [PATCH 5/7] tests: Fix resetting global LVM config after LVM devices
|
||||
file test
|
||||
|
||||
We need to set the config to None/NULL not to an empty string.
|
||||
@ -1633,10 +1639,10 @@ We need to set the config to None/NULL not to an empty string.
|
||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index 9cfc647..d422869 100644
|
||||
index e55535cc..8ae670d5 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -1711,7 +1711,7 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1800,7 +1800,7 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
if not self.devices_avail:
|
||||
self.skipTest("skipping LVM devices file test: not supported")
|
||||
|
||||
@ -1645,7 +1651,7 @@ index 9cfc647..d422869 100644
|
||||
|
||||
# force-enable the feature, it might be disabled by default
|
||||
succ = BlockDev.lvm_set_global_config("devices { use_devicesfile=1 }")
|
||||
@@ -1738,13 +1738,13 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1827,13 +1827,13 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
dfile = read_file("/etc/lvm/devices/" + self.devicefile)
|
||||
self.assertNotIn(self.loop_dev, dfile)
|
||||
|
||||
@ -1662,10 +1668,10 @@ index 9cfc647..d422869 100644
|
||||
# checking if the feature is enabled or disabled is hard so lets just disable
|
||||
# the devices file using the global config and check lvm_devices_add fails
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index ea3b7f8..882cdf2 100644
|
||||
index 907b4f59..095e4bac 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -1697,7 +1697,7 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1780,7 +1780,7 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
if not self.devices_avail:
|
||||
self.skipTest("skipping LVM devices file test: not supported")
|
||||
|
||||
@ -1674,7 +1680,7 @@ index ea3b7f8..882cdf2 100644
|
||||
|
||||
# force-enable the feature, it might be disabled by default
|
||||
succ = BlockDev.lvm_set_global_config("devices { use_devicesfile=1 }")
|
||||
@@ -1724,13 +1724,13 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1807,13 +1807,13 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
dfile = read_file("/etc/lvm/devices/" + self.devicefile)
|
||||
self.assertNotIn(self.loop_dev, dfile)
|
||||
|
||||
@ -1691,61 +1697,27 @@ index ea3b7f8..882cdf2 100644
|
||||
# checking if the feature is enabled or disabled is hard so lets just disable
|
||||
# the devices file using the global config and check lvm_devices_add fails
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
||||
|
||||
From 2f33f2af18efa0b337f8383cb6f137d6211fe7fb Mon Sep 17 00:00:00 2001
|
||||
From 1c2f1d20a3cfa522b78ab007e8e4f9a5a4bb579d Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 12 Nov 2021 15:10:45 +0100
|
||||
Subject: [PATCH 6/8] lvm: Do not set global config to and empty string
|
||||
Subject: [PATCH 6/7] lvm: Do not set global config to and empty string
|
||||
|
||||
If we set it to an empty string we end up running "--config"
|
||||
without a parameter and lvm will use whatever is next parameter
|
||||
like the device path for pvremove.
|
||||
---
|
||||
src/plugins/lvm-dbus.c | 5 ++++-
|
||||
src/plugins/lvm.c | 5 ++++-
|
||||
tests/lvm_dbus_tests.py | 12 ++++++++++++
|
||||
tests/lvm_test.py | 12 ++++++++++++
|
||||
4 files changed, 32 insertions(+), 2 deletions(-)
|
||||
2 files changed, 24 insertions(+)
|
||||
|
||||
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
|
||||
index 22204d5..b7bd019 100644
|
||||
--- a/src/plugins/lvm-dbus.c
|
||||
+++ b/src/plugins/lvm-dbus.c
|
||||
@@ -2644,7 +2644,10 @@ gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error UNUSE
|
||||
g_free (global_config_str);
|
||||
|
||||
/* now store the new one */
|
||||
- global_config_str = g_strdup (new_config);
|
||||
+ if (!new_config || g_strcmp0 (new_config, "") == 0)
|
||||
+ global_config_str = NULL;
|
||||
+ else
|
||||
+ global_config_str = g_strdup (new_config);
|
||||
|
||||
g_mutex_unlock (&global_config_lock);
|
||||
return TRUE;
|
||||
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
|
||||
index 605fcb0..124fce7 100644
|
||||
--- a/src/plugins/lvm.c
|
||||
+++ b/src/plugins/lvm.c
|
||||
@@ -2016,7 +2016,10 @@ gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error UNUSE
|
||||
g_free (global_config_str);
|
||||
|
||||
/* now store the new one */
|
||||
- global_config_str = g_strdup (new_config);
|
||||
+ if (!new_config || g_strcmp0 (new_config, "") == 0)
|
||||
+ global_config_str = NULL;
|
||||
+ else
|
||||
+ global_config_str = g_strdup (new_config);
|
||||
|
||||
g_mutex_unlock (&global_config_lock);
|
||||
return TRUE;
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index d422869..5516afe 100644
|
||||
index 8ae670d5..61c898c1 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -1754,3 +1754,15 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1843,3 +1843,15 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
|
||||
with self.assertRaisesRegex(GLib.GError, "LVM devices file not enabled."):
|
||||
BlockDev.lvm_devices_add("", self.devicefile)
|
||||
@ -1762,10 +1734,10 @@ index d422869..5516afe 100644
|
||||
+ succ = BlockDev.lvm_pvremove(self.loop_dev)
|
||||
+ self.assertTrue(succ)
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index 882cdf2..e349817 100644
|
||||
index 095e4bac..36ff10ec 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -1740,3 +1740,15 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
@@ -1823,3 +1823,15 @@ class LvmTestDevicesFile(LvmPVonlyTestCase):
|
||||
|
||||
with self.assertRaisesRegex(GLib.GError, "LVM devices file not enabled."):
|
||||
BlockDev.lvm_devices_add("", self.devicefile)
|
||||
@ -1782,85 +1754,13 @@ index 882cdf2..e349817 100644
|
||||
+ succ = BlockDev.lvm_pvremove(self.loop_dev)
|
||||
+ self.assertTrue(succ)
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
||||
|
||||
From 2a4e610027a2c2a315054b84a323ce973939ca2d Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 16 Mar 2021 12:05:37 +0100
|
||||
Subject: [PATCH 7/8] vdo: Do not use g_memdup in bd_vdo_stats_copy
|
||||
|
||||
g_memdup is deprecated and the replacement g_memdup2 is not yet
|
||||
available so lets just do the copy manually.
|
||||
---
|
||||
src/lib/plugin_apis/vdo.api | 17 ++++++++++++++++-
|
||||
src/plugins/vdo.c | 17 ++++++++++++++++-
|
||||
2 files changed, 32 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/vdo.api b/src/lib/plugin_apis/vdo.api
|
||||
index 936f8e0..312de4e 100644
|
||||
--- a/src/lib/plugin_apis/vdo.api
|
||||
+++ b/src/lib/plugin_apis/vdo.api
|
||||
@@ -170,7 +170,22 @@ void bd_vdo_stats_free (BDVDOStats *stats) {
|
||||
* Deprecated: 2.24: Use LVM-VDO integration instead.
|
||||
*/
|
||||
BDVDOStats* bd_vdo_stats_copy (BDVDOStats *stats) {
|
||||
- return g_memdup (stats, sizeof (BDVDOStats));
|
||||
+ if (stats == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
+ BDVDOStats *new_stats = g_new0 (BDVDOStats, 1);
|
||||
+
|
||||
+ new_stats->block_size = stats->block_size;
|
||||
+ new_stats->logical_block_size = stats->logical_block_size;
|
||||
+ new_stats->physical_blocks = stats->physical_blocks;
|
||||
+ new_stats->data_blocks_used = stats->data_blocks_used;
|
||||
+ new_stats->overhead_blocks_used = stats->overhead_blocks_used;
|
||||
+ new_stats->logical_blocks_used = stats->logical_blocks_used;
|
||||
+ new_stats->used_percent = stats->used_percent;
|
||||
+ new_stats->saving_percent = stats->saving_percent;
|
||||
+ new_stats->write_amplification_ratio = stats->write_amplification_ratio;
|
||||
+
|
||||
+ return new_stats;
|
||||
}
|
||||
|
||||
GType bd_vdo_stats_get_type () {
|
||||
diff --git a/src/plugins/vdo.c b/src/plugins/vdo.c
|
||||
index 2352394..d443099 100644
|
||||
--- a/src/plugins/vdo.c
|
||||
+++ b/src/plugins/vdo.c
|
||||
@@ -81,7 +81,22 @@ void bd_vdo_stats_free (BDVDOStats *stats) {
|
||||
}
|
||||
|
||||
BDVDOStats* bd_vdo_stats_copy (BDVDOStats *stats) {
|
||||
- return g_memdup (stats, sizeof (BDVDOStats));
|
||||
+ if (stats == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
+ BDVDOStats *new_stats = g_new0 (BDVDOStats, 1);
|
||||
+
|
||||
+ new_stats->block_size = stats->block_size;
|
||||
+ new_stats->logical_block_size = stats->logical_block_size;
|
||||
+ new_stats->physical_blocks = stats->physical_blocks;
|
||||
+ new_stats->data_blocks_used = stats->data_blocks_used;
|
||||
+ new_stats->overhead_blocks_used = stats->overhead_blocks_used;
|
||||
+ new_stats->logical_blocks_used = stats->logical_blocks_used;
|
||||
+ new_stats->used_percent = stats->used_percent;
|
||||
+ new_stats->saving_percent = stats->saving_percent;
|
||||
+ new_stats->write_amplification_ratio = stats->write_amplification_ratio;
|
||||
+
|
||||
+ return new_stats;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
||||
From 577ea466e3b7af464137e087907ba980ad3994ee Mon Sep 17 00:00:00 2001
|
||||
From 05cfb84777c5472550673a1f2150ca357718b3f2 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 26 Nov 2021 15:19:55 +0100
|
||||
Subject: [PATCH 8/8] lvm: Use "lvmconfig full" to get valid config instead of
|
||||
Subject: [PATCH 7/7] lvm: Use "lvmconfig full" to get valid config instead of
|
||||
"current"
|
||||
|
||||
"lvmconfig current" doesn't work together with --config even if we
|
||||
@ -1872,10 +1772,10 @@ be working in all cases.
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
|
||||
index b7bd019..825c5e9 100644
|
||||
index 7f48e422..d4b542e2 100644
|
||||
--- a/src/plugins/lvm-dbus.c
|
||||
+++ b/src/plugins/lvm-dbus.c
|
||||
@@ -3955,9 +3955,9 @@ static gboolean _lvm_devices_enabled () {
|
||||
@@ -3964,9 +3964,9 @@ static gboolean _lvm_devices_enabled () {
|
||||
gint scanned = 0;
|
||||
g_autofree gchar *config_arg = NULL;
|
||||
|
||||
@ -1888,10 +1788,10 @@ index b7bd019..825c5e9 100644
|
||||
/* make sure to include the global config from us when getting the current config value */
|
||||
g_mutex_lock (&global_config_lock);
|
||||
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
|
||||
index 124fce7..21320f3 100644
|
||||
index 73d5005f..03211f8a 100644
|
||||
--- a/src/plugins/lvm.c
|
||||
+++ b/src/plugins/lvm.c
|
||||
@@ -3251,9 +3251,9 @@ static gboolean _lvm_devices_enabled () {
|
||||
@@ -3263,9 +3263,9 @@ static gboolean _lvm_devices_enabled () {
|
||||
gboolean enabled = FALSE;
|
||||
gint scanned = 0;
|
||||
|
||||
@ -1904,5 +1804,5 @@ index 124fce7..21320f3 100644
|
||||
if (ret) {
|
||||
scanned = sscanf (output, "use_devicesfile=%u", &enabled);
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 37f1aff5f5f967d6a4440d176f3de877aab789ac Mon Sep 17 00:00:00 2001
|
||||
From 77e6a109043e87f88d2bd2b47d1cefce0eb9f5a9 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Mon, 20 Sep 2021 16:38:16 +0200
|
||||
Subject: [PATCH 1/3] Add support for creating and activating integrity devices
|
||||
@ -6,31 +6,29 @@ Subject: [PATCH 1/3] Add support for creating and activating integrity devices
|
||||
This adds support for create, open and close actions for standalone
|
||||
integrity devices using cryptsetup.
|
||||
---
|
||||
configure.ac | 4 +-
|
||||
configure.ac | 2 +-
|
||||
src/lib/plugin_apis/crypto.api | 157 +++++++++++++++++
|
||||
src/plugins/crypto.c | 261 +++++++++++++++++++++++++++-
|
||||
src/plugins/crypto.h | 41 +++++
|
||||
src/python/gi/overrides/BlockDev.py | 24 +++
|
||||
tests/crypto_test.py | 97 ++++++++++-
|
||||
6 files changed, 576 insertions(+), 8 deletions(-)
|
||||
tests/crypto_test.py | 96 +++++++++-
|
||||
6 files changed, 573 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index abe1412..13830ae 100644
|
||||
index 79bd97d8..79bf8045 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -210,7 +210,9 @@ AS_IF([test "x$with_crypto" != "xno"],
|
||||
@@ -210,7 +210,7 @@ AS_IF([test "x$with_crypto" != "xno"],
|
||||
AS_IF([$PKG_CONFIG --atleast-version=2.0.3 libcryptsetup],
|
||||
[AC_DEFINE([LIBCRYPTSETUP_2])], [])
|
||||
AS_IF([$PKG_CONFIG --atleast-version=2.3.0 libcryptsetup],
|
||||
- [AC_DEFINE([LIBCRYPTSETUP_BITLK])], [])
|
||||
+ [AC_DEFINE([LIBCRYPTSETUP_23])], [])
|
||||
+ AS_IF([$PKG_CONFIG --atleast-version=2.4.0 libcryptsetup],
|
||||
+ [AC_DEFINE([LIBCRYPTSETUP_24])], [])
|
||||
AS_IF([$PKG_CONFIG --atleast-version=2.4.0 libcryptsetup],
|
||||
[AC_DEFINE([LIBCRYPTSETUP_24])], [])
|
||||
AS_IF([test "x$with_escrow" != "xno"],
|
||||
[LIBBLOCKDEV_PKG_CHECK_MODULES([NSS], [nss >= 3.18.0])
|
||||
LIBBLOCKDEV_CHECK_HEADER([volume_key/libvolume_key.h], [$GLIB_CFLAGS $NSS_CFLAGS], [libvolume_key.h not available])],
|
||||
diff --git a/src/lib/plugin_apis/crypto.api b/src/lib/plugin_apis/crypto.api
|
||||
index ef0217f..40e32c8 100644
|
||||
index ef0217fe..40e32c89 100644
|
||||
--- a/src/lib/plugin_apis/crypto.api
|
||||
+++ b/src/lib/plugin_apis/crypto.api
|
||||
@@ -1,5 +1,6 @@
|
||||
@ -211,7 +209,7 @@ index ef0217f..40e32c8 100644
|
||||
* bd_crypto_device_seems_encrypted:
|
||||
* @device: the queried device
|
||||
diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c
|
||||
index 4fad9a8..b1b0700 100644
|
||||
index 51908140..8549cf23 100644
|
||||
--- a/src/plugins/crypto.c
|
||||
+++ b/src/plugins/crypto.c
|
||||
@@ -50,6 +50,18 @@
|
||||
@ -505,7 +503,7 @@ index 4fad9a8..b1b0700 100644
|
||||
/**
|
||||
* bd_crypto_device_seems_encrypted:
|
||||
* @device: the queried device
|
||||
@@ -2472,7 +2723,7 @@ gboolean bd_crypto_escrow_device (const gchar *device, const gchar *passphrase,
|
||||
@@ -2471,7 +2722,7 @@ gboolean bd_crypto_escrow_device (const gchar *device, const gchar *passphrase,
|
||||
*
|
||||
* Tech category: %BD_CRYPTO_TECH_BITLK-%BD_CRYPTO_TECH_MODE_OPEN_CLOSE
|
||||
*/
|
||||
@ -514,7 +512,7 @@ index 4fad9a8..b1b0700 100644
|
||||
gboolean bd_crypto_bitlk_open (const gchar *device UNUSED, const gchar *name UNUSED, const guint8* pass_data UNUSED, gsize data_len UNUSED, gboolean read_only UNUSED, GError **error) {
|
||||
/* this will return FALSE and set error, because BITLK technology is not available */
|
||||
return bd_crypto_is_tech_avail (BD_CRYPTO_TECH_BITLK, BD_CRYPTO_TECH_MODE_OPEN_CLOSE, error);
|
||||
@@ -2542,7 +2793,7 @@ gboolean bd_crypto_bitlk_open (const gchar *device, const gchar *name, const gui
|
||||
@@ -2541,7 +2792,7 @@ gboolean bd_crypto_bitlk_open (const gchar *device, const gchar *name, const gui
|
||||
*
|
||||
* Tech category: %BD_CRYPTO_TECH_BITLK-%BD_CRYPTO_TECH_MODE_OPEN_CLOSE
|
||||
*/
|
||||
@ -524,10 +522,10 @@ index 4fad9a8..b1b0700 100644
|
||||
/* this will return FALSE and set error, because BITLK technology is not available */
|
||||
return bd_crypto_is_tech_avail (BD_CRYPTO_TECH_BITLK, BD_CRYPTO_TECH_MODE_OPEN_CLOSE, error);
|
||||
diff --git a/src/plugins/crypto.h b/src/plugins/crypto.h
|
||||
index a38724d..166e558 100644
|
||||
index 1c8f47ea..6c1d40dd 100644
|
||||
--- a/src/plugins/crypto.h
|
||||
+++ b/src/plugins/crypto.h
|
||||
@@ -116,6 +116,43 @@ void bd_crypto_luks_extra_free (BDCryptoLUKSExtra *extra);
|
||||
@@ -122,6 +122,43 @@ void bd_crypto_luks_extra_free (BDCryptoLUKSExtra *extra);
|
||||
BDCryptoLUKSExtra* bd_crypto_luks_extra_copy (BDCryptoLUKSExtra *extra);
|
||||
BDCryptoLUKSExtra* bd_crypto_luks_extra_new (guint64 data_alignment, const gchar *data_device, const gchar *integrity, guint64 sector_size, const gchar *label, const gchar *subsystem, BDCryptoLUKSPBKDF *pbkdf);
|
||||
|
||||
@ -571,7 +569,7 @@ index a38724d..166e558 100644
|
||||
/**
|
||||
* BDCryptoLUKSInfo:
|
||||
* @version: LUKS version
|
||||
@@ -209,6 +246,10 @@ gboolean bd_crypto_luks_header_restore (const gchar *device, const gchar *backup
|
||||
@@ -215,6 +252,10 @@ gboolean bd_crypto_luks_header_restore (const gchar *device, const gchar *backup
|
||||
BDCryptoLUKSInfo* bd_crypto_luks_info (const gchar *luks_device, GError **error);
|
||||
BDCryptoIntegrityInfo* bd_crypto_integrity_info (const gchar *device, GError **error);
|
||||
|
||||
@ -583,7 +581,7 @@ index a38724d..166e558 100644
|
||||
gboolean bd_crypto_tc_open (const gchar *device, const gchar *name, const guint8* pass_data, gsize data_len, gboolean read_only, GError **error);
|
||||
gboolean bd_crypto_tc_open_full (const gchar *device, const gchar *name, const guint8* pass_data, gsize data_len, const gchar **keyfiles, gboolean hidden, gboolean system, gboolean veracrypt, guint32 veracrypt_pim, gboolean read_only, GError **error);
|
||||
diff --git a/src/python/gi/overrides/BlockDev.py b/src/python/gi/overrides/BlockDev.py
|
||||
index 715a262..71bcd31 100644
|
||||
index 8574ab04..8bd03cf8 100644
|
||||
--- a/src/python/gi/overrides/BlockDev.py
|
||||
+++ b/src/python/gi/overrides/BlockDev.py
|
||||
@@ -276,6 +276,30 @@ def crypto_bitlk_open(device, name, passphrase, read_only=False):
|
||||
@ -618,7 +616,7 @@ index 715a262..71bcd31 100644
|
||||
@override(BlockDev.dm_create_linear)
|
||||
def dm_create_linear(map_name, device, length, uuid=None):
|
||||
diff --git a/tests/crypto_test.py b/tests/crypto_test.py
|
||||
index 0aecc03..1c6832e 100644
|
||||
index 5e02c00d..a8fc8579 100644
|
||||
--- a/tests/crypto_test.py
|
||||
+++ b/tests/crypto_test.py
|
||||
@@ -2,6 +2,7 @@ import unittest
|
||||
@ -629,7 +627,7 @@ index 0aecc03..1c6832e 100644
|
||||
import shutil
|
||||
import subprocess
|
||||
import six
|
||||
@@ -42,6 +43,8 @@ class CryptoTestCase(unittest.TestCase):
|
||||
@@ -34,6 +35,8 @@ class CryptoTestCase(unittest.TestCase):
|
||||
|
||||
requested_plugins = BlockDev.plugin_specs_from_names(("crypto", "loop"))
|
||||
|
||||
@ -638,7 +636,7 @@ index 0aecc03..1c6832e 100644
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
unittest.TestCase.setUpClass()
|
||||
@@ -72,7 +75,7 @@ class CryptoTestCase(unittest.TestCase):
|
||||
@@ -64,7 +67,7 @@ class CryptoTestCase(unittest.TestCase):
|
||||
|
||||
def _clean_up(self):
|
||||
try:
|
||||
@ -647,17 +645,16 @@ index 0aecc03..1c6832e 100644
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -964,7 +967,8 @@ class CryptoTestInfo(CryptoTestCase):
|
||||
succ = BlockDev.crypto_luks_close("libblockdevTestLUKS")
|
||||
@@ -1029,7 +1032,7 @@ class CryptoTestLuksSectorSize(CryptoTestCase):
|
||||
self.assertTrue(succ)
|
||||
|
||||
|
||||
-class CryptoTestIntegrity(CryptoTestCase):
|
||||
+
|
||||
+class CryptoTestLUKS2Integrity(CryptoTestCase):
|
||||
@tag_test(TestTags.SLOW)
|
||||
@unittest.skipUnless(HAVE_LUKS2, "LUKS 2 not supported")
|
||||
def test_luks2_integrity(self):
|
||||
@@ -1151,3 +1155,92 @@ class CryptoTestBitlk(CryptoTestCase):
|
||||
@@ -1216,3 +1219,92 @@ class CryptoTestBitlk(CryptoTestCase):
|
||||
succ = BlockDev.crypto_bitlk_close("libblockdevTestBitlk")
|
||||
self.assertTrue(succ)
|
||||
self.assertFalse(os.path.exists("/dev/mapper/libblockdevTestBitlk"))
|
||||
@ -751,10 +748,10 @@ index 0aecc03..1c6832e 100644
|
||||
+ self.assertTrue(succ)
|
||||
+ self.assertFalse(os.path.exists("/dev/mapper/%s" % self._dm_name))
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
||||
|
||||
From 4dcb7a42a2cb33f7a63021d72889c9a9688adfd3 Mon Sep 17 00:00:00 2001
|
||||
From ad4ac36520ec96af2a7b043189bbdf18cc3cffb9 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 30 Sep 2021 16:01:40 +0200
|
||||
Subject: [PATCH 2/3] Create smaller test images for integrity tests
|
||||
@ -767,10 +764,10 @@ can be smaller than 1 GiB.
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tests/crypto_test.py b/tests/crypto_test.py
|
||||
index 1c6832e..b7ec251 100644
|
||||
index a8fc8579..9758bf81 100644
|
||||
--- a/tests/crypto_test.py
|
||||
+++ b/tests/crypto_test.py
|
||||
@@ -44,6 +44,7 @@ class CryptoTestCase(unittest.TestCase):
|
||||
@@ -36,6 +36,7 @@ class CryptoTestCase(unittest.TestCase):
|
||||
requested_plugins = BlockDev.plugin_specs_from_names(("crypto", "loop"))
|
||||
|
||||
_dm_name = "libblockdevTestLUKS"
|
||||
@ -778,7 +775,7 @@ index 1c6832e..b7ec251 100644
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
@@ -57,8 +58,8 @@ class CryptoTestCase(unittest.TestCase):
|
||||
@@ -49,8 +50,8 @@ class CryptoTestCase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.addCleanup(self._clean_up)
|
||||
@ -789,7 +786,7 @@ index 1c6832e..b7ec251 100644
|
||||
try:
|
||||
self.loop_dev = create_lio_device(self.dev_file)
|
||||
except RuntimeError as e:
|
||||
@@ -1160,6 +1161,7 @@ class CryptoTestBitlk(CryptoTestCase):
|
||||
@@ -1224,6 +1225,7 @@ class CryptoTestBitlk(CryptoTestCase):
|
||||
class CryptoTestIntegrity(CryptoTestCase):
|
||||
|
||||
_dm_name = "libblockdevTestIntegrity"
|
||||
@ -798,10 +795,10 @@ index 1c6832e..b7ec251 100644
|
||||
@unittest.skipUnless(HAVE_LUKS2, "Integrity not supported")
|
||||
def test_integrity(self):
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
||||
|
||||
From 3b82f9085c0df2e58b673716cdefd747495738e2 Mon Sep 17 00:00:00 2001
|
||||
From 048a803be5186b30c0f0a7e67020486990ba6b81 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 20 Oct 2021 10:27:41 +0200
|
||||
Subject: [PATCH 3/3] crypto: Do not use libcryptsetup flags directly in
|
||||
@ -817,7 +814,7 @@ avoid including libcryptsetup.h in our header and API files.
|
||||
4 files changed, 59 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/crypto.api b/src/lib/plugin_apis/crypto.api
|
||||
index 40e32c8..cf87979 100644
|
||||
index 40e32c89..cf87979d 100644
|
||||
--- a/src/lib/plugin_apis/crypto.api
|
||||
+++ b/src/lib/plugin_apis/crypto.api
|
||||
@@ -1,6 +1,5 @@
|
||||
@ -851,7 +848,7 @@ index 40e32c8..cf87979 100644
|
||||
|
||||
#define BD_CRYPTO_TYPE_LUKS_INFO (bd_crypto_luks_info_get_type ())
|
||||
diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c
|
||||
index b1b0700..8a4d64a 100644
|
||||
index 8549cf23..35c38410 100644
|
||||
--- a/src/plugins/crypto.c
|
||||
+++ b/src/plugins/crypto.c
|
||||
@@ -2223,6 +2223,7 @@ gboolean bd_crypto_integrity_open (const gchar *device, const gchar *name, const
|
||||
@ -910,10 +907,10 @@ index b1b0700..8a4d64a 100644
|
||||
g_set_error (error, BD_CRYPTO_ERROR, BD_CRYPTO_ERROR_DEVICE,
|
||||
"Failed to activate device: %s", strerror_l (-ret, c_locale));
|
||||
diff --git a/src/plugins/crypto.h b/src/plugins/crypto.h
|
||||
index 166e558..b5f133c 100644
|
||||
index 6c1d40dd..536accf9 100644
|
||||
--- a/src/plugins/crypto.h
|
||||
+++ b/src/plugins/crypto.h
|
||||
@@ -141,16 +141,12 @@ BDCryptoIntegrityExtra* bd_crypto_integrity_extra_copy (BDCryptoIntegrityExtra *
|
||||
@@ -147,16 +147,12 @@ BDCryptoIntegrityExtra* bd_crypto_integrity_extra_copy (BDCryptoIntegrityExtra *
|
||||
BDCryptoIntegrityExtra* bd_crypto_integrity_extra_new (guint64 sector_size, guint64 journal_size, guint journal_watermark, guint journal_commit_time, guint64 interleave_sectors, guint64 tag_size, guint64 buffer_sectors);
|
||||
|
||||
typedef enum {
|
||||
@ -937,10 +934,10 @@ index 166e558..b5f133c 100644
|
||||
|
||||
/**
|
||||
diff --git a/tests/crypto_test.py b/tests/crypto_test.py
|
||||
index b7ec251..673d8b8 100644
|
||||
index 9758bf81..94b89131 100644
|
||||
--- a/tests/crypto_test.py
|
||||
+++ b/tests/crypto_test.py
|
||||
@@ -1215,6 +1215,20 @@ class CryptoTestIntegrity(CryptoTestCase):
|
||||
@@ -1279,6 +1279,20 @@ class CryptoTestIntegrity(CryptoTestCase):
|
||||
self.assertTrue(succ)
|
||||
self.assertFalse(os.path.exists("/dev/mapper/%s" % self._dm_name))
|
||||
|
||||
@ -962,5 +959,5 @@ index b7ec251..673d8b8 100644
|
||||
@unittest.skipUnless(HAVE_LUKS2, "Integrity not supported")
|
||||
def test_integrity_wipe(self):
|
||||
--
|
||||
2.31.1
|
||||
2.37.3
|
||||
|
@ -1,97 +0,0 @@
|
||||
From 5d29bc014a33d9bdc1c5fb4b8add2f38850f46a8 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 24 Feb 2021 14:44:03 +0100
|
||||
Subject: [PATCH] crypto: Fix default key size for non XTS ciphers
|
||||
|
||||
512 bits should be default only for AES-XTS which needs two keys,
|
||||
default for other modes must be 256 bits.
|
||||
|
||||
resolves: rhbz#1931847
|
||||
---
|
||||
src/plugins/crypto.c | 11 +++++++++--
|
||||
src/plugins/crypto.h | 2 +-
|
||||
tests/crypto_test.py | 36 ++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 46 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c
|
||||
index f4a2e8f0..1e7043fa 100644
|
||||
--- a/src/plugins/crypto.c
|
||||
+++ b/src/plugins/crypto.c
|
||||
@@ -774,8 +774,15 @@ static gboolean luks_format (const gchar *device, const gchar *cipher, guint64 k
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
- /* resolve requested/default key_size (should be in bytes) */
|
||||
- key_size = (key_size != 0) ? (key_size / 8) : (DEFAULT_LUKS_KEYSIZE_BITS / 8);
|
||||
+ if (key_size == 0) {
|
||||
+ if (g_str_has_prefix (cipher_specs[1], "xts-"))
|
||||
+ key_size = DEFAULT_LUKS_KEYSIZE_BITS * 2;
|
||||
+ else
|
||||
+ key_size = DEFAULT_LUKS_KEYSIZE_BITS;
|
||||
+ }
|
||||
+
|
||||
+ /* key_size should be in bytes */
|
||||
+ key_size = key_size / 8;
|
||||
|
||||
/* wait for enough random data entropy (if requested) */
|
||||
if (min_entropy > 0) {
|
||||
diff --git a/src/plugins/crypto.h b/src/plugins/crypto.h
|
||||
index 71a1438d..a38724d9 100644
|
||||
--- a/src/plugins/crypto.h
|
||||
+++ b/src/plugins/crypto.h
|
||||
@@ -36,7 +36,7 @@ typedef enum {
|
||||
/* 20 chars * 6 bits per char (64-item charset) = 120 "bits of security" */
|
||||
#define BD_CRYPTO_BACKUP_PASSPHRASE_LENGTH 20
|
||||
|
||||
-#define DEFAULT_LUKS_KEYSIZE_BITS 512
|
||||
+#define DEFAULT_LUKS_KEYSIZE_BITS 256
|
||||
#define DEFAULT_LUKS_CIPHER "aes-xts-plain64"
|
||||
#define DEFAULT_LUKS2_SECTOR_SIZE 512
|
||||
|
||||
diff --git a/tests/crypto_test.py b/tests/crypto_test.py
|
||||
index 0609a070..0aecc032 100644
|
||||
--- a/tests/crypto_test.py
|
||||
+++ b/tests/crypto_test.py
|
||||
@@ -236,6 +236,42 @@ def test_luks2_format(self):
|
||||
self.fail("Failed to get pbkdf information from:\n%s %s" % (out, err))
|
||||
self.assertEqual(int(m.group(1)), 5)
|
||||
|
||||
+ def _get_luks1_key_size(self, device):
|
||||
+ _ret, out, err = run_command("cryptsetup luksDump %s" % device)
|
||||
+ m = re.search(r"MK bits:\s*(\S+)\s*", out)
|
||||
+ if not m or len(m.groups()) != 1:
|
||||
+ self.fail("Failed to get key size information from:\n%s %s" % (out, err))
|
||||
+ key_size = m.group(1)
|
||||
+ if not key_size.isnumeric():
|
||||
+ self.fail("Failed to get key size information from: %s" % key_size)
|
||||
+ return int(key_size)
|
||||
+
|
||||
+ @tag_test(TestTags.SLOW, TestTags.CORE)
|
||||
+ def test_luks_format_key_size(self):
|
||||
+ """Verify that formating device as LUKS works"""
|
||||
+
|
||||
+ # aes-xts: key size should default to 512
|
||||
+ succ = BlockDev.crypto_luks_format(self.loop_dev, "aes-xts-plain64", 0, PASSWD, None, 0)
|
||||
+ self.assertTrue(succ)
|
||||
+
|
||||
+ key_size = self._get_luks1_key_size(self.loop_dev)
|
||||
+ self.assertEqual(key_size, 512)
|
||||
+
|
||||
+ # aes-cbc: key size should default to 256
|
||||
+ succ = BlockDev.crypto_luks_format(self.loop_dev, "aes-cbc-essiv:sha256", 0, PASSWD, None, 0)
|
||||
+ self.assertTrue(succ)
|
||||
+
|
||||
+ key_size = self._get_luks1_key_size(self.loop_dev)
|
||||
+ self.assertEqual(key_size, 256)
|
||||
+
|
||||
+ # try specifying key size for aes-xts
|
||||
+ succ = BlockDev.crypto_luks_format(self.loop_dev, "aes-xts-plain64", 256, PASSWD, None, 0)
|
||||
+ self.assertTrue(succ)
|
||||
+
|
||||
+ key_size = self._get_luks1_key_size(self.loop_dev)
|
||||
+ self.assertEqual(key_size, 256)
|
||||
+
|
||||
+
|
||||
class CryptoTestResize(CryptoTestCase):
|
||||
|
||||
def _get_key_location(self, device):
|
@ -1,119 +0,0 @@
|
||||
From a29d25fdfdcd7b133052eab1a3d1defe12c1733f Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 10 Jun 2020 17:03:28 +0200
|
||||
Subject: [PATCH] exec: Fix setting locale for util calls
|
||||
|
||||
This actually fixes two issue. The _utils_exec_and_report_progress
|
||||
function didn't set the LC_ALL=C environment variable to make sure
|
||||
we get output in English. And also we shouldn't use setenv in the
|
||||
GSpawnChildSetupFunc, it's actually example of what not to do in
|
||||
g_spawn_async documentation. This fix uses g_environ_setenv and
|
||||
passes the new environment to the g_spawn call.
|
||||
---
|
||||
src/utils/exec.c | 26 +++++++++++++++++---------
|
||||
tests/utils_test.py | 7 +++++++
|
||||
2 files changed, 24 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/utils/exec.c b/src/utils/exec.c
|
||||
index 9293930..37bd960 100644
|
||||
--- a/src/utils/exec.c
|
||||
+++ b/src/utils/exec.c
|
||||
@@ -140,11 +140,6 @@ static void log_done (guint64 task_id, gint exit_code) {
|
||||
return;
|
||||
}
|
||||
|
||||
-static void set_c_locale(gpointer user_data __attribute__((unused))) {
|
||||
- if (setenv ("LC_ALL", "C", 1) != 0)
|
||||
- g_warning ("Failed to set LC_ALL=C for a child process!");
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* bd_utils_exec_and_report_error:
|
||||
* @argv: (array zero-terminated=1): the argv array for the call
|
||||
@@ -194,6 +189,8 @@ gboolean bd_utils_exec_and_report_status_error (const gchar **argv, const BDExtr
|
||||
const BDExtraArg **extra_p = NULL;
|
||||
gint exit_status = 0;
|
||||
guint i = 0;
|
||||
+ gchar **old_env = NULL;
|
||||
+ gchar **new_env = NULL;
|
||||
|
||||
if (extra) {
|
||||
args_len = g_strv_length ((gchar **) argv);
|
||||
@@ -219,16 +216,20 @@ gboolean bd_utils_exec_and_report_status_error (const gchar **argv, const BDExtr
|
||||
args[i] = NULL;
|
||||
}
|
||||
|
||||
+ old_env = g_get_environ ();
|
||||
+ new_env = g_environ_setenv (old_env, "LC_ALL", "C", TRUE);
|
||||
+
|
||||
task_id = log_running (args ? args : argv);
|
||||
- success = g_spawn_sync (NULL, args ? (gchar **) args : (gchar **) argv, NULL, G_SPAWN_SEARCH_PATH,
|
||||
- (GSpawnChildSetupFunc) set_c_locale, NULL,
|
||||
- &stdout_data, &stderr_data, &exit_status, error);
|
||||
+ success = g_spawn_sync (NULL, args ? (gchar **) args : (gchar **) argv, new_env, G_SPAWN_SEARCH_PATH,
|
||||
+ NULL, NULL, &stdout_data, &stderr_data, &exit_status, error);
|
||||
if (!success) {
|
||||
/* error is already populated from the call */
|
||||
+ g_strfreev (new_env);
|
||||
g_free (stdout_data);
|
||||
g_free (stderr_data);
|
||||
return FALSE;
|
||||
}
|
||||
+ g_strfreev (new_env);
|
||||
|
||||
/* g_spawn_sync set the status in the same way waitpid() does, we need
|
||||
to get the process exit code manually (this is similar to calling
|
||||
@@ -297,6 +298,8 @@ static gboolean _utils_exec_and_report_progress (const gchar **argv, const BDExt
|
||||
gboolean err_done = FALSE;
|
||||
GString *stdout_data = g_string_new (NULL);
|
||||
GString *stderr_data = g_string_new (NULL);
|
||||
+ gchar **old_env = NULL;
|
||||
+ gchar **new_env = NULL;
|
||||
|
||||
/* TODO: share this code between functions */
|
||||
if (extra) {
|
||||
@@ -325,7 +328,10 @@ static gboolean _utils_exec_and_report_progress (const gchar **argv, const BDExt
|
||||
|
||||
task_id = log_running (args ? args : argv);
|
||||
|
||||
- ret = g_spawn_async_with_pipes (NULL, args ? (gchar**) args : (gchar**) argv, NULL,
|
||||
+ old_env = g_get_environ ();
|
||||
+ new_env = g_environ_setenv (old_env, "LC_ALL", "C", TRUE);
|
||||
+
|
||||
+ ret = g_spawn_async_with_pipes (NULL, args ? (gchar**) args : (gchar**) argv, new_env,
|
||||
G_SPAWN_DEFAULT|G_SPAWN_SEARCH_PATH|G_SPAWN_DO_NOT_REAP_CHILD,
|
||||
NULL, NULL, &pid, NULL, &out_fd, &err_fd, error);
|
||||
|
||||
@@ -333,9 +339,11 @@ static gboolean _utils_exec_and_report_progress (const gchar **argv, const BDExt
|
||||
/* error is already populated */
|
||||
g_string_free (stdout_data, TRUE);
|
||||
g_string_free (stderr_data, TRUE);
|
||||
+ g_strfreev (new_env);
|
||||
g_free (args);
|
||||
return FALSE;
|
||||
}
|
||||
+ g_strfreev (new_env);
|
||||
|
||||
args_str = g_strjoinv (" ", args ? (gchar **) args : (gchar **) argv);
|
||||
msg = g_strdup_printf ("Started '%s'", args_str);
|
||||
diff --git a/tests/utils_test.py b/tests/utils_test.py
|
||||
index 4bec3db..2bec5ed 100644
|
||||
--- a/tests/utils_test.py
|
||||
+++ b/tests/utils_test.py
|
||||
@@ -170,6 +170,13 @@ class UtilsExecLoggingTest(UtilsTestCase):
|
||||
# exit code != 0
|
||||
self.assertTrue(BlockDev.utils_check_util_version("libblockdev-fake-util-fail", "1.1", "version", "Version:\\s(.*)"))
|
||||
|
||||
+ @tag_test(TestTags.NOSTORAGE, TestTags.CORE)
|
||||
+ def test_exec_locale(self):
|
||||
+ """Verify that setting locale for exec functions works as expected"""
|
||||
+
|
||||
+ succ, out = BlockDev.utils_exec_and_capture_output(["locale"])
|
||||
+ self.assertTrue(succ)
|
||||
+ self.assertIn("LC_ALL=C", out)
|
||||
|
||||
class UtilsDevUtilsTestCase(UtilsTestCase):
|
||||
@tag_test(TestTags.NOSTORAGE, TestTags.CORE)
|
||||
--
|
||||
2.26.2
|
||||
|
@ -1,914 +0,0 @@
|
||||
From 2bb371937c7ef73f26717e57a5eb78cafe90a9f7 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 20 Sep 2019 09:58:01 +0200
|
||||
Subject: [PATCH 1/5] Mark all GIR file constants as guint64
|
||||
|
||||
See 9676585e65f69ec1c309f45ba139035408d59b8e for more information.
|
||||
---
|
||||
src/lib/plugin_apis/btrfs.api | 2 +-
|
||||
src/lib/plugin_apis/crypto.api | 2 +-
|
||||
src/lib/plugin_apis/lvm.api | 20 ++++++++++----------
|
||||
src/lib/plugin_apis/mdraid.api | 4 ++--
|
||||
4 files changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/btrfs.api b/src/lib/plugin_apis/btrfs.api
|
||||
index b52fb4ce..ef0f6c28 100644
|
||||
--- a/src/lib/plugin_apis/btrfs.api
|
||||
+++ b/src/lib/plugin_apis/btrfs.api
|
||||
@@ -3,7 +3,7 @@
|
||||
#include <blockdev/utils.h>
|
||||
|
||||
#define BD_BTRFS_MAIN_VOLUME_ID 5
|
||||
-#define BD_BTRFS_MIN_MEMBER_SIZE (128 MiB)
|
||||
+#define BD_BTRFS_MIN_MEMBER_SIZE G_GUINT64_CONSTANT (134217728ULL) // 128 MiB
|
||||
|
||||
GQuark bd_btrfs_error_quark (void) {
|
||||
return g_quark_from_static_string ("g-bd-btrfs-error-quark");
|
||||
diff --git a/src/lib/plugin_apis/crypto.api b/src/lib/plugin_apis/crypto.api
|
||||
index e3d69986..ef0217fe 100644
|
||||
--- a/src/lib/plugin_apis/crypto.api
|
||||
+++ b/src/lib/plugin_apis/crypto.api
|
||||
@@ -1,7 +1,7 @@
|
||||
#include <glib.h>
|
||||
#include <blockdev/utils.h>
|
||||
|
||||
-#define BD_CRYPTO_LUKS_METADATA_SIZE (2 MiB)
|
||||
+#define BD_CRYPTO_LUKS_METADATA_SIZE G_GUINT64_CONSTANT (2097152ULL) // 2 MiB
|
||||
|
||||
GQuark bd_crypto_error_quark (void) {
|
||||
return g_quark_from_static_string ("g-bd-crypto-error-quark");
|
||||
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
|
||||
index 21c8f74d..ea52263b 100644
|
||||
--- a/src/lib/plugin_apis/lvm.api
|
||||
+++ b/src/lib/plugin_apis/lvm.api
|
||||
@@ -15,18 +15,18 @@
|
||||
#define BD_LVM_MAX_LV_SIZE G_GUINT64_CONSTANT (9223372036854775808ULL)
|
||||
|
||||
|
||||
-#define BD_LVM_DEFAULT_PE_START (1 MiB)
|
||||
-#define BD_LVM_DEFAULT_PE_SIZE (4 MiB)
|
||||
-#define BD_LVM_MIN_PE_SIZE (1 KiB)
|
||||
-#define BD_LVM_MAX_PE_SIZE (16 GiB)
|
||||
-#define BD_LVM_MIN_THPOOL_MD_SIZE (2 MiB)
|
||||
-#define BD_LVM_MAX_THPOOL_MD_SIZE (16 GiB)
|
||||
-#define BD_LVM_MIN_THPOOL_CHUNK_SIZE (64 KiB)
|
||||
-#define BD_LVM_MAX_THPOOL_CHUNK_SIZE (1 GiB)
|
||||
-#define BD_LVM_DEFAULT_CHUNK_SIZE (64 KiB)
|
||||
+#define BD_LVM_DEFAULT_PE_START G_GUINT64_CONSTANT (1048576ULL) // 1 MiB
|
||||
+#define BD_LVM_DEFAULT_PE_SIZE G_GUINT64_CONSTANT (4194304ULL) // 4 MiB
|
||||
+#define BD_LVM_MIN_PE_SIZE G_GUINT64_CONSTANT (1024ULL) // 1 KiB
|
||||
+#define BD_LVM_MAX_PE_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
|
||||
+#define BD_LVM_MIN_THPOOL_MD_SIZE G_GUINT64_CONSTANT (2097152ULL) // 2 MiB
|
||||
+#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
|
||||
+#define BD_LVM_MIN_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
|
||||
+#define BD_LVM_MAX_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (1073741824ULL) // 1 GiB
|
||||
+#define BD_LVM_DEFAULT_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
|
||||
|
||||
/* according to lvmcache (7) */
|
||||
-#define BD_LVM_MIN_CACHE_MD_SIZE (8 MiB)
|
||||
+#define BD_LVM_MIN_CACHE_MD_SIZE (8388608ULL) // 8 MiB
|
||||
|
||||
GQuark bd_lvm_error_quark (void) {
|
||||
return g_quark_from_static_string ("g-bd-lvm-error-quark");
|
||||
diff --git a/src/lib/plugin_apis/mdraid.api b/src/lib/plugin_apis/mdraid.api
|
||||
index 3bd9eaf2..02ca9530 100644
|
||||
--- a/src/lib/plugin_apis/mdraid.api
|
||||
+++ b/src/lib/plugin_apis/mdraid.api
|
||||
@@ -7,8 +7,8 @@
|
||||
|
||||
/* taken from blivet */
|
||||
// these defaults were determined empirically
|
||||
-#define BD_MD_SUPERBLOCK_SIZE (2 MiB)
|
||||
-#define BD_MD_CHUNK_SIZE (512 KiB)
|
||||
+#define BD_MD_SUPERBLOCK_SIZE G_GUINT64_CONSTANT (2097152ULL) // 2 MiB
|
||||
+#define BD_MD_CHUNK_SIZE G_GUINT64_CONSTANT (524288ULL) // 512 KiB
|
||||
|
||||
GQuark bd_md_error_quark (void) {
|
||||
return g_quark_from_static_string ("g-bd-md-error-quark");
|
||||
|
||||
From aeedce3bcaa8182c9878cc51d3f85a6c6eb6a01f Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 3 Dec 2020 14:41:25 +0100
|
||||
Subject: [PATCH 2/5] lvm: Set thin metadata limits to match limits LVM uses in
|
||||
lvcreate
|
||||
|
||||
---
|
||||
src/lib/plugin_apis/lvm.api | 4 ++--
|
||||
src/plugins/lvm.h | 9 +++++++--
|
||||
tests/lvm_dbus_tests.py | 7 ++++---
|
||||
tests/lvm_test.py | 7 ++++---
|
||||
4 files changed, 17 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
|
||||
index ea52263b..e843c916 100644
|
||||
--- a/src/lib/plugin_apis/lvm.api
|
||||
+++ b/src/lib/plugin_apis/lvm.api
|
||||
@@ -19,8 +19,8 @@
|
||||
#define BD_LVM_DEFAULT_PE_SIZE G_GUINT64_CONSTANT (4194304ULL) // 4 MiB
|
||||
#define BD_LVM_MIN_PE_SIZE G_GUINT64_CONSTANT (1024ULL) // 1 KiB
|
||||
#define BD_LVM_MAX_PE_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
|
||||
-#define BD_LVM_MIN_THPOOL_MD_SIZE G_GUINT64_CONSTANT (2097152ULL) // 2 MiB
|
||||
-#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
|
||||
+#define BD_LVM_MIN_THPOOL_MD_SIZE G_GUINT64_CONSTANT (4194304ULL) // 4 MiB
|
||||
+#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (33957085184ULL) // 31.62 GiB
|
||||
#define BD_LVM_MIN_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
|
||||
#define BD_LVM_MAX_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (1073741824ULL) // 1 GiB
|
||||
#define BD_LVM_DEFAULT_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
|
||||
diff --git a/src/plugins/lvm.h b/src/plugins/lvm.h
|
||||
index 4b970f2e..01c06ca4 100644
|
||||
--- a/src/plugins/lvm.h
|
||||
+++ b/src/plugins/lvm.h
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <glib.h>
|
||||
#include <blockdev/utils.h>
|
||||
+#include <libdevmapper.h>
|
||||
|
||||
#ifndef BD_LVM
|
||||
#define BD_LVM
|
||||
@@ -21,8 +22,12 @@
|
||||
#define USE_DEFAULT_PE_SIZE 0
|
||||
#define RESOLVE_PE_SIZE(size) ((size) == USE_DEFAULT_PE_SIZE ? BD_LVM_DEFAULT_PE_SIZE : (size))
|
||||
|
||||
-#define BD_LVM_MIN_THPOOL_MD_SIZE (2 MiB)
|
||||
-#define BD_LVM_MAX_THPOOL_MD_SIZE (16 GiB)
|
||||
+/* lvm constants for thin pool metadata size are actually half of these
|
||||
+ but when they calculate the actual metadata size they double the limits
|
||||
+ so lets just double the limits here too */
|
||||
+#define BD_LVM_MIN_THPOOL_MD_SIZE (4 MiB)
|
||||
+#define BD_LVM_MAX_THPOOL_MD_SIZE (DM_THIN_MAX_METADATA_SIZE KiB)
|
||||
+
|
||||
#define BD_LVM_MIN_THPOOL_CHUNK_SIZE (64 KiB)
|
||||
#define BD_LVM_MAX_THPOOL_CHUNK_SIZE (1 GiB)
|
||||
#define BD_LVM_DEFAULT_CHUNK_SIZE (64 KiB)
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index 47402fc3..b517aae9 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -160,12 +160,13 @@ def test_get_thpool_meta_size(self):
|
||||
def test_is_valid_thpool_md_size(self):
|
||||
"""Verify that is_valid_thpool_md_size works as expected"""
|
||||
|
||||
- self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(2 * 1024**2))
|
||||
- self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
|
||||
+ self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(4 * 1024**2))
|
||||
+ self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(5 * 1024**2))
|
||||
self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
|
||||
|
||||
self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(1 * 1024**2))
|
||||
- self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(17 * 1024**3))
|
||||
+ self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
|
||||
+ self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(32 * 1024**3))
|
||||
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
def test_is_valid_thpool_chunk_size(self):
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index 149cf54a..d0085651 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -153,12 +153,13 @@ def test_get_thpool_meta_size(self):
|
||||
def test_is_valid_thpool_md_size(self):
|
||||
"""Verify that is_valid_thpool_md_size works as expected"""
|
||||
|
||||
- self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(2 * 1024**2))
|
||||
- self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
|
||||
+ self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(4 * 1024**2))
|
||||
+ self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(5 * 1024**2))
|
||||
self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
|
||||
|
||||
self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(1 * 1024**2))
|
||||
- self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(17 * 1024**3))
|
||||
+ self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
|
||||
+ self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(32 * 1024**3))
|
||||
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
def test_is_valid_thpool_chunk_size(self):
|
||||
|
||||
From 15fcf1bb62865083a3483fc51f45e11cdc2d7386 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 3 Dec 2020 14:46:00 +0100
|
||||
Subject: [PATCH 3/5] lvm: Do not use thin_metadata_size to recommend thin
|
||||
metadata size
|
||||
|
||||
thin_metadata_size calculates the metadata size differently and
|
||||
recommends smaller metadata than lvcreate so we should use the
|
||||
lvcreate formula instead.
|
||||
|
||||
Resolves: rhbz#1898668
|
||||
---
|
||||
dist/libblockdev.spec.in | 4 --
|
||||
src/lib/plugin_apis/lvm.api | 8 +--
|
||||
src/plugins/lvm-dbus.c | 78 ++++++-----------------------
|
||||
src/plugins/lvm.c | 66 +++++++-----------------
|
||||
src/python/gi/overrides/BlockDev.py | 6 +++
|
||||
tests/library_test.py | 6 +--
|
||||
tests/lvm_dbus_tests.py | 20 ++++----
|
||||
tests/lvm_test.py | 15 ++----
|
||||
tests/utils.py | 2 +-
|
||||
9 files changed, 61 insertions(+), 144 deletions(-)
|
||||
|
||||
diff --git a/dist/libblockdev.spec.in b/dist/libblockdev.spec.in
|
||||
index 7c775174..3e0a53c6 100644
|
||||
--- a/dist/libblockdev.spec.in
|
||||
+++ b/dist/libblockdev.spec.in
|
||||
@@ -387,8 +387,6 @@ BuildRequires: device-mapper-devel
|
||||
Summary: The LVM plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: lvm2
|
||||
-# for thin_metadata_size
|
||||
-Requires: device-mapper-persistent-data
|
||||
|
||||
%description lvm
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
@@ -411,8 +409,6 @@ BuildRequires: device-mapper-devel
|
||||
Summary: The LVM plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 1.4
|
||||
Requires: lvm2-dbusd >= 2.02.156
|
||||
-# for thin_metadata_size
|
||||
-Requires: device-mapper-persistent-data
|
||||
|
||||
%description lvm-dbus
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
|
||||
index e843c916..9f25c1ed 100644
|
||||
--- a/src/lib/plugin_apis/lvm.api
|
||||
+++ b/src/lib/plugin_apis/lvm.api
|
||||
@@ -704,11 +704,13 @@ guint64 bd_lvm_get_thpool_padding (guint64 size, guint64 pe_size, gboolean inclu
|
||||
* bd_lvm_get_thpool_meta_size:
|
||||
* @size: size of the thin pool
|
||||
* @chunk_size: chunk size of the thin pool or 0 to use the default (%BD_LVM_DEFAULT_CHUNK_SIZE)
|
||||
- * @n_snapshots: number of snapshots that will be created in the pool
|
||||
+ * @n_snapshots: ignored
|
||||
* @error: (out): place to store error (if any)
|
||||
*
|
||||
- * Returns: recommended size of the metadata space for the specified pool or 0
|
||||
- * in case of error
|
||||
+ * Note: This function will be changed in 3.0: the @n_snapshots parameter
|
||||
+ * is currently not used and will be removed.
|
||||
+ *
|
||||
+ * Returns: recommended size of the metadata space for the specified pool
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
|
||||
*/
|
||||
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
|
||||
index 9f821a99..24d54426 100644
|
||||
--- a/src/plugins/lvm-dbus.c
|
||||
+++ b/src/plugins/lvm-dbus.c
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <glib.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
-#include <libdevmapper.h>
|
||||
#include <unistd.h>
|
||||
#include <blockdev/utils.h>
|
||||
#include <gio/gio.h>
|
||||
@@ -248,14 +247,6 @@ static volatile guint avail_features = 0;
|
||||
static volatile guint avail_module_deps = 0;
|
||||
static GMutex deps_check_lock;
|
||||
|
||||
-#define DEPS_THMS 0
|
||||
-#define DEPS_THMS_MASK (1 << DEPS_THMS)
|
||||
-#define DEPS_LAST 1
|
||||
-
|
||||
-static const UtilDep deps[DEPS_LAST] = {
|
||||
- {"thin_metadata_size", NULL, NULL, NULL},
|
||||
-};
|
||||
-
|
||||
#define DBUS_DEPS_LVMDBUSD 0
|
||||
#define DBUS_DEPS_LVMDBUSD_MASK (1 << DBUS_DEPS_LVMDBUSD)
|
||||
#define DBUS_DEPS_LAST 1
|
||||
@@ -301,17 +292,6 @@ gboolean bd_lvm_check_deps (void) {
|
||||
check_ret = check_ret && success;
|
||||
}
|
||||
|
||||
- for (i=0; i < DEPS_LAST; i++) {
|
||||
- success = bd_utils_check_util_version (deps[i].name, deps[i].version,
|
||||
- deps[i].ver_arg, deps[i].ver_regexp, &error);
|
||||
- if (!success)
|
||||
- g_warning ("%s", error->message);
|
||||
- else
|
||||
- g_atomic_int_or (&avail_deps, 1 << i);
|
||||
- g_clear_error (&error);
|
||||
- check_ret = check_ret && success;
|
||||
- }
|
||||
-
|
||||
if (!check_ret)
|
||||
g_warning("Cannot load the LVM plugin");
|
||||
|
||||
@@ -386,10 +366,7 @@ gboolean bd_lvm_is_tech_avail (BDLVMTech tech, guint64 mode, GError **error) {
|
||||
g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_TECH_UNAVAIL,
|
||||
"Only 'query' supported for thin calculations");
|
||||
return FALSE;
|
||||
- } else if ((mode & BD_LVM_TECH_MODE_QUERY) &&
|
||||
- !check_deps (&avail_deps, DEPS_THMS_MASK, deps, DEPS_LAST, &deps_check_lock, error))
|
||||
- return FALSE;
|
||||
- else
|
||||
+ } else
|
||||
return TRUE;
|
||||
case BD_LVM_TECH_CALCS:
|
||||
if (mode & ~BD_LVM_TECH_MODE_QUERY) {
|
||||
@@ -1303,53 +1280,28 @@ guint64 bd_lvm_get_thpool_padding (guint64 size, guint64 pe_size, gboolean inclu
|
||||
* bd_lvm_get_thpool_meta_size:
|
||||
* @size: size of the thin pool
|
||||
* @chunk_size: chunk size of the thin pool or 0 to use the default (%BD_LVM_DEFAULT_CHUNK_SIZE)
|
||||
- * @n_snapshots: number of snapshots that will be created in the pool
|
||||
+ * @n_snapshots: ignored
|
||||
* @error: (out): place to store error (if any)
|
||||
*
|
||||
- * Returns: recommended size of the metadata space for the specified pool or 0
|
||||
- * in case of error
|
||||
+ * Note: This function will be changed in 3.0: the @n_snapshots parameter
|
||||
+ * is currently not used and will be removed.
|
||||
+ *
|
||||
+ * Returns: recommended size of the metadata space for the specified pool
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n_snapshots, GError **error) {
|
||||
- /* ub - output in bytes, n - output just the number */
|
||||
- const gchar* args[7] = {"thin_metadata_size", "-ub", "-n", NULL, NULL, NULL, NULL};
|
||||
- gchar *output = NULL;
|
||||
- gboolean success = FALSE;
|
||||
- guint64 ret = 0;
|
||||
-
|
||||
- if (!check_deps (&avail_deps, DEPS_THMS_MASK, deps, DEPS_LAST, &deps_check_lock, error))
|
||||
- return 0;
|
||||
+guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n_snapshots UNUSED, GError **error UNUSED) {
|
||||
+ guint64 md_size = 0;
|
||||
|
||||
- /* s - total size, b - chunk size, m - number of snapshots */
|
||||
- args[3] = g_strdup_printf ("-s%"G_GUINT64_FORMAT, size);
|
||||
- args[4] = g_strdup_printf ("-b%"G_GUINT64_FORMAT,
|
||||
- chunk_size != 0 ? chunk_size : (guint64) BD_LVM_DEFAULT_CHUNK_SIZE);
|
||||
- args[5] = g_strdup_printf ("-m%"G_GUINT64_FORMAT, n_snapshots);
|
||||
-
|
||||
- success = bd_utils_exec_and_capture_output (args, NULL, &output, error);
|
||||
- g_free ((gchar*) args[3]);
|
||||
- g_free ((gchar*) args[4]);
|
||||
- g_free ((gchar*) args[5]);
|
||||
-
|
||||
- if (!success) {
|
||||
- /* error is already set */
|
||||
- g_free (output);
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- ret = g_ascii_strtoull (output, NULL, 0);
|
||||
- if (ret == 0) {
|
||||
- g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_PARSE,
|
||||
- "Failed to parse number from thin_metadata_size's output: '%s'",
|
||||
- output);
|
||||
- g_free (output);
|
||||
- return 0;
|
||||
- }
|
||||
+ /* based on lvcreate metadata size calculation */
|
||||
+ md_size = UINT64_C(64) * size / (chunk_size ? chunk_size : BD_LVM_DEFAULT_CHUNK_SIZE);
|
||||
|
||||
- g_free (output);
|
||||
+ if (md_size > BD_LVM_MAX_THPOOL_MD_SIZE)
|
||||
+ md_size = BD_LVM_MAX_THPOOL_MD_SIZE;
|
||||
+ else if (md_size < BD_LVM_MIN_THPOOL_MD_SIZE)
|
||||
+ md_size = BD_LVM_MIN_THPOOL_MD_SIZE;
|
||||
|
||||
- return MAX (ret, BD_LVM_MIN_THPOOL_MD_SIZE);
|
||||
+ return md_size;
|
||||
}
|
||||
|
||||
/**
|
||||
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
|
||||
index 6bfaa338..74493feb 100644
|
||||
--- a/src/plugins/lvm.c
|
||||
+++ b/src/plugins/lvm.c
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <glib.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
-#include <libdevmapper.h>
|
||||
#include <unistd.h>
|
||||
#include <blockdev/utils.h>
|
||||
|
||||
@@ -213,13 +212,10 @@ static GMutex deps_check_lock;
|
||||
|
||||
#define DEPS_LVM 0
|
||||
#define DEPS_LVM_MASK (1 << DEPS_LVM)
|
||||
-#define DEPS_THMS 1
|
||||
-#define DEPS_THMS_MASK (1 << DEPS_THMS)
|
||||
-#define DEPS_LAST 2
|
||||
+#define DEPS_LAST 1
|
||||
|
||||
static const UtilDep deps[DEPS_LAST] = {
|
||||
{"lvm", LVM_MIN_VERSION, "version", "LVM version:\\s+([\\d\\.]+)"},
|
||||
- {"thin_metadata_size", NULL, NULL, NULL},
|
||||
};
|
||||
|
||||
#define FEATURES_VDO 0
|
||||
@@ -236,6 +232,8 @@ static const UtilFeatureDep features[FEATURES_LAST] = {
|
||||
|
||||
static const gchar*const module_deps[MODULE_DEPS_LAST] = { "kvdo" };
|
||||
|
||||
+#define UNUSED __attribute__((unused))
|
||||
+
|
||||
/**
|
||||
* bd_lvm_check_deps:
|
||||
*
|
||||
@@ -317,10 +315,7 @@ gboolean bd_lvm_is_tech_avail (BDLVMTech tech, guint64 mode, GError **error) {
|
||||
g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_TECH_UNAVAIL,
|
||||
"Only 'query' supported for thin calculations");
|
||||
return FALSE;
|
||||
- } else if ((mode & BD_LVM_TECH_MODE_QUERY) &&
|
||||
- !check_deps (&avail_deps, DEPS_THMS_MASK, deps, DEPS_LAST, &deps_check_lock, error))
|
||||
- return FALSE;
|
||||
- else
|
||||
+ } else
|
||||
return TRUE;
|
||||
case BD_LVM_TECH_CALCS:
|
||||
if (mode & ~BD_LVM_TECH_MODE_QUERY) {
|
||||
@@ -820,53 +815,28 @@ guint64 bd_lvm_get_thpool_padding (guint64 size, guint64 pe_size, gboolean inclu
|
||||
* bd_lvm_get_thpool_meta_size:
|
||||
* @size: size of the thin pool
|
||||
* @chunk_size: chunk size of the thin pool or 0 to use the default (%BD_LVM_DEFAULT_CHUNK_SIZE)
|
||||
- * @n_snapshots: number of snapshots that will be created in the pool
|
||||
+ * @n_snapshots: ignored
|
||||
* @error: (out): place to store error (if any)
|
||||
*
|
||||
- * Returns: recommended size of the metadata space for the specified pool or 0
|
||||
- * in case of error
|
||||
+ * Note: This function will be changed in 3.0: the @n_snapshots parameter
|
||||
+ * is currently not used and will be removed.
|
||||
+ *
|
||||
+ * Returns: recommended size of the metadata space for the specified pool
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n_snapshots, GError **error) {
|
||||
- /* ub - output in bytes, n - output just the number */
|
||||
- const gchar* args[7] = {"thin_metadata_size", "-ub", "-n", NULL, NULL, NULL, NULL};
|
||||
- gchar *output = NULL;
|
||||
- gboolean success = FALSE;
|
||||
- guint64 ret = 0;
|
||||
-
|
||||
- if (!check_deps (&avail_deps, DEPS_THMS_MASK, deps, DEPS_LAST, &deps_check_lock, error))
|
||||
- return 0;
|
||||
+guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n_snapshots UNUSED, GError **error UNUSED) {
|
||||
+ guint64 md_size = 0;
|
||||
|
||||
- /* s - total size, b - chunk size, m - number of snapshots */
|
||||
- args[3] = g_strdup_printf ("-s%"G_GUINT64_FORMAT, size);
|
||||
- args[4] = g_strdup_printf ("-b%"G_GUINT64_FORMAT,
|
||||
- chunk_size != 0 ? chunk_size : (guint64) BD_LVM_DEFAULT_CHUNK_SIZE);
|
||||
- args[5] = g_strdup_printf ("-m%"G_GUINT64_FORMAT, n_snapshots);
|
||||
+ /* based on lvcreate metadata size calculation */
|
||||
+ md_size = UINT64_C(64) * size / (chunk_size ? chunk_size : BD_LVM_DEFAULT_CHUNK_SIZE);
|
||||
|
||||
- success = bd_utils_exec_and_capture_output (args, NULL, &output, error);
|
||||
- g_free ((gchar*) args[3]);
|
||||
- g_free ((gchar*) args[4]);
|
||||
- g_free ((gchar*) args[5]);
|
||||
-
|
||||
- if (!success) {
|
||||
- /* error is already set */
|
||||
- g_free (output);
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- ret = g_ascii_strtoull (output, NULL, 0);
|
||||
- if (ret == 0) {
|
||||
- g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_PARSE,
|
||||
- "Failed to parse number from thin_metadata_size's output: '%s'",
|
||||
- output);
|
||||
- g_free (output);
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- g_free (output);
|
||||
+ if (md_size > BD_LVM_MAX_THPOOL_MD_SIZE)
|
||||
+ md_size = BD_LVM_MAX_THPOOL_MD_SIZE;
|
||||
+ else if (md_size < BD_LVM_MIN_THPOOL_MD_SIZE)
|
||||
+ md_size = BD_LVM_MIN_THPOOL_MD_SIZE;
|
||||
|
||||
- return MAX (ret, BD_LVM_MIN_THPOOL_MD_SIZE);
|
||||
+ return md_size;
|
||||
}
|
||||
|
||||
/**
|
||||
diff --git a/src/python/gi/overrides/BlockDev.py b/src/python/gi/overrides/BlockDev.py
|
||||
index d78bfaab..f768c8bd 100644
|
||||
--- a/src/python/gi/overrides/BlockDev.py
|
||||
+++ b/src/python/gi/overrides/BlockDev.py
|
||||
@@ -462,6 +462,12 @@ def lvm_get_thpool_padding(size, pe_size=0, included=False):
|
||||
return _lvm_get_thpool_padding(size, pe_size, included)
|
||||
__all__.append("lvm_get_thpool_padding")
|
||||
|
||||
+_lvm_get_thpool_meta_size = BlockDev.lvm_get_thpool_meta_size
|
||||
+@override(BlockDev.lvm_get_thpool_meta_size)
|
||||
+def lvm_get_thpool_meta_size(size, chunk_size=0, n_snapshots=0):
|
||||
+ return _lvm_get_thpool_meta_size(size, chunk_size, n_snapshots)
|
||||
+__all__.append("lvm_get_thpool_meta_size")
|
||||
+
|
||||
_lvm_pvcreate = BlockDev.lvm_pvcreate
|
||||
@override(BlockDev.lvm_pvcreate)
|
||||
def lvm_pvcreate(device, data_alignment=0, metadata_size=0, extra=None, **kwargs):
|
||||
diff --git a/tests/library_test.py b/tests/library_test.py
|
||||
index e8bb175a..08e44fdc 100644
|
||||
--- a/tests/library_test.py
|
||||
+++ b/tests/library_test.py
|
||||
@@ -349,8 +349,7 @@ def test_try_reinit(self):
|
||||
|
||||
# try reinitializing with only some utilities being available and thus
|
||||
# only some plugins able to load
|
||||
- with fake_path("tests/lib_missing_utils", keep_utils=["swapon", "swapoff", "mkswap", "lvm",
|
||||
- "thin_metadata_size", "swaplabel"]):
|
||||
+ with fake_path("tests/lib_missing_utils", keep_utils=["swapon", "swapoff", "mkswap", "lvm", "swaplabel"]):
|
||||
succ, loaded = BlockDev.try_reinit(self.requested_plugins, True, None)
|
||||
self.assertFalse(succ)
|
||||
for plug_name in ("swap", "lvm", "crypto"):
|
||||
@@ -361,8 +360,7 @@ def test_try_reinit(self):
|
||||
|
||||
# now the same with a subset of plugins requested
|
||||
plugins = BlockDev.plugin_specs_from_names(["lvm", "swap", "crypto"])
|
||||
- with fake_path("tests/lib_missing_utils", keep_utils=["swapon", "swapoff", "mkswap", "lvm",
|
||||
- "thin_metadata_size", "swaplabel"]):
|
||||
+ with fake_path("tests/lib_missing_utils", keep_utils=["swapon", "swapoff", "mkswap", "lvm","swaplabel"]):
|
||||
succ, loaded = BlockDev.try_reinit(plugins, True, None)
|
||||
self.assertTrue(succ)
|
||||
self.assertEqual(set(loaded), set(["swap", "lvm", "crypto"]))
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index b517aae9..c06a480c 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -141,21 +141,19 @@ def test_get_thpool_padding(self):
|
||||
def test_get_thpool_meta_size(self):
|
||||
"""Verify that getting recommended thin pool metadata size works as expected"""
|
||||
|
||||
- # no idea how thin_metadata_size works, but let's at least check that
|
||||
- # the function works and returns what thin_metadata_size says
|
||||
- out1 = subprocess.check_output(["thin_metadata_size", "-ub", "-n", "-b64k", "-s1t", "-m100"])
|
||||
- self.assertEqual(int(out1), BlockDev.lvm_get_thpool_meta_size (1 * 1024**4, 64 * 1024, 100))
|
||||
+ # metadata size is calculated as 64 * pool_size / chunk_size
|
||||
+ self.assertEqual(BlockDev.lvm_get_thpool_meta_size(1 * 1024**4, 64 * 1024), 1 * 1024**3)
|
||||
|
||||
- out2 = subprocess.check_output(["thin_metadata_size", "-ub", "-n", "-b128k", "-s1t", "-m100"])
|
||||
- self.assertEqual(int(out2), BlockDev.lvm_get_thpool_meta_size (1 * 1024**4, 128 * 1024, 100))
|
||||
+ self.assertEqual(BlockDev.lvm_get_thpool_meta_size(1 * 1024**4, 128 * 1024), 512 * 1024**2)
|
||||
|
||||
- # twice the chunk_size -> roughly half the metadata needed
|
||||
- self.assertAlmostEqual(float(out1) / float(out2), 2, places=2)
|
||||
-
|
||||
- # unless thin_metadata_size gives a value that is not valid (too small)
|
||||
- self.assertEqual(BlockDev.lvm_get_thpool_meta_size (100 * 1024**2, 128 * 1024, 100),
|
||||
+ # lower limit is 4 MiB
|
||||
+ self.assertEqual(BlockDev.lvm_get_thpool_meta_size(100 * 1024**2, 128 * 1024),
|
||||
BlockDev.LVM_MIN_THPOOL_MD_SIZE)
|
||||
|
||||
+ # upper limit is 31.62 GiB
|
||||
+ self.assertEqual(BlockDev.lvm_get_thpool_meta_size(100 * 1024**4, 64 * 1024),
|
||||
+ BlockDev.LVM_MAX_THPOOL_MD_SIZE)
|
||||
+
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
def test_is_valid_thpool_md_size(self):
|
||||
"""Verify that is_valid_thpool_md_size works as expected"""
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index d0085651..b84adece 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -134,19 +134,14 @@ def test_get_thpool_padding(self):
|
||||
def test_get_thpool_meta_size(self):
|
||||
"""Verify that getting recommended thin pool metadata size works as expected"""
|
||||
|
||||
- # no idea how thin_metadata_size works, but let's at least check that
|
||||
- # the function works and returns what thin_metadata_size says
|
||||
- out1 = subprocess.check_output(["thin_metadata_size", "-ub", "-n", "-b64k", "-s1t", "-m100"])
|
||||
- self.assertEqual(int(out1), BlockDev.lvm_get_thpool_meta_size (1 * 1024**4, 64 * 1024, 100))
|
||||
|
||||
- out2 = subprocess.check_output(["thin_metadata_size", "-ub", "-n", "-b128k", "-s1t", "-m100"])
|
||||
- self.assertEqual(int(out2), BlockDev.lvm_get_thpool_meta_size (1 * 1024**4, 128 * 1024, 100))
|
||||
+ self.assertEqual(BlockDev.lvm_get_thpool_meta_size(1 * 1024**4, 64 * 1024),
|
||||
+ 1 * 1024**3)
|
||||
|
||||
- # twice the chunk_size -> roughly half the metadata needed
|
||||
- self.assertAlmostEqual(float(out1) / float(out2), 2, places=2)
|
||||
+ self.assertEqual(BlockDev.lvm_get_thpool_meta_size(1 * 1024**4, 128 * 1024),
|
||||
+ 512 * 1024**2)
|
||||
|
||||
- # unless thin_metadata_size gives a value that is not valid (too small)
|
||||
- self.assertEqual(BlockDev.lvm_get_thpool_meta_size (100 * 1024**2, 128 * 1024, 100),
|
||||
+ self.assertEqual(BlockDev.lvm_get_thpool_meta_size(100 * 1024**2, 128 * 1024),
|
||||
BlockDev.LVM_MIN_THPOOL_MD_SIZE)
|
||||
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
diff --git a/tests/utils.py b/tests/utils.py
|
||||
index 182eda6a..584fde5c 100644
|
||||
--- a/tests/utils.py
|
||||
+++ b/tests/utils.py
|
||||
@@ -70,7 +70,7 @@ def fake_utils(path="."):
|
||||
finally:
|
||||
os.environ["PATH"] = old_path
|
||||
|
||||
-ALL_UTILS = {"lvm", "thin_metadata_size", "btrfs", "mkswap", "swaplabel", "multipath", "mpathconf", "dmsetup", "mdadm", "make-bcache", "sgdisk", "sfdisk"}
|
||||
+ALL_UTILS = {"lvm", "btrfs", "mkswap", "swaplabel", "multipath", "mpathconf", "dmsetup", "mdadm", "make-bcache", "sgdisk", "sfdisk"}
|
||||
|
||||
@contextmanager
|
||||
def fake_path(path=None, keep_utils=None, all_but=None):
|
||||
|
||||
From 27961a3fcb205ea51f40668d68765dd8d388777b Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 3 Dec 2020 14:48:08 +0100
|
||||
Subject: [PATCH 4/5] lvm: Use the UNUSED macro instead of
|
||||
__attribute__((unused))
|
||||
|
||||
for unused attributes. It makes the function definition a little
|
||||
bit more readable.
|
||||
---
|
||||
src/plugins/lvm-dbus.c | 24 ++++++++++++------------
|
||||
src/plugins/lvm.c | 20 ++++++++++----------
|
||||
2 files changed, 22 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
|
||||
index 24d54426..b7b4480e 100644
|
||||
--- a/src/plugins/lvm-dbus.c
|
||||
+++ b/src/plugins/lvm-dbus.c
|
||||
@@ -959,7 +959,7 @@ static BDLVMPVdata* get_pv_data_from_props (GVariant *props, GError **error) {
|
||||
return data;
|
||||
}
|
||||
|
||||
-static BDLVMVGdata* get_vg_data_from_props (GVariant *props, GError **error __attribute__((unused))) {
|
||||
+static BDLVMVGdata* get_vg_data_from_props (GVariant *props, GError **error UNUSED) {
|
||||
BDLVMVGdata *data = g_new0 (BDLVMVGdata, 1);
|
||||
GVariantDict dict;
|
||||
|
||||
@@ -1061,7 +1061,7 @@ static BDLVMLVdata* get_lv_data_from_props (GVariant *props, GError **error) {
|
||||
return data;
|
||||
}
|
||||
|
||||
-static BDLVMVDOPooldata* get_vdo_data_from_props (GVariant *props, GError **error __attribute__((unused))) {
|
||||
+static BDLVMVDOPooldata* get_vdo_data_from_props (GVariant *props, GError **error UNUSED) {
|
||||
BDLVMVDOPooldata *data = g_new0 (BDLVMVDOPooldata, 1);
|
||||
GVariantDict dict;
|
||||
gchar *value = NULL;
|
||||
@@ -1165,7 +1165,7 @@ static GVariant* create_size_str_param (guint64 size, const gchar *unit) {
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error __attribute__((unused))) {
|
||||
+gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error UNUSED) {
|
||||
return (((size % 2) == 0) && (size >= (BD_LVM_MIN_PE_SIZE)) && (size <= (BD_LVM_MAX_PE_SIZE)));
|
||||
}
|
||||
|
||||
@@ -1177,7 +1177,7 @@ gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error __attribute__
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 *bd_lvm_get_supported_pe_sizes (GError **error __attribute__((unused))) {
|
||||
+guint64 *bd_lvm_get_supported_pe_sizes (GError **error UNUSED) {
|
||||
guint8 i;
|
||||
guint64 val = BD_LVM_MIN_PE_SIZE;
|
||||
guint8 num_items = ((guint8) round (log2 ((double) BD_LVM_MAX_PE_SIZE))) - ((guint8) round (log2 ((double) BD_LVM_MIN_PE_SIZE))) + 2;
|
||||
@@ -1199,7 +1199,7 @@ guint64 *bd_lvm_get_supported_pe_sizes (GError **error __attribute__((unused)))
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 bd_lvm_get_max_lv_size (GError **error __attribute__((unused))) {
|
||||
+guint64 bd_lvm_get_max_lv_size (GError **error UNUSED) {
|
||||
return BD_LVM_MAX_LV_SIZE;
|
||||
}
|
||||
|
||||
@@ -1219,7 +1219,7 @@ guint64 bd_lvm_get_max_lv_size (GError **error __attribute__((unused))) {
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 bd_lvm_round_size_to_pe (guint64 size, guint64 pe_size, gboolean roundup, GError **error __attribute__((unused))) {
|
||||
+guint64 bd_lvm_round_size_to_pe (guint64 size, guint64 pe_size, gboolean roundup, GError **error UNUSED) {
|
||||
pe_size = RESOLVE_PE_SIZE(pe_size);
|
||||
guint64 delta = size % pe_size;
|
||||
if (delta == 0)
|
||||
@@ -1313,7 +1313,7 @@ guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error __attribute__((unused))) {
|
||||
+gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error UNUSED) {
|
||||
return ((BD_LVM_MIN_THPOOL_MD_SIZE <= size) && (size <= BD_LVM_MAX_THPOOL_MD_SIZE));
|
||||
}
|
||||
|
||||
@@ -1327,7 +1327,7 @@ gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error __attribut
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-gboolean bd_lvm_is_valid_thpool_chunk_size (guint64 size, gboolean discard, GError **error __attribute__((unused))) {
|
||||
+gboolean bd_lvm_is_valid_thpool_chunk_size (guint64 size, gboolean discard, GError **error UNUSED) {
|
||||
gdouble size_log2 = 0.0;
|
||||
|
||||
if ((size < BD_LVM_MIN_THPOOL_CHUNK_SIZE) || (size > BD_LVM_MAX_THPOOL_CHUNK_SIZE))
|
||||
@@ -2616,7 +2616,7 @@ gboolean bd_lvm_thsnapshotcreate (const gchar *vg_name, const gchar *origin_name
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_GLOB_CONF no mode (it is ignored)
|
||||
*/
|
||||
-gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error __attribute__((unused))) {
|
||||
+gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error UNUSED) {
|
||||
/* XXX: the error attribute will likely be used in the future when
|
||||
some validation comes into the game */
|
||||
|
||||
@@ -2641,7 +2641,7 @@ gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error __att
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_GLOB_CONF no mode (it is ignored)
|
||||
*/
|
||||
-gchar* bd_lvm_get_global_config (GError **error __attribute__((unused))) {
|
||||
+gchar* bd_lvm_get_global_config (GError **error UNUSED) {
|
||||
gchar *ret = NULL;
|
||||
|
||||
g_mutex_lock (&global_config_lock);
|
||||
@@ -2660,7 +2660,7 @@ gchar* bd_lvm_get_global_config (GError **error __attribute__((unused))) {
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CACHE_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error __attribute__((unused))) {
|
||||
+guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error UNUSED) {
|
||||
return MAX ((guint64) cache_size / 1000, BD_LVM_MIN_CACHE_MD_SIZE);
|
||||
}
|
||||
|
||||
@@ -2670,7 +2670,7 @@ guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error __a
|
||||
*
|
||||
* Get LV type string from flags.
|
||||
*/
|
||||
-static const gchar* get_lv_type_from_flags (BDLVMCachePoolFlags flags, gboolean meta, GError **error __attribute__((unused))) {
|
||||
+static const gchar* get_lv_type_from_flags (BDLVMCachePoolFlags flags, gboolean meta, GError **error UNUSED) {
|
||||
if (!meta) {
|
||||
if (flags & BD_LVM_CACHE_POOL_STRIPED)
|
||||
return "striped";
|
||||
diff --git a/src/plugins/lvm.c b/src/plugins/lvm.c
|
||||
index 74493feb..2be1dbdb 100644
|
||||
--- a/src/plugins/lvm.c
|
||||
+++ b/src/plugins/lvm.c
|
||||
@@ -700,7 +700,7 @@ static BDLVMVDOPooldata* get_vdo_data_from_table (GHashTable *table, gboolean fr
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error __attribute__((unused))) {
|
||||
+gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error UNUSED) {
|
||||
return (((size % 2) == 0) && (size >= (BD_LVM_MIN_PE_SIZE)) && (size <= (BD_LVM_MAX_PE_SIZE)));
|
||||
}
|
||||
|
||||
@@ -712,7 +712,7 @@ gboolean bd_lvm_is_supported_pe_size (guint64 size, GError **error __attribute__
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 *bd_lvm_get_supported_pe_sizes (GError **error __attribute__((unused))) {
|
||||
+guint64 *bd_lvm_get_supported_pe_sizes (GError **error UNUSED) {
|
||||
guint8 i;
|
||||
guint64 val = BD_LVM_MIN_PE_SIZE;
|
||||
guint8 num_items = ((guint8) round (log2 ((double) BD_LVM_MAX_PE_SIZE))) - ((guint8) round (log2 ((double) BD_LVM_MIN_PE_SIZE))) + 2;
|
||||
@@ -734,7 +734,7 @@ guint64 *bd_lvm_get_supported_pe_sizes (GError **error __attribute__((unused)))
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 bd_lvm_get_max_lv_size (GError **error __attribute__((unused))) {
|
||||
+guint64 bd_lvm_get_max_lv_size (GError **error UNUSED) {
|
||||
return BD_LVM_MAX_LV_SIZE;
|
||||
}
|
||||
|
||||
@@ -754,7 +754,7 @@ guint64 bd_lvm_get_max_lv_size (GError **error __attribute__((unused))) {
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 bd_lvm_round_size_to_pe (guint64 size, guint64 pe_size, gboolean roundup, GError **error __attribute__((unused))) {
|
||||
+guint64 bd_lvm_round_size_to_pe (guint64 size, guint64 pe_size, gboolean roundup, GError **error UNUSED) {
|
||||
pe_size = RESOLVE_PE_SIZE(pe_size);
|
||||
guint64 delta = size % pe_size;
|
||||
if (delta == 0)
|
||||
@@ -848,7 +848,7 @@ guint64 bd_lvm_get_thpool_meta_size (guint64 size, guint64 chunk_size, guint64 n
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error __attribute__((unused))) {
|
||||
+gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error UNUSED) {
|
||||
return ((BD_LVM_MIN_THPOOL_MD_SIZE <= size) && (size <= BD_LVM_MAX_THPOOL_MD_SIZE));
|
||||
}
|
||||
|
||||
@@ -862,7 +862,7 @@ gboolean bd_lvm_is_valid_thpool_md_size (guint64 size, GError **error __attribut
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_THIN_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-gboolean bd_lvm_is_valid_thpool_chunk_size (guint64 size, gboolean discard, GError **error __attribute__((unused))) {
|
||||
+gboolean bd_lvm_is_valid_thpool_chunk_size (guint64 size, gboolean discard, GError **error UNUSED) {
|
||||
gdouble size_log2 = 0.0;
|
||||
|
||||
if ((size < BD_LVM_MIN_THPOOL_CHUNK_SIZE) || (size > BD_LVM_MAX_THPOOL_CHUNK_SIZE))
|
||||
@@ -1983,7 +1983,7 @@ gboolean bd_lvm_thsnapshotcreate (const gchar *vg_name, const gchar *origin_name
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_GLOB_CONF no mode (it is ignored)
|
||||
*/
|
||||
-gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error __attribute__((unused))) {
|
||||
+gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error UNUSED) {
|
||||
/* XXX: the error attribute will likely be used in the future when
|
||||
some validation comes into the game */
|
||||
|
||||
@@ -2008,7 +2008,7 @@ gboolean bd_lvm_set_global_config (const gchar *new_config, GError **error __att
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_GLOB_CONF no mode (it is ignored)
|
||||
*/
|
||||
-gchar* bd_lvm_get_global_config (GError **error __attribute__((unused))) {
|
||||
+gchar* bd_lvm_get_global_config (GError **error UNUSED) {
|
||||
gchar *ret = NULL;
|
||||
|
||||
g_mutex_lock (&global_config_lock);
|
||||
@@ -2027,7 +2027,7 @@ gchar* bd_lvm_get_global_config (GError **error __attribute__((unused))) {
|
||||
*
|
||||
* Tech category: %BD_LVM_TECH_CACHE_CALCS no mode (it is ignored)
|
||||
*/
|
||||
-guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error __attribute__((unused))) {
|
||||
+guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error UNUSED) {
|
||||
return MAX ((guint64) cache_size / 1000, BD_LVM_MIN_CACHE_MD_SIZE);
|
||||
}
|
||||
|
||||
@@ -2037,7 +2037,7 @@ guint64 bd_lvm_cache_get_default_md_size (guint64 cache_size, GError **error __a
|
||||
*
|
||||
* Get LV type string from flags.
|
||||
*/
|
||||
-static const gchar* get_lv_type_from_flags (BDLVMCachePoolFlags flags, gboolean meta, GError **error __attribute__((unused))) {
|
||||
+static const gchar* get_lv_type_from_flags (BDLVMCachePoolFlags flags, gboolean meta, GError **error UNUSED) {
|
||||
if (!meta) {
|
||||
if (flags & BD_LVM_CACHE_POOL_STRIPED)
|
||||
return "striped";
|
||||
|
||||
From f106e775d3c73e5f97512dd109627e00539b703a Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 15 Dec 2020 14:53:13 +0100
|
||||
Subject: [PATCH 5/5] Fix max size limit for LVM thinpool metadata
|
||||
|
||||
DM_THIN_MAX_METADATA_SIZE is in 512 sectors, not in KiB so the
|
||||
upper limit is 15.81 GiB not 31.62 GiB
|
||||
---
|
||||
src/lib/plugin_apis/lvm.api | 2 +-
|
||||
src/plugins/lvm.h | 10 ++++++----
|
||||
tests/lvm_dbus_tests.py | 3 ++-
|
||||
tests/lvm_test.py | 3 ++-
|
||||
4 files changed, 11 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/lvm.api b/src/lib/plugin_apis/lvm.api
|
||||
index 9f25c1ed..563c1041 100644
|
||||
--- a/src/lib/plugin_apis/lvm.api
|
||||
+++ b/src/lib/plugin_apis/lvm.api
|
||||
@@ -20,7 +20,7 @@
|
||||
#define BD_LVM_MIN_PE_SIZE G_GUINT64_CONSTANT (1024ULL) // 1 KiB
|
||||
#define BD_LVM_MAX_PE_SIZE G_GUINT64_CONSTANT (17179869184ULL) // 16 GiB
|
||||
#define BD_LVM_MIN_THPOOL_MD_SIZE G_GUINT64_CONSTANT (4194304ULL) // 4 MiB
|
||||
-#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (33957085184ULL) // 31.62 GiB
|
||||
+#define BD_LVM_MAX_THPOOL_MD_SIZE G_GUINT64_CONSTANT (16978542592ULL) // 15.81 GiB
|
||||
#define BD_LVM_MIN_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
|
||||
#define BD_LVM_MAX_THPOOL_CHUNK_SIZE G_GUINT64_CONSTANT (1073741824ULL) // 1 GiB
|
||||
#define BD_LVM_DEFAULT_CHUNK_SIZE G_GUINT64_CONSTANT (65536ULL) // 64 KiB
|
||||
diff --git a/src/plugins/lvm.h b/src/plugins/lvm.h
|
||||
index 01c06ca4..2162d769 100644
|
||||
--- a/src/plugins/lvm.h
|
||||
+++ b/src/plugins/lvm.h
|
||||
@@ -22,11 +22,13 @@
|
||||
#define USE_DEFAULT_PE_SIZE 0
|
||||
#define RESOLVE_PE_SIZE(size) ((size) == USE_DEFAULT_PE_SIZE ? BD_LVM_DEFAULT_PE_SIZE : (size))
|
||||
|
||||
-/* lvm constants for thin pool metadata size are actually half of these
|
||||
- but when they calculate the actual metadata size they double the limits
|
||||
- so lets just double the limits here too */
|
||||
+/* lvm constant for thin pool metadata size is actually half of this
|
||||
+ but when they calculate the actual metadata size they double the limit
|
||||
+ so lets just double the limit here too */
|
||||
#define BD_LVM_MIN_THPOOL_MD_SIZE (4 MiB)
|
||||
-#define BD_LVM_MAX_THPOOL_MD_SIZE (DM_THIN_MAX_METADATA_SIZE KiB)
|
||||
+
|
||||
+/* DM_THIN_MAX_METADATA_SIZE is in 512 sectors */
|
||||
+#define BD_LVM_MAX_THPOOL_MD_SIZE (DM_THIN_MAX_METADATA_SIZE * 512)
|
||||
|
||||
#define BD_LVM_MIN_THPOOL_CHUNK_SIZE (64 KiB)
|
||||
#define BD_LVM_MAX_THPOOL_CHUNK_SIZE (1 GiB)
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index c06a480c..8f2bb95d 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -160,10 +160,11 @@ def test_is_valid_thpool_md_size(self):
|
||||
|
||||
self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(4 * 1024**2))
|
||||
self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(5 * 1024**2))
|
||||
- self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
|
||||
+ self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(15 * 1024**3))
|
||||
|
||||
self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(1 * 1024**2))
|
||||
self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
|
||||
+ self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
|
||||
self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(32 * 1024**3))
|
||||
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index b84adece..6f80a3ba 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -150,10 +150,11 @@ def test_is_valid_thpool_md_size(self):
|
||||
|
||||
self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(4 * 1024**2))
|
||||
self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(5 * 1024**2))
|
||||
- self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
|
||||
+ self.assertTrue(BlockDev.lvm_is_valid_thpool_md_size(15 * 1024**3))
|
||||
|
||||
self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(1 * 1024**2))
|
||||
self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(3 * 1024**2))
|
||||
+ self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(16 * 1024**3))
|
||||
self.assertFalse(BlockDev.lvm_is_valid_thpool_md_size(32 * 1024**3))
|
||||
|
||||
@tag_test(TestTags.NOSTORAGE)
|
@ -1,178 +0,0 @@
|
||||
From 98cb3b9cf2046ba6e33db6ff400449c6a4827932 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 29 Apr 2021 12:38:49 +0200
|
||||
Subject: [PATCH 1/8] kbd: Fix memory leak
|
||||
|
||||
---
|
||||
src/plugins/kbd.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/plugins/kbd.c b/src/plugins/kbd.c
|
||||
index a2908ecb..d5ae0ed7 100644
|
||||
--- a/src/plugins/kbd.c
|
||||
+++ b/src/plugins/kbd.c
|
||||
@@ -1035,6 +1035,7 @@ gboolean bd_kbd_bcache_destroy (const gchar *bcache_device, GError **error) {
|
||||
|
||||
if (c_set_uuid) {
|
||||
path = g_strdup_printf ("/sys/fs/bcache/%s/stop", c_set_uuid);
|
||||
+ g_free (c_set_uuid);
|
||||
success = bd_utils_echo_str_to_file ("1", path, error);
|
||||
g_free (path);
|
||||
if (!success) {
|
||||
|
||||
From c6d226c70996f6006a3f6eff13f8264f03e95c4f Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:22:58 +0200
|
||||
Subject: [PATCH 2/8] crypto: Fix memory leak
|
||||
|
||||
---
|
||||
src/plugins/crypto.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c
|
||||
index 1e7043fa..4fad9a85 100644
|
||||
--- a/src/plugins/crypto.c
|
||||
+++ b/src/plugins/crypto.c
|
||||
@@ -1275,6 +1275,7 @@ gboolean bd_crypto_luks_add_key (const gchar *device, const gchar *pass, const g
|
||||
success = g_file_get_contents (nkey_file, &nkey_buf, &nbuf_len, error);
|
||||
if (!success) {
|
||||
g_prefix_error (error, "Failed to load key from file '%s': ", nkey_file);
|
||||
+ g_free (key_buf);
|
||||
return FALSE;
|
||||
}
|
||||
} else
|
||||
|
||||
From 41b460fb81cf066e7ddc0bdda7f34db5e90b9f79 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:23:24 +0200
|
||||
Subject: [PATCH 3/8] dm: Fix memory leak in the DM plugin and DM logging
|
||||
redirect function
|
||||
|
||||
---
|
||||
src/plugins/dm.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/plugins/dm.c b/src/plugins/dm.c
|
||||
index fb4e50b5..c9a735ed 100644
|
||||
--- a/src/plugins/dm.c
|
||||
+++ b/src/plugins/dm.c
|
||||
@@ -245,7 +245,8 @@ gchar* bd_dm_name_from_node (const gchar *dm_node, GError **error) {
|
||||
g_free (sys_path);
|
||||
|
||||
if (!success) {
|
||||
- /* errror is already populated */
|
||||
+ /* error is already populated */
|
||||
+ g_free (ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
From 8d085fbb15c18ca91a5eff89192391c5a0b3bb7a Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:24:14 +0200
|
||||
Subject: [PATCH 4/8] fs: Fix memory leak
|
||||
|
||||
---
|
||||
src/plugins/fs/mount.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/plugins/fs/mount.c b/src/plugins/fs/mount.c
|
||||
index 43d64e8c..46e03ca4 100644
|
||||
--- a/src/plugins/fs/mount.c
|
||||
+++ b/src/plugins/fs/mount.c
|
||||
@@ -541,6 +541,7 @@ static gboolean run_as_user (MountFunc func, MountArgs *args, uid_t run_as_uid,
|
||||
"Unknoen error while reading error.");
|
||||
g_io_channel_unref (channel);
|
||||
close (pipefd[0]);
|
||||
+ g_free (error_msg);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
From 6c45f4ef1fc898d71cc2f13670adb508a6037c66 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:26:24 +0200
|
||||
Subject: [PATCH 5/8] kbd: Fix memory leak
|
||||
|
||||
---
|
||||
src/plugins/kbd.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/plugins/kbd.c b/src/plugins/kbd.c
|
||||
index d5ae0ed7..ff8bde17 100644
|
||||
--- a/src/plugins/kbd.c
|
||||
+++ b/src/plugins/kbd.c
|
||||
@@ -1255,6 +1255,7 @@ static gboolean get_cache_size_used (const gchar *cache_dev_sys, guint64 *size,
|
||||
g_io_channel_unref (file);
|
||||
|
||||
if (!found) {
|
||||
+ g_free (line);
|
||||
g_set_error (error, BD_KBD_ERROR, BD_KBD_ERROR_BCACHE_INVAL,
|
||||
"Failed to get cache usage data");
|
||||
return FALSE;
|
||||
|
||||
From 4f4e93dfca36421eb0e0cb2dec5d48df5bc2f363 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:26:37 +0200
|
||||
Subject: [PATCH 6/8] lvm-dbus: Fix memory leak
|
||||
|
||||
---
|
||||
src/plugins/lvm-dbus.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/plugins/lvm-dbus.c b/src/plugins/lvm-dbus.c
|
||||
index b7b4480e..144551f5 100644
|
||||
--- a/src/plugins/lvm-dbus.c
|
||||
+++ b/src/plugins/lvm-dbus.c
|
||||
@@ -2927,6 +2927,7 @@ gboolean bd_lvm_cache_detach (const gchar *vg_name, const gchar *cached_lv, gboo
|
||||
lv_id = g_strdup_printf ("%s/%s", vg_name, cached_lv);
|
||||
call_lvm_obj_method_sync (lv_id, CACHED_LV_INTF, "DetachCachePool", params, NULL, extra, TRUE, error);
|
||||
g_free (lv_id);
|
||||
+ g_free (cache_pool_name);
|
||||
return ((*error) == NULL);
|
||||
}
|
||||
|
||||
|
||||
From 410a10bc2cfceeb550d72456573d4722b4207ddc Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:27:22 +0200
|
||||
Subject: [PATCH 7/8] mdraid: Fix memory leak
|
||||
|
||||
---
|
||||
src/plugins/mdraid.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/plugins/mdraid.c b/src/plugins/mdraid.c
|
||||
index 74af744c..b97bc641 100644
|
||||
--- a/src/plugins/mdraid.c
|
||||
+++ b/src/plugins/mdraid.c
|
||||
@@ -1332,6 +1332,7 @@ gchar* bd_md_name_from_node (const gchar *node, GError **error) {
|
||||
continue;
|
||||
}
|
||||
node_name = g_path_get_basename (dev_path);
|
||||
+ g_free (dev_path);
|
||||
if (g_strcmp0 (node_name, node) == 0) {
|
||||
found = TRUE;
|
||||
name = g_path_get_basename (*path_p);
|
||||
|
||||
From 0d49e5d190e24fa89ae2795714d0276f24285b19 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:27:54 +0200
|
||||
Subject: [PATCH 8/8] swap: Fix memory leak
|
||||
|
||||
---
|
||||
src/plugins/swap.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/plugins/swap.c b/src/plugins/swap.c
|
||||
index 102780a7..115f8fca 100644
|
||||
--- a/src/plugins/swap.c
|
||||
+++ b/src/plugins/swap.c
|
||||
@@ -417,6 +417,7 @@ gboolean bd_swap_swapstatus (const gchar *device, GError **error) {
|
||||
if (!real_device) {
|
||||
/* the device doesn't exist and thus is not an active swap */
|
||||
g_clear_error (error);
|
||||
+ g_free (file_content);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
@ -1,296 +0,0 @@
|
||||
From cc522ec3717d909370af6181c7859c62fa0167df Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Mon, 22 Feb 2021 15:40:56 +0100
|
||||
Subject: [PATCH 1/2] fs: Allow using empty label for vfat with newest
|
||||
dosfstools
|
||||
|
||||
---
|
||||
src/plugins/fs/vfat.c | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/src/plugins/fs/vfat.c b/src/plugins/fs/vfat.c
|
||||
index ff0c35a3..ce13f147 100644
|
||||
--- a/src/plugins/fs/vfat.c
|
||||
+++ b/src/plugins/fs/vfat.c
|
||||
@@ -232,10 +232,21 @@ gboolean bd_fs_vfat_repair (const gchar *device, const BDExtraArg **extra, GErro
|
||||
*/
|
||||
gboolean bd_fs_vfat_set_label (const gchar *device, const gchar *label, GError **error) {
|
||||
const gchar *args[4] = {"fatlabel", device, label, NULL};
|
||||
+ UtilDep dep = {"fatlabel", "4.2", "--version", "fatlabel\\s+([\\d\\.]+).+"};
|
||||
+ gboolean new_vfat = FALSE;
|
||||
|
||||
if (!check_deps (&avail_deps, DEPS_FATLABEL_MASK, deps, DEPS_LAST, &deps_check_lock, error))
|
||||
return FALSE;
|
||||
|
||||
+ if (!label || g_strcmp0 (label, "") == 0) {
|
||||
+ /* fatlabel >= 4.2 refuses to set empty label */
|
||||
+ new_vfat = bd_utils_check_util_version (dep.name, dep.version,
|
||||
+ dep.ver_arg, dep.ver_regexp,
|
||||
+ NULL);
|
||||
+ if (new_vfat)
|
||||
+ args[2] = "--reset";
|
||||
+ }
|
||||
+
|
||||
return bd_utils_exec_and_report_error (args, NULL, error);
|
||||
}
|
||||
|
||||
|
||||
From c3c3583409c8ed8f99a840e0c70cc92ca1dd3c93 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 27 Apr 2021 14:06:59 +0200
|
||||
Subject: [PATCH 2/2] tests: Call fs_vfat_mkfs with "--mbr=n" extra option in
|
||||
tests
|
||||
|
||||
Without the option the newest dosfstools 4.2 will create a valid
|
||||
MBR partition table with a simgle partition on the disk, see
|
||||
dosfstools/dosfstools#95 for details.
|
||||
---
|
||||
src/plugins/fs/vfat.c | 5 ++-
|
||||
tests/fs_test.py | 76 +++++++++++++++++++++++++++++++++----------
|
||||
2 files changed, 62 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/fs/vfat.c b/src/plugins/fs/vfat.c
|
||||
index ce13f147..6cb82537 100644
|
||||
--- a/src/plugins/fs/vfat.c
|
||||
+++ b/src/plugins/fs/vfat.c
|
||||
@@ -234,6 +234,7 @@ gboolean bd_fs_vfat_set_label (const gchar *device, const gchar *label, GError *
|
||||
const gchar *args[4] = {"fatlabel", device, label, NULL};
|
||||
UtilDep dep = {"fatlabel", "4.2", "--version", "fatlabel\\s+([\\d\\.]+).+"};
|
||||
gboolean new_vfat = FALSE;
|
||||
+ GError *loc_error = NULL;
|
||||
|
||||
if (!check_deps (&avail_deps, DEPS_FATLABEL_MASK, deps, DEPS_LAST, &deps_check_lock, error))
|
||||
return FALSE;
|
||||
@@ -242,9 +243,11 @@ gboolean bd_fs_vfat_set_label (const gchar *device, const gchar *label, GError *
|
||||
/* fatlabel >= 4.2 refuses to set empty label */
|
||||
new_vfat = bd_utils_check_util_version (dep.name, dep.version,
|
||||
dep.ver_arg, dep.ver_regexp,
|
||||
- NULL);
|
||||
+ &loc_error);
|
||||
if (new_vfat)
|
||||
args[2] = "--reset";
|
||||
+ else
|
||||
+ g_clear_error (&loc_error);
|
||||
}
|
||||
|
||||
return bd_utils_exec_and_report_error (args, NULL, error);
|
||||
diff --git a/tests/fs_test.py b/tests/fs_test.py
|
||||
index 239cb47c..2233db4f 100644
|
||||
--- a/tests/fs_test.py
|
||||
+++ b/tests/fs_test.py
|
||||
@@ -5,10 +5,13 @@
|
||||
import tempfile
|
||||
from contextlib import contextmanager
|
||||
import utils
|
||||
-from utils import run, create_sparse_tempfile, mount, umount, TestTags, tag_test
|
||||
+from utils import run, create_sparse_tempfile, mount, umount, TestTags, tag_test, run_command
|
||||
+import re
|
||||
import six
|
||||
import overrides_hack
|
||||
|
||||
+from distutils.version import LooseVersion
|
||||
+
|
||||
from gi.repository import BlockDev, GLib
|
||||
|
||||
|
||||
@@ -29,9 +32,20 @@ def mounted(device, where, ro=False):
|
||||
yield
|
||||
umount(where)
|
||||
|
||||
+
|
||||
+def _get_dosfstools_version():
|
||||
+ _ret, out, _err = run_command("mkfs.vfat --help")
|
||||
+ # mkfs.fat 4.1 (2017-01-24)
|
||||
+ m = re.search(r"mkfs\.fat ([\d\.]+)", out)
|
||||
+ if not m or len(m.groups()) != 1:
|
||||
+ raise RuntimeError("Failed to determine dosfstools version from: %s" % out)
|
||||
+ return LooseVersion(m.groups()[0])
|
||||
+
|
||||
+
|
||||
class FSTestCase(unittest.TestCase):
|
||||
|
||||
requested_plugins = BlockDev.plugin_specs_from_names(("fs", "loop"))
|
||||
+ _vfat_version = _get_dosfstools_version()
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
@@ -66,6 +80,11 @@ def setUp(self):
|
||||
|
||||
self.mount_dir = tempfile.mkdtemp(prefix="libblockdev.", suffix="ext4_test")
|
||||
|
||||
+ if self._vfat_version <= LooseVersion("4.1"):
|
||||
+ self._mkfs_options = None
|
||||
+ else:
|
||||
+ self._mkfs_options = [BlockDev.ExtraArg.new("--mbr=n", "")]
|
||||
+
|
||||
def _clean_up(self):
|
||||
try:
|
||||
utils.delete_lio_device(self.loop_dev)
|
||||
@@ -120,7 +139,10 @@ def test_generic_wipe(self):
|
||||
|
||||
# vfat has multiple signatures on the device so it allows us to test the
|
||||
# 'all' argument of fs_wipe()
|
||||
- ret = run("mkfs.vfat -I %s >/dev/null 2>&1" % self.loop_dev)
|
||||
+ if self._vfat_version >= LooseVersion("4.2"):
|
||||
+ ret = utils.run("mkfs.vfat -I %s >/dev/null 2>&1 --mbr=n" % self.loop_dev)
|
||||
+ else:
|
||||
+ ret = utils.run("mkfs.vfat -I %s >/dev/null 2>&1" % self.loop_dev)
|
||||
self.assertEqual(ret, 0)
|
||||
|
||||
time.sleep(0.5)
|
||||
@@ -142,7 +164,10 @@ def test_generic_wipe(self):
|
||||
self.assertEqual(fs_type, b"")
|
||||
|
||||
# now do the wipe all in a one step
|
||||
- ret = run("mkfs.vfat -I %s >/dev/null 2>&1" % self.loop_dev)
|
||||
+ if self._vfat_version >= LooseVersion("4.2"):
|
||||
+ ret = utils.run("mkfs.vfat -I %s >/dev/null 2>&1 --mbr=n" % self.loop_dev)
|
||||
+ else:
|
||||
+ ret = utils.run("mkfs.vfat -I %s >/dev/null 2>&1" % self.loop_dev)
|
||||
self.assertEqual(ret, 0)
|
||||
|
||||
succ = BlockDev.fs_wipe(self.loop_dev, True)
|
||||
@@ -197,7 +222,10 @@ def test_clean(self):
|
||||
|
||||
# vfat has multiple signatures on the device so it allows us to test
|
||||
# that clean removes all signatures
|
||||
- ret = run("mkfs.vfat -I %s >/dev/null 2>&1" % self.loop_dev)
|
||||
+ if self._vfat_version >= LooseVersion("4.2"):
|
||||
+ ret = utils.run("mkfs.vfat -I %s >/dev/null 2>&1 --mbr=n" % self.loop_dev)
|
||||
+ else:
|
||||
+ ret = utils.run("mkfs.vfat -I %s >/dev/null 2>&1" % self.loop_dev)
|
||||
self.assertEqual(ret, 0)
|
||||
|
||||
time.sleep(0.5)
|
||||
@@ -744,9 +772,9 @@ def test_vfat_mkfs(self):
|
||||
"""Verify that it is possible to create a new vfat file system"""
|
||||
|
||||
with self.assertRaises(GLib.GError):
|
||||
- BlockDev.fs_vfat_mkfs("/non/existing/device", None)
|
||||
+ BlockDev.fs_vfat_mkfs("/non/existing/device", self._mkfs_options)
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
# just try if we can mount the file system
|
||||
@@ -764,7 +792,10 @@ def test_vfat_mkfs_with_label(self):
|
||||
"""Verify that it is possible to create an vfat file system with label"""
|
||||
|
||||
ea = BlockDev.ExtraArg.new("-n", "TEST_LABEL")
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, [ea])
|
||||
+ if self._mkfs_options:
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, [ea] + self._mkfs_options)
|
||||
+ else:
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, [ea])
|
||||
self.assertTrue(succ)
|
||||
|
||||
fi = BlockDev.fs_vfat_get_info(self.loop_dev)
|
||||
@@ -775,7 +806,7 @@ class VfatTestWipe(FSTestCase):
|
||||
def test_vfat_wipe(self):
|
||||
"""Verify that it is possible to wipe an vfat file system"""
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
succ = BlockDev.fs_vfat_wipe(self.loop_dev)
|
||||
@@ -805,7 +836,7 @@ class VfatTestCheck(FSTestCase):
|
||||
def test_vfat_check(self):
|
||||
"""Verify that it is possible to check an vfat file system"""
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
succ = BlockDev.fs_vfat_check(self.loop_dev, None)
|
||||
@@ -818,7 +849,7 @@ class VfatTestRepair(FSTestCase):
|
||||
def test_vfat_repair(self):
|
||||
"""Verify that it is possible to repair an vfat file system"""
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
succ = BlockDev.fs_vfat_repair(self.loop_dev, None)
|
||||
@@ -828,7 +859,7 @@ class VfatGetInfo(FSTestCase):
|
||||
def test_vfat_get_info(self):
|
||||
"""Verify that it is possible to get info about an vfat file system"""
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
fi = BlockDev.fs_vfat_get_info(self.loop_dev)
|
||||
@@ -841,7 +872,7 @@ class VfatSetLabel(FSTestCase):
|
||||
def test_vfat_set_label(self):
|
||||
"""Verify that it is possible to set label of an vfat file system"""
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
fi = BlockDev.fs_vfat_get_info(self.loop_dev)
|
||||
@@ -870,7 +901,7 @@ class VfatResize(FSTestCase):
|
||||
def test_vfat_resize(self):
|
||||
"""Verify that it is possible to resize an vfat file system"""
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
# shrink
|
||||
@@ -999,7 +1030,7 @@ def _remove_user(self):
|
||||
def test_mount(self):
|
||||
""" Test basic mounting and unmounting """
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
tmp = tempfile.mkdtemp(prefix="libblockdev.", suffix="mount_test")
|
||||
@@ -1104,7 +1135,7 @@ def test_mount_fstab(self):
|
||||
fstab = utils.read_file("/etc/fstab")
|
||||
self.addCleanup(utils.write_file, "/etc/fstab", fstab)
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
tmp = tempfile.mkdtemp(prefix="libblockdev.", suffix="mount_fstab_test")
|
||||
@@ -1139,7 +1170,7 @@ def test_mount_fstab_user(self):
|
||||
fstab = utils.read_file("/etc/fstab")
|
||||
self.addCleanup(utils.write_file, "/etc/fstab", fstab)
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
tmp = tempfile.mkdtemp(prefix="libblockdev.", suffix="mount_fstab_user_test")
|
||||
@@ -1423,7 +1454,16 @@ def expected_size(fi):
|
||||
@tag_test(TestTags.UNSTABLE)
|
||||
def test_vfat_generic_resize(self):
|
||||
"""Test generic resize function with a vfat file system"""
|
||||
- self._test_generic_resize(mkfs_function=BlockDev.fs_vfat_mkfs)
|
||||
+ def mkfs_vfat(device, options=None):
|
||||
+ if self._vfat_version >= LooseVersion("4.2"):
|
||||
+ if options:
|
||||
+ return BlockDev.fs_vfat_mkfs(device, options + [BlockDev.ExtraArg.new("--mbr=n", "")])
|
||||
+ else:
|
||||
+ return BlockDev.fs_vfat_mkfs(device, [BlockDev.ExtraArg.new("--mbr=n", "")])
|
||||
+ else:
|
||||
+ return BlockDev.fs_vfat_mkfs(device, options)
|
||||
+
|
||||
+ self._test_generic_resize(mkfs_function=mkfs_vfat)
|
||||
|
||||
def _destroy_lvm(self):
|
||||
run("vgremove --yes libbd_fs_tests >/dev/null 2>&1")
|
||||
@@ -1539,7 +1579,7 @@ def test_freeze_xfs(self):
|
||||
def test_freeze_vfat(self):
|
||||
""" Test basic freezing and un-freezing with FAT """
|
||||
|
||||
- succ = BlockDev.fs_vfat_mkfs(self.loop_dev, None)
|
||||
+ succ = BlockDev.fs_vfat_mkfs(self.loop_dev, self._mkfs_options)
|
||||
self.assertTrue(succ)
|
||||
|
||||
tmp = tempfile.mkdtemp(prefix="libblockdev.", suffix="freeze_test")
|
@ -1,157 +0,0 @@
|
||||
From 7c31cc534f96766dd2e3427b09d0affca66b0745 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 23 Mar 2021 13:54:02 +0100
|
||||
Subject: [PATCH 1/3] tests: Do not try to remove VG before removing the VDO
|
||||
pool
|
||||
|
||||
---
|
||||
tests/lvm_dbus_tests.py | 6 +++---
|
||||
tests/lvm_test.py | 6 +++---
|
||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index 8f2bb95d..b599fdd0 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -1517,14 +1517,14 @@ def setUp(self):
|
||||
self.assertTrue(succ)
|
||||
|
||||
def _clean_up(self):
|
||||
- BlockDev.lvm_vgremove("testVDOVG")
|
||||
- BlockDev.lvm_pvremove(self.loop_dev)
|
||||
-
|
||||
try:
|
||||
BlockDev.lvm_lvremove("testVDOVG", "vdoPool", True, None)
|
||||
except:
|
||||
pass
|
||||
|
||||
+ BlockDev.lvm_vgremove("testVDOVG")
|
||||
+ BlockDev.lvm_pvremove(self.loop_dev)
|
||||
+
|
||||
try:
|
||||
delete_lio_device(self.loop_dev)
|
||||
except RuntimeError:
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index 6f80a3ba..6c04faf9 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -1437,14 +1437,14 @@ def setUp(self):
|
||||
self.assertTrue(succ)
|
||||
|
||||
def _clean_up(self):
|
||||
- BlockDev.lvm_vgremove("testVDOVG")
|
||||
- BlockDev.lvm_pvremove(self.loop_dev)
|
||||
-
|
||||
try:
|
||||
BlockDev.lvm_lvremove("testVDOVG", "vdoPool", True, None)
|
||||
except:
|
||||
pass
|
||||
|
||||
+ BlockDev.lvm_vgremove("testVDOVG")
|
||||
+ BlockDev.lvm_pvremove(self.loop_dev)
|
||||
+
|
||||
try:
|
||||
delete_lio_device(self.loop_dev)
|
||||
except RuntimeError:
|
||||
|
||||
From 41b9d745b8c1a33221e15683f390bae180d1e960 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 23 Mar 2021 13:59:24 +0100
|
||||
Subject: [PATCH 2/3] tests: Force remove LVM VG /dev/ entry not removed by
|
||||
vgremove
|
||||
|
||||
The directory is sometimes not removed. This is a known bug that
|
||||
causes subsequent test cases to fail.
|
||||
---
|
||||
tests/lvm_dbus_tests.py | 6 ++++++
|
||||
tests/lvm_test.py | 6 ++++++
|
||||
2 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index b599fdd0..3278716e 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -399,6 +399,9 @@ def _clean_up(self):
|
||||
except:
|
||||
pass
|
||||
|
||||
+ # XXX remove lingering /dev entries
|
||||
+ shutil.rmtree("/dev/testVG", ignore_errors=True)
|
||||
+
|
||||
LvmPVonlyTestCase._clean_up(self)
|
||||
|
||||
@unittest.skipUnless(lvm_dbus_running, "LVM DBus not running")
|
||||
@@ -1525,6 +1528,9 @@ def _clean_up(self):
|
||||
BlockDev.lvm_vgremove("testVDOVG")
|
||||
BlockDev.lvm_pvremove(self.loop_dev)
|
||||
|
||||
+ # XXX remove lingering /dev entries
|
||||
+ shutil.rmtree("/dev/testVDOVG", ignore_errors=True)
|
||||
+
|
||||
try:
|
||||
delete_lio_device(self.loop_dev)
|
||||
except RuntimeError:
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index 6c04faf9..d7e1f84c 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -378,6 +378,9 @@ def _clean_up(self):
|
||||
except:
|
||||
pass
|
||||
|
||||
+ # XXX remove lingering /dev entries
|
||||
+ shutil.rmtree("/dev/testVG", ignore_errors=True)
|
||||
+
|
||||
LvmPVonlyTestCase._clean_up(self)
|
||||
|
||||
class LvmTestVGcreateRemove(LvmPVVGTestCase):
|
||||
@@ -1445,6 +1448,9 @@ def _clean_up(self):
|
||||
BlockDev.lvm_vgremove("testVDOVG")
|
||||
BlockDev.lvm_pvremove(self.loop_dev)
|
||||
|
||||
+ # XXX remove lingering /dev entries
|
||||
+ shutil.rmtree("/dev/testVDOVG", ignore_errors=True)
|
||||
+
|
||||
try:
|
||||
delete_lio_device(self.loop_dev)
|
||||
except RuntimeError:
|
||||
|
||||
From 4ecf0075cedf3a1d275d34b94ce5bb512c4e970e Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 23 Mar 2021 14:03:44 +0100
|
||||
Subject: [PATCH 3/3] tests: Tag LvmPVVGLVcachePoolCreateRemoveTestCase as
|
||||
unstable
|
||||
|
||||
LVM randomly fails to activate the newly created metadata LV.
|
||||
Issue is reported to LVM and not yet fixed.
|
||||
---
|
||||
tests/lvm_dbus_tests.py | 2 +-
|
||||
tests/lvm_test.py | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index 3278716e..4882da88 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -1213,7 +1213,7 @@ def _clean_up(self):
|
||||
|
||||
@unittest.skipUnless(lvm_dbus_running, "LVM DBus not running")
|
||||
class LvmPVVGLVcachePoolCreateRemoveTestCase(LvmPVVGLVcachePoolTestCase):
|
||||
- @tag_test(TestTags.SLOW)
|
||||
+ @tag_test(TestTags.SLOW, TestTags.UNSTABLE)
|
||||
def test_cache_pool_create_remove(self):
|
||||
"""Verify that is it possible to create and remove a cache pool"""
|
||||
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index d7e1f84c..eb94c917 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -1129,7 +1129,7 @@ def _clean_up(self):
|
||||
LvmPVVGLVTestCase._clean_up(self)
|
||||
|
||||
class LvmPVVGLVcachePoolCreateRemoveTestCase(LvmPVVGLVcachePoolTestCase):
|
||||
- @tag_test(TestTags.SLOW)
|
||||
+ @tag_test(TestTags.SLOW, TestTags.UNSTABLE)
|
||||
def test_cache_pool_create_remove(self):
|
||||
"""Verify that is it possible to create and remove a cache pool"""
|
||||
|
@ -1,144 +0,0 @@
|
||||
From 77b8d17b0baf96a7a552fb8963afdbe8c3b18da7 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 2 Jun 2021 12:53:24 +0200
|
||||
Subject: [PATCH 1/4] tests: Make sure the test temp mount is always unmounted
|
||||
|
||||
With try-finally the unmount function will always run even if the
|
||||
test case fails.
|
||||
---
|
||||
tests/fs_test.py | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tests/fs_test.py b/tests/fs_test.py
|
||||
index 2233db4f..de685b5f 100644
|
||||
--- a/tests/fs_test.py
|
||||
+++ b/tests/fs_test.py
|
||||
@@ -29,8 +29,10 @@ def check_output(args, ignore_retcode=True):
|
||||
@contextmanager
|
||||
def mounted(device, where, ro=False):
|
||||
mount(device, where, ro)
|
||||
- yield
|
||||
- umount(where)
|
||||
+ try:
|
||||
+ yield
|
||||
+ finally:
|
||||
+ utils.umount(where)
|
||||
|
||||
|
||||
def _get_dosfstools_version():
|
||||
|
||||
From aa802b6a2c9038069cfea7f821333367840a43ca Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 2 Jun 2021 13:05:17 +0200
|
||||
Subject: [PATCH 2/4] tests: Do not check that XFS shrink fails with xfsprogs
|
||||
>= 5.12
|
||||
|
||||
xfsprogs 5.12 now has experimental support for shrinking, we need
|
||||
more changes to support it properly so just skip this check for
|
||||
now.
|
||||
---
|
||||
tests/fs_test.py | 24 ++++++++++++++++++------
|
||||
1 file changed, 18 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/tests/fs_test.py b/tests/fs_test.py
|
||||
index de685b5f..551b6a7b 100644
|
||||
--- a/tests/fs_test.py
|
||||
+++ b/tests/fs_test.py
|
||||
@@ -44,6 +44,14 @@ def _get_dosfstools_version():
|
||||
return LooseVersion(m.groups()[0])
|
||||
|
||||
|
||||
+def _get_xfs_version():
|
||||
+ _ret, out, _err = utils.run_command("mkfs.xfs -V")
|
||||
+ m = re.search(r"mkfs\.xfs version ([\d\.]+)", out)
|
||||
+ if not m or len(m.groups()) != 1:
|
||||
+ raise RuntimeError("Failed to determine xfsprogs version from: %s" % out)
|
||||
+ return LooseVersion(m.groups()[0])
|
||||
+
|
||||
+
|
||||
class FSTestCase(unittest.TestCase):
|
||||
|
||||
requested_plugins = BlockDev.plugin_specs_from_names(("fs", "loop"))
|
||||
@@ -736,9 +744,11 @@ def test_xfs_resize(self):
|
||||
self.assertEqual(fi.block_size * fi.block_count, 50 * 1024**2)
|
||||
|
||||
# (still) impossible to shrink an XFS file system
|
||||
- with mounted(lv, self.mount_dir):
|
||||
- with self.assertRaises(GLib.GError):
|
||||
- succ = BlockDev.fs_xfs_resize(self.mount_dir, 40 * 1024**2 / fi.block_size, None)
|
||||
+ xfs_version = _get_xfs_version()
|
||||
+ if xfs_version < LooseVersion("5.1.12"):
|
||||
+ with mounted(lv, self.mount_dir):
|
||||
+ with self.assertRaises(GLib.GError):
|
||||
+ succ = BlockDev.fs_resize(lv, 40 * 1024**2)
|
||||
|
||||
run("lvresize -L70M libbd_fs_tests/xfs_test >/dev/null 2>&1")
|
||||
# should grow
|
||||
@@ -1503,9 +1513,11 @@ def test_xfs_generic_resize(self):
|
||||
self.assertEqual(fi.block_size * fi.block_count, 50 * 1024**2)
|
||||
|
||||
# (still) impossible to shrink an XFS file system
|
||||
- with mounted(lv, self.mount_dir):
|
||||
- with self.assertRaises(GLib.GError):
|
||||
- succ = BlockDev.fs_resize(lv, 40 * 1024**2)
|
||||
+ xfs_version = _get_xfs_version()
|
||||
+ if xfs_version < LooseVersion("5.1.12"):
|
||||
+ with mounted(lv, self.mount_dir):
|
||||
+ with self.assertRaises(GLib.GError):
|
||||
+ succ = BlockDev.fs_resize(lv, 40 * 1024**2)
|
||||
|
||||
run("lvresize -L70M libbd_fs_tests/xfs_test >/dev/null 2>&1")
|
||||
# should grow
|
||||
|
||||
From ca01b6021cce3ea6a2318e74de408757f933d947 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 2 Jun 2021 13:06:41 +0200
|
||||
Subject: [PATCH 3/4] tests: Temporarily skip
|
||||
test_snapshotcreate_lvorigin_snapshotmerge
|
||||
|
||||
With LVM DBus API the lvconvert job is never finished which means
|
||||
the test run never finishes in our CI.
|
||||
---
|
||||
tests/skip.yml | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/tests/skip.yml b/tests/skip.yml
|
||||
index 145d321d..e22e712d 100644
|
||||
--- a/tests/skip.yml
|
||||
+++ b/tests/skip.yml
|
||||
@@ -137,3 +137,9 @@
|
||||
- distro: "fedora"
|
||||
version: ["31", "32"]
|
||||
reason: "working with old-style LVM snapshots leads to deadlock in LVM tools"
|
||||
+
|
||||
+- test: lvm_dbus_tests.LvmTestLVsnapshots.test_snapshotcreate_lvorigin_snapshotmerge
|
||||
+ skip_on:
|
||||
+ - distro: "centos"
|
||||
+ version: "9"
|
||||
+ reason: "snapshot merge doesn't work on CentOS 9 Stream with LVM DBus API"
|
||||
|
||||
From d0c44cd3d182599433f352901796af7c403239eb Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 2 Jun 2021 13:08:09 +0200
|
||||
Subject: [PATCH 4/4] Fix skipping tests on Debian testing
|
||||
|
||||
Testing now identifies itself as "Debian GNU/Linux 11 (bullseye)"
|
||||
so the tests that should be skipped on testing needs to be skipped
|
||||
on "11" too.
|
||||
---
|
||||
tests/skip.yml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/skip.yml b/tests/skip.yml
|
||||
index e22e712d..4134ee87 100644
|
||||
--- a/tests/skip.yml
|
||||
+++ b/tests/skip.yml
|
||||
@@ -37,7 +37,7 @@
|
||||
- test: fs_test.MountTest.test_mount_ntfs_ro
|
||||
skip_on:
|
||||
- distro: "debian"
|
||||
- version: ["9", "10", "testing"]
|
||||
+ version: ["9", "10", "11", "testing"]
|
||||
reason: "NTFS mounting of read-only devices doesn't work as expected on Debian"
|
||||
|
||||
- test: kbd_test.KbdZRAM*
|
@ -1,80 +0,0 @@
|
||||
From e0fcbae856454dba9df3f8df800d74fde66731e5 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 31 Aug 2021 14:07:23 +0200
|
||||
Subject: [PATCH] lvm: Fix reading statistics for VDO pools with VDO 8
|
||||
|
||||
The statistics are no longer available in /sys/kvdo, in the latest
|
||||
version of kvdo we need to use /sys/block/<pool>/vdo/statistics.
|
||||
|
||||
Resolves: rhbz#1994220
|
||||
---
|
||||
src/plugins/vdo_stats.c | 42 +++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 38 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/vdo_stats.c b/src/plugins/vdo_stats.c
|
||||
index ed04b51..2e244aa 100644
|
||||
--- a/src/plugins/vdo_stats.c
|
||||
+++ b/src/plugins/vdo_stats.c
|
||||
@@ -133,6 +133,23 @@ static void add_computed_stats (GHashTable *stats) {
|
||||
add_journal_stats (stats);
|
||||
}
|
||||
|
||||
+static gchar* _dm_node_from_name (const gchar *map_name, GError **error) {
|
||||
+ gchar *dev_path = NULL;
|
||||
+ gchar *ret = NULL;
|
||||
+ gchar *dev_mapper_path = g_strdup_printf ("/dev/mapper/%s", map_name);
|
||||
+
|
||||
+ dev_path = bd_utils_resolve_device (dev_mapper_path, error);
|
||||
+ g_free (dev_mapper_path);
|
||||
+ if (!dev_path)
|
||||
+ /* error is already populated */
|
||||
+ return NULL;
|
||||
+
|
||||
+ ret = g_path_get_basename (dev_path);
|
||||
+ g_free (dev_path);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
GHashTable __attribute__ ((visibility ("hidden")))
|
||||
*vdo_get_stats_full (const gchar *name, GError **error) {
|
||||
GHashTable *stats;
|
||||
@@ -141,14 +158,31 @@ GHashTable __attribute__ ((visibility ("hidden")))
|
||||
const gchar *direntry;
|
||||
gchar *s;
|
||||
gchar *val = NULL;
|
||||
+ g_autofree gchar *dm_node = NULL;
|
||||
|
||||
- /* TODO: does the `name` need to be escaped? */
|
||||
- stats_dir = g_build_path (G_DIR_SEPARATOR_S, VDO_SYS_PATH, name, "statistics", NULL);
|
||||
+ /* try "new" (kvdo >= 8) path first -- /sys/block/dm-X/vdo/statistics */
|
||||
+ dm_node = _dm_node_from_name (name, error);
|
||||
+ if (dm_node == NULL) {
|
||||
+ g_prefix_error (error, "Failed to get DM node for %s: ", name);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ stats_dir = g_build_path (G_DIR_SEPARATOR_S, "/sys/block", dm_node, "vdo/statistics", NULL);
|
||||
dir = g_dir_open (stats_dir, 0, error);
|
||||
if (dir == NULL) {
|
||||
- g_prefix_error (error, "Error reading statistics from %s: ", stats_dir);
|
||||
+ g_debug ("Failed to read VDO stats using the new API, falling back to %s: %s",
|
||||
+ VDO_SYS_PATH, (*error)->message);
|
||||
g_free (stats_dir);
|
||||
- return NULL;
|
||||
+ g_clear_error (error);
|
||||
+
|
||||
+ /* lets try /sys/kvdo */
|
||||
+ stats_dir = g_build_path (G_DIR_SEPARATOR_S, VDO_SYS_PATH, name, "statistics", NULL);
|
||||
+ dir = g_dir_open (stats_dir, 0, error);
|
||||
+ if (dir == NULL) {
|
||||
+ g_prefix_error (error, "Error reading statistics from %s: ", stats_dir);
|
||||
+ g_free (stats_dir);
|
||||
+ return NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
stats = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 940346f14ee5644f2593817b4196c18de8a713f0 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Mon, 22 Nov 2021 14:16:02 +0100
|
||||
Subject: [PATCH] vdo_stats: Default to 100 % savings for invalid savings
|
||||
values
|
||||
|
||||
We are currently using "-1" when VDO logical_blocks_used is 0
|
||||
which doesn't match the LVM logic which returns 100 so to make
|
||||
both values in vdo_info and vdo_stats equal we should return 100
|
||||
in this case too.
|
||||
---
|
||||
src/plugins/vdo_stats.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/plugins/vdo_stats.c b/src/plugins/vdo_stats.c
|
||||
index 3ec2d60..f3f0390 100644
|
||||
--- a/src/plugins/vdo_stats.c
|
||||
+++ b/src/plugins/vdo_stats.c
|
||||
@@ -96,7 +96,7 @@ static void add_block_stats (GHashTable *stats) {
|
||||
g_hash_table_replace (stats, g_strdup ("oneKBlocksUsed"), g_strdup_printf ("%"G_GINT64_FORMAT, (data_blocks_used + overhead_blocks_used) * block_size / 1024));
|
||||
g_hash_table_replace (stats, g_strdup ("oneKBlocksAvailable"), g_strdup_printf ("%"G_GINT64_FORMAT, (physical_blocks - data_blocks_used - overhead_blocks_used) * block_size / 1024));
|
||||
g_hash_table_replace (stats, g_strdup ("usedPercent"), g_strdup_printf ("%.0f", 100.0 * (gfloat) (data_blocks_used + overhead_blocks_used) / (gfloat) physical_blocks + 0.5));
|
||||
- savings = (logical_blocks_used > 0) ? (gint64) (100.0 * (gfloat) (logical_blocks_used - data_blocks_used) / (gfloat) logical_blocks_used) : -1;
|
||||
+ savings = (logical_blocks_used > 0) ? (gint64) (100.0 * (gfloat) (logical_blocks_used - data_blocks_used) / (gfloat) logical_blocks_used) : 100;
|
||||
g_hash_table_replace (stats, g_strdup ("savings"), g_strdup_printf ("%"G_GINT64_FORMAT, savings));
|
||||
if (savings >= 0)
|
||||
g_hash_table_replace (stats, g_strdup ("savingPercent"), g_strdup_printf ("%"G_GINT64_FORMAT, savings));
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,278 +0,0 @@
|
||||
From d0ba031e679d480855bea61060acea597d5ffbbd Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 15 Dec 2021 14:14:19 +0100
|
||||
Subject: [PATCH 1/2] tests: Wait for raid and mirrored LVs to be synced before
|
||||
removing
|
||||
|
||||
Resolves: rhbz#2030647
|
||||
---
|
||||
tests/lvm_dbus_tests.py | 31 +++++++++++++++++++++++++------
|
||||
tests/lvm_test.py | 31 +++++++++++++++++++++++++------
|
||||
2 files changed, 50 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index 5516afe..5ce653e 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -7,6 +7,8 @@ import six
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
+import time
|
||||
+from contextlib import contextmanager
|
||||
from distutils.version import LooseVersion
|
||||
from itertools import chain
|
||||
|
||||
@@ -18,6 +20,21 @@ sb = dbus.SystemBus()
|
||||
lvm_dbus_running = any("lvmdbus" in name for name in chain(sb.list_names(), sb.list_activatable_names()))
|
||||
|
||||
|
||||
+@contextmanager
|
||||
+def wait_for_sync(vg_name, lv_name):
|
||||
+ try:
|
||||
+ yield
|
||||
+ finally:
|
||||
+ time.sleep(2)
|
||||
+ while True:
|
||||
+ ret, out, _err = run_command("LC_ALL=C lvs -o copy_percent --noheadings %s/%s" % (vg_name, lv_name))
|
||||
+ if ret != 0:
|
||||
+ break
|
||||
+ if int(float(out)) == 100:
|
||||
+ break
|
||||
+ time.sleep(1)
|
||||
+
|
||||
+
|
||||
class LVMTestCase(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
@@ -801,9 +818,10 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
succ = BlockDev.lvm_lvremove("testVG", "testLV", True, None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
- # try to create a mirrored LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "mirror", [self.loop_dev, self.loop_dev2], None)
|
||||
- self.assertTrue(succ)
|
||||
+ with wait_for_sync("testVG", "testLV"):
|
||||
+ # try to create a mirrored LV
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "mirror", [self.loop_dev, self.loop_dev2], None)
|
||||
+ self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
info = BlockDev.lvm_lvinfo("testVG", "testLV")
|
||||
@@ -812,9 +830,10 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
succ = BlockDev.lvm_lvremove("testVG", "testLV", True, None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
- # try to create a raid1 LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "raid1", [self.loop_dev, self.loop_dev2], None)
|
||||
- self.assertTrue(succ)
|
||||
+ with wait_for_sync("testVG", "testLV"):
|
||||
+ # try to create a raid1 LV
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "raid1", [self.loop_dev, self.loop_dev2], None)
|
||||
+ self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
info = BlockDev.lvm_lvinfo("testVG", "testLV")
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index e349817..12b78ca 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -7,12 +7,29 @@ import six
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
+import time
|
||||
+from contextlib import contextmanager
|
||||
from distutils.version import LooseVersion
|
||||
|
||||
from utils import create_sparse_tempfile, create_lio_device, delete_lio_device, fake_utils, fake_path, TestTags, tag_test, run_command, read_file
|
||||
from gi.repository import BlockDev, GLib
|
||||
|
||||
|
||||
+@contextmanager
|
||||
+def wait_for_sync(vg_name, lv_name):
|
||||
+ try:
|
||||
+ yield
|
||||
+ finally:
|
||||
+ time.sleep(2)
|
||||
+ while True:
|
||||
+ info = BlockDev.lvm_lvinfo(vg_name, lv_name)
|
||||
+ if not info:
|
||||
+ break
|
||||
+ if info.copy_percent == 100:
|
||||
+ break
|
||||
+ time.sleep(1)
|
||||
+
|
||||
+
|
||||
class LVMTestCase(unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
@@ -737,9 +754,10 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
succ = BlockDev.lvm_lvremove("testVG", "testLV", True, None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
- # try to create a mirrored LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "mirror", [self.loop_dev, self.loop_dev2], None)
|
||||
- self.assertTrue(succ)
|
||||
+ with wait_for_sync("testVG", "testLV"):
|
||||
+ # try to create a mirrored LV
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "mirror", [self.loop_dev, self.loop_dev2], None)
|
||||
+ self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
info = BlockDev.lvm_lvinfo("testVG", "testLV")
|
||||
@@ -748,9 +766,10 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
succ = BlockDev.lvm_lvremove("testVG", "testLV", True, None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
- # try to create a raid1 LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "raid1", [self.loop_dev, self.loop_dev2], None)
|
||||
- self.assertTrue(succ)
|
||||
+ with wait_for_sync("testVG", "testLV"):
|
||||
+ # try to create a raid1 LV
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "raid1", [self.loop_dev, self.loop_dev2], None)
|
||||
+ self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
info = BlockDev.lvm_lvinfo("testVG", "testLV")
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
||||
From 36dbac970bc4a052dbd97f51eb47379036d15b6e Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 16 Dec 2021 12:27:33 +0100
|
||||
Subject: [PATCH 2/2] tests: Make smaller images for test_lvcreate_type
|
||||
|
||||
We are now waiting for the initial resync for the RAID/mirror LVs
|
||||
which means we are trying to overwrite the entire 1 GB image which
|
||||
doesn't fit in /tmp on our CI machines.
|
||||
---
|
||||
tests/lvm_dbus_tests.py | 16 +++++++++++-----
|
||||
tests/lvm_test.py | 15 ++++++++++-----
|
||||
2 files changed, 21 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/tests/lvm_dbus_tests.py b/tests/lvm_dbus_tests.py
|
||||
index 5ce653e..723aabb 100644
|
||||
--- a/tests/lvm_dbus_tests.py
|
||||
+++ b/tests/lvm_dbus_tests.py
|
||||
@@ -313,14 +313,17 @@ class LvmNoDevTestCase(LVMTestCase):
|
||||
|
||||
@unittest.skipUnless(lvm_dbus_running, "LVM DBus not running")
|
||||
class LvmPVonlyTestCase(LVMTestCase):
|
||||
+
|
||||
+ _sparse_size = 1024**3
|
||||
+
|
||||
# :TODO:
|
||||
# * test pvmove (must create two PVs, a VG, a VG and some data in it
|
||||
# first)
|
||||
# * some complex test for pvs, vgs, lvs, pvinfo, vginfo and lvinfo
|
||||
def setUp(self):
|
||||
self.addCleanup(self._clean_up)
|
||||
- self.dev_file = create_sparse_tempfile("lvm_test", 1024**3)
|
||||
- self.dev_file2 = create_sparse_tempfile("lvm_test", 1024**3)
|
||||
+ self.dev_file = create_sparse_tempfile("lvm_test", self._sparse_size)
|
||||
+ self.dev_file2 = create_sparse_tempfile("lvm_test", self._sparse_size)
|
||||
try:
|
||||
self.loop_dev = create_lio_device(self.dev_file)
|
||||
except RuntimeError as e:
|
||||
@@ -795,6 +798,9 @@ class LvmTestLVcreateWithExtra(LvmPVVGLVTestCase):
|
||||
|
||||
@unittest.skipUnless(lvm_dbus_running, "LVM DBus not running")
|
||||
class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
+
|
||||
+ _sparse_size = 200 * 1024**2
|
||||
+
|
||||
def test_lvcreate_type(self):
|
||||
"""Verify it's possible to create LVs with various types"""
|
||||
|
||||
@@ -808,7 +814,7 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
self.assertTrue(succ)
|
||||
|
||||
# try to create a striped LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "striped", [self.loop_dev, self.loop_dev2], None)
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 100 * 1024**2, "striped", [self.loop_dev, self.loop_dev2], None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
@@ -820,7 +826,7 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
|
||||
with wait_for_sync("testVG", "testLV"):
|
||||
# try to create a mirrored LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "mirror", [self.loop_dev, self.loop_dev2], None)
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 100 * 1024**2, "mirror", [self.loop_dev, self.loop_dev2], None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
@@ -832,7 +838,7 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
|
||||
with wait_for_sync("testVG", "testLV"):
|
||||
# try to create a raid1 LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "raid1", [self.loop_dev, self.loop_dev2], None)
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 100 * 1024**2, "raid1", [self.loop_dev, self.loop_dev2], None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
diff --git a/tests/lvm_test.py b/tests/lvm_test.py
|
||||
index 12b78ca..97f6c69 100644
|
||||
--- a/tests/lvm_test.py
|
||||
+++ b/tests/lvm_test.py
|
||||
@@ -302,14 +302,17 @@ class LvmNoDevTestCase(LVMTestCase):
|
||||
BlockDev.lvm_cache_get_mode_from_str("bla")
|
||||
|
||||
class LvmPVonlyTestCase(LVMTestCase):
|
||||
+
|
||||
+ _sparse_size = 1024**3
|
||||
+
|
||||
# :TODO:
|
||||
# * test pvmove (must create two PVs, a VG, a VG and some data in it
|
||||
# first)
|
||||
# * some complex test for pvs, vgs, lvs, pvinfo, vginfo and lvinfo
|
||||
def setUp(self):
|
||||
self.addCleanup(self._clean_up)
|
||||
- self.dev_file = create_sparse_tempfile("lvm_test", 1024**3)
|
||||
- self.dev_file2 = create_sparse_tempfile("lvm_test", 1024**3)
|
||||
+ self.dev_file = create_sparse_tempfile("lvm_test", self._sparse_size)
|
||||
+ self.dev_file2 = create_sparse_tempfile("lvm_test", self._sparse_size)
|
||||
try:
|
||||
self.loop_dev = create_lio_device(self.dev_file)
|
||||
except RuntimeError as e:
|
||||
@@ -731,6 +734,8 @@ class LvmTestLVcreateWithExtra(LvmPVVGLVTestCase):
|
||||
self.assertTrue(succ)
|
||||
|
||||
class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
+ _sparse_size = 200 * 1024**2
|
||||
+
|
||||
def test_lvcreate_type(self):
|
||||
"""Verify it's possible to create LVs with various types"""
|
||||
|
||||
@@ -744,7 +749,7 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
self.assertTrue(succ)
|
||||
|
||||
# try to create a striped LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "striped", [self.loop_dev, self.loop_dev2], None)
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 100 * 1024**2, "striped", [self.loop_dev, self.loop_dev2], None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
@@ -756,7 +761,7 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
|
||||
with wait_for_sync("testVG", "testLV"):
|
||||
# try to create a mirrored LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "mirror", [self.loop_dev, self.loop_dev2], None)
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 100 * 1024**2, "mirror", [self.loop_dev, self.loop_dev2], None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
@@ -768,7 +773,7 @@ class LvmTestLVcreateType(LvmPVVGLVTestCase):
|
||||
|
||||
with wait_for_sync("testVG", "testLV"):
|
||||
# try to create a raid1 LV
|
||||
- succ = BlockDev.lvm_lvcreate("testVG", "testLV", 512 * 1024**2, "raid1", [self.loop_dev, self.loop_dev2], None)
|
||||
+ succ = BlockDev.lvm_lvcreate("testVG", "testLV", 100 * 1024**2, "raid1", [self.loop_dev, self.loop_dev2], None)
|
||||
self.assertTrue(succ)
|
||||
|
||||
# verify that the LV has the requested segtype
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,71 +0,0 @@
|
||||
From 8978b7e6913f904bea887b0c542f9f82c969c2cf Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 1 Sep 2021 11:36:29 +0200
|
||||
Subject: [PATCH] tests: Lower expected free space on newly created Ext
|
||||
filesystems
|
||||
|
||||
With e2fsprogs 1.46.4 we now see less than 90 % of free blocks on
|
||||
newly created devices in our tests.
|
||||
---
|
||||
tests/fs_test.py | 20 ++++++++++----------
|
||||
1 file changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/tests/fs_test.py b/tests/fs_test.py
|
||||
index 551b6a7b..6b0134bf 100644
|
||||
--- a/tests/fs_test.py
|
||||
+++ b/tests/fs_test.py
|
||||
@@ -425,8 +425,8 @@ def _test_ext_get_info(self, mkfs_function, info_function):
|
||||
self.assertTrue(fi)
|
||||
self.assertEqual(fi.block_size, 1024)
|
||||
self.assertEqual(fi.block_count, 100 * 1024**2 / 1024)
|
||||
- # at least 90 % should be available, so it should be reported
|
||||
- self.assertGreater(fi.free_blocks, 0.90 * 100 * 1024**2 / 1024)
|
||||
+ # at least 80 % should be available, so it should be reported
|
||||
+ self.assertGreater(fi.free_blocks, 0.80 * 100 * 1024**2 / 1024)
|
||||
self.assertEqual(fi.label, "")
|
||||
# should be an non-empty string
|
||||
self.assertTrue(fi.uuid)
|
||||
@@ -436,8 +436,8 @@ def _test_ext_get_info(self, mkfs_function, info_function):
|
||||
fi = BlockDev.fs_ext4_get_info(self.loop_dev)
|
||||
self.assertEqual(fi.block_size, 1024)
|
||||
self.assertEqual(fi.block_count, 100 * 1024**2 / 1024)
|
||||
- # at least 90 % should be available, so it should be reported
|
||||
- self.assertGreater(fi.free_blocks, 0.90 * 100 * 1024**2 / 1024)
|
||||
+ # at least 80 % should be available, so it should be reported
|
||||
+ self.assertGreater(fi.free_blocks, 0.80 * 100 * 1024**2 / 1024)
|
||||
self.assertEqual(fi.label, "")
|
||||
# should be an non-empty string
|
||||
self.assertTrue(fi.uuid)
|
||||
@@ -515,8 +515,8 @@ def _test_ext_resize(self, mkfs_function, info_function, resize_function):
|
||||
self.assertTrue(fi)
|
||||
self.assertEqual(fi.block_size, 1024)
|
||||
self.assertEqual(fi.block_count, 100 * 1024**2 / 1024)
|
||||
- # at least 90 % should be available, so it should be reported
|
||||
- self.assertGreater(fi.free_blocks, 0.90 * 100 * 1024**2 / 1024)
|
||||
+ # at least 80 % should be available, so it should be reported
|
||||
+ self.assertGreater(fi.free_blocks, 0.80 * 100 * 1024**2 / 1024)
|
||||
|
||||
succ = resize_function(self.loop_dev, 50 * 1024**2, None)
|
||||
self.assertTrue(succ)
|
||||
@@ -532,8 +532,8 @@ def _test_ext_resize(self, mkfs_function, info_function, resize_function):
|
||||
self.assertTrue(fi)
|
||||
self.assertEqual(fi.block_size, 1024)
|
||||
self.assertEqual(fi.block_count, 100 * 1024**2 / 1024)
|
||||
- # at least 90 % should be available, so it should be reported
|
||||
- self.assertGreater(fi.free_blocks, 0.90 * 100 * 1024**2 / 1024)
|
||||
+ # at least 80 % should be available, so it should be reported
|
||||
+ self.assertGreater(fi.free_blocks, 0.80 * 100 * 1024**2 / 1024)
|
||||
|
||||
# resize again
|
||||
succ = resize_function(self.loop_dev, 50 * 1024**2, None)
|
||||
@@ -550,8 +550,8 @@ def _test_ext_resize(self, mkfs_function, info_function, resize_function):
|
||||
self.assertTrue(fi)
|
||||
self.assertEqual(fi.block_size, 1024)
|
||||
self.assertEqual(fi.block_count, 100 * 1024**2 / 1024)
|
||||
- # at least 90 % should be available, so it should be reported
|
||||
- self.assertGreater(fi.free_blocks, 0.90 * 100 * 1024**2 / 1024)
|
||||
+ # at least 80 % should be available, so it should be reported
|
||||
+ self.assertGreater(fi.free_blocks, 0.80 * 100 * 1024**2 / 1024)
|
||||
|
||||
def test_ext2_resize(self):
|
||||
"""Verify that it is possible to resize an ext2 file system"""
|
@ -1,275 +0,0 @@
|
||||
From 9bcaddbe97067f10e643a7d99fa13716126f6e60 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 25 Aug 2020 14:09:18 +0200
|
||||
Subject: [PATCH 1/4] mdraid: Do not ignore errors from bd_md_canonicalize_uuid
|
||||
in bd_md_examine
|
||||
|
||||
---
|
||||
src/plugins/mdraid.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/src/plugins/mdraid.c b/src/plugins/mdraid.c
|
||||
index b97bc641..d41b6372 100644
|
||||
--- a/src/plugins/mdraid.c
|
||||
+++ b/src/plugins/mdraid.c
|
||||
@@ -983,12 +983,24 @@ BDMDExamineData* bd_md_examine (const gchar *device, GError **error) {
|
||||
orig_data = ret->uuid;
|
||||
if (orig_data) {
|
||||
ret->uuid = bd_md_canonicalize_uuid (orig_data, error);
|
||||
+ if (!ret->uuid) {
|
||||
+ g_prefix_error (error, "Failed to canonicalize MD UUID '%s': ", orig_data);
|
||||
+ g_free (orig_data);
|
||||
+ bd_md_examine_data_free (ret);
|
||||
+ return NULL;
|
||||
+ }
|
||||
g_free (orig_data);
|
||||
}
|
||||
|
||||
orig_data = ret->dev_uuid;
|
||||
if (orig_data) {
|
||||
ret->dev_uuid = bd_md_canonicalize_uuid (orig_data, error);
|
||||
+ if (!ret->uuid) {
|
||||
+ g_prefix_error (error, "Failed to canonicalize MD UUID '%s': ", orig_data);
|
||||
+ g_free (orig_data);
|
||||
+ bd_md_examine_data_free (ret);
|
||||
+ return NULL;
|
||||
+ }
|
||||
g_free (orig_data);
|
||||
}
|
||||
|
||||
--
|
||||
2.37.1
|
||||
|
||||
|
||||
From 1805734e8315d5fb73f036dae043312c88f3c3ec Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 25 Aug 2020 14:12:52 +0200
|
||||
Subject: [PATCH 2/4] mdraid: Try harder to get container UUID in bd_md_examine
|
||||
|
||||
For containers UUID is not printed in 'mdadm --examine' but it is
|
||||
printed when using the '--export' option.
|
||||
---
|
||||
src/plugins/mdraid.c | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/src/plugins/mdraid.c b/src/plugins/mdraid.c
|
||||
index d41b6372..3a23cf2e 100644
|
||||
--- a/src/plugins/mdraid.c
|
||||
+++ b/src/plugins/mdraid.c
|
||||
@@ -1023,6 +1023,17 @@ BDMDExamineData* bd_md_examine (const gchar *device, GError **error) {
|
||||
value++;
|
||||
g_free (ret->level);
|
||||
ret->level = g_strdup (value);
|
||||
+ } else if (!ret->uuid && g_str_has_prefix (output_fields[i], "MD_UUID=")) {
|
||||
+ value = strchr (output_fields[i], '=');
|
||||
+ value++;
|
||||
+ ret->uuid = bd_md_canonicalize_uuid (value, error);
|
||||
+ if (!ret->uuid) {
|
||||
+ g_prefix_error (error, "Failed to canonicalize MD UUID '%s': ", orig_data);
|
||||
+ g_free (orig_data);
|
||||
+ bd_md_examine_data_free (ret);
|
||||
+ g_strfreev (output_fields);
|
||||
+ return NULL;
|
||||
+ }
|
||||
}
|
||||
g_strfreev (output_fields);
|
||||
|
||||
--
|
||||
2.37.1
|
||||
|
||||
|
||||
From 166756338f90d90b32ae0989db706dd52f7df234 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 4 Aug 2022 12:47:53 +0200
|
||||
Subject: [PATCH 3/4] mdraid: Try harder to get container UUID in bd_md_detail
|
||||
|
||||
Similarly to bd_md_examine (see a10ad4e0), "mdadm --detail"
|
||||
doesn't contain container UUID, we need to need "--export" for
|
||||
that.
|
||||
---
|
||||
src/plugins/mdraid.c | 43 +++++++++++++++++++++++++++++++++++--------
|
||||
1 file changed, 35 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/mdraid.c b/src/plugins/mdraid.c
|
||||
index 3a23cf2e..67bdc1f9 100644
|
||||
--- a/src/plugins/mdraid.c
|
||||
+++ b/src/plugins/mdraid.c
|
||||
@@ -1093,13 +1093,16 @@ BDMDExamineData* bd_md_examine (const gchar *device, GError **error) {
|
||||
* Tech category: %BD_MD_TECH_MDRAID-%BD_MD_TECH_MODE_QUERY
|
||||
*/
|
||||
BDMDDetailData* bd_md_detail (const gchar *raid_spec, GError **error) {
|
||||
- const gchar *argv[] = {"mdadm", "--detail", NULL, NULL};
|
||||
+ const gchar *argv[] = {"mdadm", "--detail", NULL, NULL, NULL};
|
||||
gchar *output = NULL;
|
||||
gboolean success = FALSE;
|
||||
GHashTable *table = NULL;
|
||||
guint num_items = 0;
|
||||
gchar *orig_uuid = NULL;
|
||||
- gchar *mdadm_spec = NULL;
|
||||
+ g_autofree gchar *mdadm_spec = NULL;
|
||||
+ gchar *value = NULL;
|
||||
+ gchar **output_fields = NULL;
|
||||
+ guint i = 0;
|
||||
BDMDDetailData *ret = NULL;
|
||||
|
||||
if (!check_deps (&avail_deps, DEPS_MDADM_MASK, deps, DEPS_LAST, &deps_check_lock, error))
|
||||
@@ -1113,16 +1116,13 @@ BDMDDetailData* bd_md_detail (const gchar *raid_spec, GError **error) {
|
||||
argv[2] = mdadm_spec;
|
||||
|
||||
success = bd_utils_exec_and_capture_output (argv, NULL, &output, error);
|
||||
- if (!success) {
|
||||
- g_free (mdadm_spec);
|
||||
+ if (!success)
|
||||
/* error is already populated */
|
||||
return NULL;
|
||||
- }
|
||||
|
||||
table = parse_mdadm_vars (output, "\n", ":", &num_items);
|
||||
g_free (output);
|
||||
if (!table || (num_items == 0)) {
|
||||
- g_free (mdadm_spec);
|
||||
/* something bad happened or some expected items were missing */
|
||||
g_set_error (error, BD_MD_ERROR, BD_MD_ERROR_PARSE, "Failed to parse mddetail data");
|
||||
if (table)
|
||||
@@ -1132,7 +1132,6 @@ BDMDDetailData* bd_md_detail (const gchar *raid_spec, GError **error) {
|
||||
|
||||
ret = get_detail_data_from_table (table, TRUE);
|
||||
if (!ret) {
|
||||
- g_free (mdadm_spec);
|
||||
g_set_error (error, BD_MD_ERROR, BD_MD_ERROR_PARSE, "Failed to get mddetail data");
|
||||
return NULL;
|
||||
}
|
||||
@@ -1145,7 +1144,35 @@ BDMDDetailData* bd_md_detail (const gchar *raid_spec, GError **error) {
|
||||
g_free (orig_uuid);
|
||||
}
|
||||
|
||||
- g_free (mdadm_spec);
|
||||
+ if (!ret->uuid) {
|
||||
+ argv[2] = "--export";
|
||||
+ argv[3] = mdadm_spec;
|
||||
+ success = bd_utils_exec_and_capture_output (argv, NULL, &output, error);
|
||||
+ if (!success) {
|
||||
+ /* error is already populated */
|
||||
+ bd_md_detail_data_free (ret);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ /* try to get a better information about RAID level because it may be
|
||||
+ missing in the output without --export */
|
||||
+ output_fields = g_strsplit (output, "\n", 0);
|
||||
+ g_free (output);
|
||||
+ output = NULL;
|
||||
+ for (i = 0; (i < g_strv_length (output_fields) - 1); i++)
|
||||
+ if (g_str_has_prefix (output_fields[i], "MD_UUID=")) {
|
||||
+ value = strchr (output_fields[i], '=');
|
||||
+ value++;
|
||||
+ ret->uuid = bd_md_canonicalize_uuid (value, error);
|
||||
+ if (!ret->uuid) {
|
||||
+ g_prefix_error (error, "Failed to canonicalize MD UUID '%s': ", value);
|
||||
+ bd_md_detail_data_free (ret);
|
||||
+ g_strfreev (output_fields);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ g_strfreev (output_fields);
|
||||
+ }
|
||||
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
2.37.1
|
||||
|
||||
|
||||
From 25dd2f8c7cc3cf540902fc40e808faabda3c691a Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 4 Aug 2022 12:51:48 +0200
|
||||
Subject: [PATCH 4/4] Add a test case for DDF arrays/containers
|
||||
|
||||
---
|
||||
tests/mdraid_test.py | 51 ++++++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 47 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tests/mdraid_test.py b/tests/mdraid_test.py
|
||||
index 0b2bdc9b..38f43a0d 100644
|
||||
--- a/tests/mdraid_test.py
|
||||
+++ b/tests/mdraid_test.py
|
||||
@@ -6,7 +6,7 @@ from contextlib import contextmanager
|
||||
import overrides_hack
|
||||
import six
|
||||
|
||||
-from utils import create_sparse_tempfile, create_lio_device, delete_lio_device, fake_utils, fake_path, TestTags, tag_test
|
||||
+from utils import create_sparse_tempfile, create_lio_device, delete_lio_device, fake_utils, fake_path, TestTags, tag_test, run_command
|
||||
from gi.repository import BlockDev, GLib
|
||||
|
||||
|
||||
@@ -90,14 +90,16 @@ class MDNoDevTestCase(MDTest):
|
||||
|
||||
class MDTestCase(MDTest):
|
||||
|
||||
+ _sparse_size = 10 * 1024**2
|
||||
+
|
||||
def setUp(self):
|
||||
if os.uname()[-1] == "i686":
|
||||
self.skipTest("Skipping hanging MD RAID tests on i686")
|
||||
|
||||
self.addCleanup(self._clean_up)
|
||||
- self.dev_file = create_sparse_tempfile("md_test", 10 * 1024**2)
|
||||
- self.dev_file2 = create_sparse_tempfile("md_test", 10 * 1024**2)
|
||||
- self.dev_file3 = create_sparse_tempfile("md_test", 10 * 1024**2)
|
||||
+ self.dev_file = create_sparse_tempfile("md_test", self._sparse_size)
|
||||
+ self.dev_file2 = create_sparse_tempfile("md_test", self._sparse_size)
|
||||
+ self.dev_file3 = create_sparse_tempfile("md_test", self._sparse_size)
|
||||
|
||||
try:
|
||||
self.loop_dev = create_lio_device(self.dev_file)
|
||||
@@ -586,6 +588,47 @@ class MDTestRequestSyncAction(MDTestCase):
|
||||
action = f.read().strip()
|
||||
self.assertEqual(action, "check")
|
||||
|
||||
+
|
||||
+class MDTestDDFRAID(MDTestCase):
|
||||
+
|
||||
+ _sparse_size = 50 * 1024**2
|
||||
+
|
||||
+ def _clean_up(self):
|
||||
+ try:
|
||||
+ BlockDev.md_deactivate("bd_test_ddf")
|
||||
+ except:
|
||||
+ pass
|
||||
+ try:
|
||||
+ BlockDev.md_deactivate(BlockDev.md_node_from_name("bd_test_ddf"))
|
||||
+ except:
|
||||
+ pass
|
||||
+
|
||||
+ super(MDTestDDFRAID, self)._clean_up()
|
||||
+
|
||||
+ def test_examine_ddf_container(self):
|
||||
+ succ = BlockDev.md_create("bd_test_md", "container",
|
||||
+ [self.loop_dev, self.loop_dev2],
|
||||
+ 0, "ddf", False)
|
||||
+ self.assertTrue(succ)
|
||||
+
|
||||
+ # we cannot create the array with libblockdev because we cannot pass the --raid-devices option
|
||||
+ ret, _out, err = run_command("mdadm --create /dev/md/bd_test_ddf --run --level=raid0 --raid-devices=2 /dev/md/bd_test_md")
|
||||
+ self.assertEqual(ret, 0, msg="Failed to create RAID for DDF test: %s" % err)
|
||||
+
|
||||
+ edata = BlockDev.md_examine(self.loop_dev)
|
||||
+ self.assertIsNotNone(edata)
|
||||
+ self.assertIsNotNone(edata.uuid)
|
||||
+ self.assertEqual(edata.level, "container")
|
||||
+ self.assertEqual(edata.metadata, "ddf")
|
||||
+
|
||||
+ ddata = BlockDev.md_detail("bd_test_md")
|
||||
+ self.assertIsNotNone(ddata)
|
||||
+ self.assertIsNotNone(ddata.uuid)
|
||||
+ self.assertEqual(ddata.uuid, edata.uuid)
|
||||
+ self.assertEqual(ddata.level, "container")
|
||||
+ self.assertEqual(ddata.metadata, "ddf")
|
||||
+
|
||||
+
|
||||
class FakeMDADMutilTest(MDTest):
|
||||
# no setUp nor tearDown needed, we are gonna use fake utils
|
||||
@tag_test(TestTags.NOSTORAGE)
|
||||
--
|
||||
2.37.1
|
||||
|
@ -1,53 +0,0 @@
|
||||
From 04a8baf87820d8a13926e0b8db5cfa55f9f04420 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:26:57 +0200
|
||||
Subject: [PATCH 1/2] mdraid: Fix copy-paste error when checking return value
|
||||
|
||||
---
|
||||
src/plugins/mdraid.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/plugins/mdraid.c b/src/plugins/mdraid.c
|
||||
index 67bdc1f9..48abb72f 100644
|
||||
--- a/src/plugins/mdraid.c
|
||||
+++ b/src/plugins/mdraid.c
|
||||
@@ -995,7 +995,7 @@ BDMDExamineData* bd_md_examine (const gchar *device, GError **error) {
|
||||
orig_data = ret->dev_uuid;
|
||||
if (orig_data) {
|
||||
ret->dev_uuid = bd_md_canonicalize_uuid (orig_data, error);
|
||||
- if (!ret->uuid) {
|
||||
+ if (!ret->dev_uuid) {
|
||||
g_prefix_error (error, "Failed to canonicalize MD UUID '%s': ", orig_data);
|
||||
g_free (orig_data);
|
||||
bd_md_examine_data_free (ret);
|
||||
--
|
||||
2.37.1
|
||||
|
||||
|
||||
From 16a34bc5ddb19bc6dd1a845d87e8b748cbaedd2c Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Fri, 25 Sep 2020 14:41:20 +0200
|
||||
Subject: [PATCH 2/2] mdraid: Fix use after free
|
||||
|
||||
Another copy-paste error.
|
||||
---
|
||||
src/plugins/mdraid.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/mdraid.c b/src/plugins/mdraid.c
|
||||
index 48abb72f..75143ea7 100644
|
||||
--- a/src/plugins/mdraid.c
|
||||
+++ b/src/plugins/mdraid.c
|
||||
@@ -1028,8 +1028,7 @@ BDMDExamineData* bd_md_examine (const gchar *device, GError **error) {
|
||||
value++;
|
||||
ret->uuid = bd_md_canonicalize_uuid (value, error);
|
||||
if (!ret->uuid) {
|
||||
- g_prefix_error (error, "Failed to canonicalize MD UUID '%s': ", orig_data);
|
||||
- g_free (orig_data);
|
||||
+ g_prefix_error (error, "Failed to canonicalize MD UUID '%s': ", value);
|
||||
bd_md_examine_data_free (ret);
|
||||
g_strfreev (output_fields);
|
||||
return NULL;
|
||||
--
|
||||
2.37.1
|
||||
|
@ -1,45 +0,0 @@
|
||||
From 33b1cda56fdc76fdf96fe409f0308e1913965d16 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Thu, 26 May 2022 12:44:47 +0200
|
||||
Subject: [PATCH] tests: Fix expected extended partition flags with new parted
|
||||
|
||||
Latest libparted now creates all extended partitions as
|
||||
PARTITION_EXT_LBA with the lba flag enabled by default.
|
||||
---
|
||||
tests/part_test.py | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/tests/part_test.py b/tests/part_test.py
|
||||
index 7408b479..762dc534 100644
|
||||
--- a/tests/part_test.py
|
||||
+++ b/tests/part_test.py
|
||||
@@ -356,7 +356,7 @@ class PartCreatePartFullCase(PartTestCase):
|
||||
# as is the start of the first part from the start of the disk
|
||||
self.assertTrue(abs(ps4.start - (ps3.start + ps3.size + 1)) < ps.start)
|
||||
self.assertEqual(ps4.size, 10 * 1024**2)
|
||||
- self.assertEqual(ps4.flags, 0) # no flags (combination of bit flags)
|
||||
+ self.assertIn(ps4.flags, [0, 128]) # no flags or extended+lba (combination of bit flags)
|
||||
|
||||
# no more primary partitions allowed in the MSDOS table
|
||||
with self.assertRaises(GLib.GError):
|
||||
@@ -404,7 +404,7 @@ class PartCreatePartFullCase(PartTestCase):
|
||||
# as is the start of the first part from the start of the disk
|
||||
self.assertTrue(abs(ps3.start - (ps2.start + ps2.size + 1)) < ps.start)
|
||||
self.assertEqual(ps3.size, 30 * 1024**2)
|
||||
- self.assertEqual(ps3.flags, 0) # no flags (combination of bit flags)
|
||||
+ self.assertIn(ps3.flags, [0, 128]) # no flags or extended+lba (combination of bit flags)
|
||||
|
||||
# the logical partition has number 5 even though the extended partition
|
||||
# has number 3
|
||||
@@ -871,7 +871,7 @@ class PartGetPartByPos(PartTestCase):
|
||||
# as is the start of the first part from the start of the disk
|
||||
self.assertTrue(abs(ps3.start - (ps2.start + ps2.size + 1)) < ps.start)
|
||||
self.assertEqual(ps3.size, 35 * 1024**2)
|
||||
- self.assertEqual(ps3.flags, 0) # no flags (combination of bit flags)
|
||||
+ self.assertIn(ps3.flags, [0, 128]) # no flags or extended+lba (combination of bit flags)
|
||||
|
||||
# the logical partition has number 5 even though the extended partition
|
||||
# has number 3
|
||||
--
|
||||
2.37.1
|
||||
|
108
libblockdev.spec
108
libblockdev.spec
@ -124,28 +124,15 @@
|
||||
%define configure_opts %{?python2_copts} %{?python3_copts} %{?bcache_copts} %{?lvm_dbus_copts} %{?btrfs_copts} %{?crypto_copts} %{?dm_copts} %{?loop_copts} %{?lvm_copts} %{?lvm_dbus_copts} %{?mdraid_copts} %{?mpath_copts} %{?swap_copts} %{?kbd_copts} %{?part_copts} %{?fs_copts} %{?nvdimm_copts} %{?vdo_copts} %{?tools_copts} %{?gi_copts}
|
||||
|
||||
Name: libblockdev
|
||||
Version: 2.25
|
||||
Release: 14%{?dist}
|
||||
Version: 2.28
|
||||
Release: 1%{?dist}
|
||||
Summary: A library for low-level manipulation with block devices
|
||||
License: LGPLv2+
|
||||
URL: https://github.com/storaged-project/libblockdev
|
||||
Source0: https://github.com/storaged-project/libblockdev/releases/download/%{version}-%{release}/%{name}-%{version}.tar.gz
|
||||
Patch0: libblockdev-gcc11.patch
|
||||
Patch1: 0001-Fix-comparing-DM-RAID-member-devices-UUID.patch
|
||||
Patch2: 0002-Fix-default-key-size-for-non-XTS-ciphers.patch
|
||||
Patch3: 0003-Memory-leaks-fixes-backport.patch
|
||||
Patch4: 0004-Adapt-to-dosfstools-4.2-changes.patch
|
||||
Patch5: 0005-Add-workarounds-for-some-LVM-test-issues.patch
|
||||
Patch6: 0006-Misc-test-fixes-backport.patch
|
||||
Patch7: 0007-lvm-devices-file-support.patch
|
||||
Patch8: 0008-lvm-Fix-reading-statistics-for-VDO-pools-with-VDO-8.patch
|
||||
Patch9: 0009-vdo_stats-Default-to-100-savings-for-invalid-savings.patch
|
||||
Patch10: 0010-Add-support-for-creating-and-activating-integrity-de.patch
|
||||
Patch11: 0011-tests-Wait-for-raid-and-mirrored-LVs-to-be-synced-be.patch
|
||||
Patch12: 0012-tests-Lower-expected-free-space-on-newly-created-Ext-filesystems.patch
|
||||
Patch13: 0013-ddf-mdadm-uuid-parse-fix.patch
|
||||
Patch14: 0014-mdraid-Fix-copy-paste-error-when-checking-return-val.patch
|
||||
Patch15: 0015-tests-Fix-expected-extended-partition-flags-with-new.patch
|
||||
Patch1: 0001-lvm-devices-file-support.patch
|
||||
Patch2: 0002-Add-support-for-creating-and-activating-integrity-de.patch
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: glib2-devel
|
||||
@ -167,6 +154,8 @@ BuildRequires: gtk-doc
|
||||
BuildRequires: glib2-doc
|
||||
BuildRequires: autoconf-archive
|
||||
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
|
||||
# Needed for the escrow tests in tests/crypto_test.py, but not used to build
|
||||
# BuildRequires: volume_key
|
||||
# BuildRequires: nss-tools
|
||||
@ -188,6 +177,7 @@ no information about VGs when creating an LV).
|
||||
Summary: Development files for libblockdev
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description devel
|
||||
This package contains header files and pkg-config files needed for development
|
||||
@ -244,7 +234,7 @@ with the libblockdev-utils library.
|
||||
%package btrfs
|
||||
BuildRequires: libbytesize-devel
|
||||
Summary: The BTRFS plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: btrfs-progs
|
||||
|
||||
%description btrfs
|
||||
@ -255,7 +245,7 @@ providing the BTRFS-related functionality.
|
||||
Summary: Development files for the libblockdev-btrfs plugin/library
|
||||
Requires: %{name}-btrfs%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description btrfs-devel
|
||||
This package contains header files and pkg-config files needed for development
|
||||
@ -265,6 +255,7 @@ with the libblockdev-btrfs plugin/library.
|
||||
|
||||
%if %{with_crypto}
|
||||
%package crypto
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
BuildRequires: cryptsetup-devel
|
||||
BuildRequires: libblkid-devel
|
||||
|
||||
@ -282,6 +273,7 @@ providing the functionality related to encrypted devices (LUKS).
|
||||
%package crypto-devel
|
||||
Summary: Development files for the libblockdev-crypto plugin/library
|
||||
Requires: %{name}-crypto%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description crypto-devel
|
||||
@ -298,7 +290,7 @@ BuildRequires: dmraid-devel
|
||||
%endif
|
||||
BuildRequires: systemd-devel
|
||||
Summary: The Device Mapper plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: device-mapper
|
||||
%if %{with_dmraid}
|
||||
Requires: dmraid
|
||||
@ -317,7 +309,7 @@ Requires: systemd-devel
|
||||
%if %{with_dmraid}
|
||||
Requires: dmraid-devel
|
||||
%endif
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description dm-devel
|
||||
This package contains header files and pkg-config files needed for development
|
||||
@ -331,7 +323,7 @@ BuildRequires: parted-devel
|
||||
BuildRequires: libblkid-devel
|
||||
BuildRequires: libmount-devel
|
||||
Summary: The FS plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description fs
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
@ -340,7 +332,7 @@ providing the functionality related to operations with file systems.
|
||||
%package fs-devel
|
||||
Summary: Development files for the libblockdev-fs plugin/library
|
||||
Requires: %{name}-fs%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
Requires: xfsprogs
|
||||
Requires: dosfstools
|
||||
@ -355,7 +347,7 @@ with the libblockdev-fs plugin/library.
|
||||
%package kbd
|
||||
BuildRequires: libbytesize-devel
|
||||
Summary: The KBD plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
%if %{with_bcache}
|
||||
Requires: bcache-tools >= 1.0.8
|
||||
%endif
|
||||
@ -368,7 +360,7 @@ Bcache).
|
||||
%package kbd-devel
|
||||
Summary: Development files for the libblockdev-kbd plugin/library
|
||||
Requires: %{name}-kbd%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description kbd-devel
|
||||
@ -380,7 +372,7 @@ with the libblockdev-kbd plugin/library.
|
||||
%if %{with_loop}
|
||||
%package loop
|
||||
Summary: The loop plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description loop
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
@ -389,7 +381,7 @@ providing the functionality related to loop devices.
|
||||
%package loop-devel
|
||||
Summary: Development files for the libblockdev-loop plugin/library
|
||||
Requires: %{name}-loop%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description loop-devel
|
||||
@ -402,10 +394,8 @@ with the libblockdev-loop plugin/library.
|
||||
%package lvm
|
||||
BuildRequires: device-mapper-devel
|
||||
Summary: The LVM plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: lvm2
|
||||
# for thin_metadata_size
|
||||
Requires: device-mapper-persistent-data
|
||||
|
||||
%description lvm
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
@ -426,10 +416,8 @@ with the libblockdev-lvm plugin/library.
|
||||
%package lvm-dbus
|
||||
BuildRequires: device-mapper-devel
|
||||
Summary: The LVM plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 1.4
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: lvm2-dbusd >= 2.02.156
|
||||
# for thin_metadata_size
|
||||
Requires: device-mapper-persistent-data
|
||||
|
||||
%description lvm-dbus
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
@ -451,7 +439,7 @@ with the libblockdev-lvm-dbus plugin/library.
|
||||
%package mdraid
|
||||
BuildRequires: libbytesize-devel
|
||||
Summary: The MD RAID plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: mdadm
|
||||
|
||||
%description mdraid
|
||||
@ -461,7 +449,7 @@ providing the functionality related to MD RAID.
|
||||
%package mdraid-devel
|
||||
Summary: Development files for the libblockdev-mdraid plugin/library
|
||||
Requires: %{name}-mdraid%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description mdraid-devel
|
||||
@ -474,8 +462,8 @@ with the libblockdev-mdraid plugin/library.
|
||||
%package mpath
|
||||
BuildRequires: device-mapper-devel
|
||||
Summary: The multipath plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Recommends: device-mapper-multipath
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: device-mapper-multipath
|
||||
|
||||
%description mpath
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
@ -484,7 +472,7 @@ providing the functionality related to multipath devices.
|
||||
%package mpath-devel
|
||||
Summary: Development files for the libblockdev-mpath plugin/library
|
||||
Requires: %{name}-mpath%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description mpath-devel
|
||||
@ -497,7 +485,7 @@ with the libblockdev-mpath plugin/library.
|
||||
BuildRequires: ndctl-devel
|
||||
BuildRequires: libuuid-devel
|
||||
Summary: The NVDIMM plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: ndctl
|
||||
|
||||
%description nvdimm
|
||||
@ -507,7 +495,7 @@ providing the functionality related to operations with NVDIMM devices.
|
||||
%package nvdimm-devel
|
||||
Summary: Development files for the libblockdev-nvdimm plugin/library
|
||||
Requires: %{name}-nvdimm%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description nvdimm-devel
|
||||
@ -520,7 +508,7 @@ with the libblockdev-nvdimm plugin/library.
|
||||
%package part
|
||||
BuildRequires: parted-devel
|
||||
Summary: The partitioning plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: gdisk
|
||||
Requires: util-linux
|
||||
|
||||
@ -531,7 +519,7 @@ providing the functionality related to partitioning.
|
||||
%package part-devel
|
||||
Summary: Development files for the libblockdev-part plugin/library
|
||||
Requires: %{name}-part%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description part-devel
|
||||
@ -544,7 +532,7 @@ with the libblockdev-part plugin/library.
|
||||
%package swap
|
||||
BuildRequires: libblkid-devel
|
||||
Summary: The swap plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
Requires: util-linux
|
||||
|
||||
%description swap
|
||||
@ -554,7 +542,7 @@ providing the functionality related to swap devices.
|
||||
%package swap-devel
|
||||
Summary: Development files for the libblockdev-swap plugin/library
|
||||
Requires: %{name}-swap%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description swap-devel
|
||||
@ -568,7 +556,7 @@ with the libblockdev-swap plugin/library.
|
||||
BuildRequires: libbytesize-devel
|
||||
BuildRequires: libyaml-devel
|
||||
Summary: The vdo plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} >= 0.11
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
|
||||
# weak dependencies doesn't work on older RHEL
|
||||
%if (0%{?rhel} && 0%{?rhel} <= 7)
|
||||
@ -588,7 +576,7 @@ providing the functionality related to VDO devices.
|
||||
%package vdo-devel
|
||||
Summary: Development files for the libblockdev-vdo plugin/library
|
||||
Requires: %{name}-vdo%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description vdo-devel
|
||||
@ -599,8 +587,8 @@ with the libblockdev-vdo plugin/library.
|
||||
%if %{with_tools}
|
||||
%package tools
|
||||
Summary: Various nice tools based on libblockdev
|
||||
Requires: %{name}
|
||||
Requires: %{name}-lvm
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: %{name}-lvm = %{version}-%{release}
|
||||
BuildRequires: libbytesize-devel
|
||||
%if %{with_lvm_dbus} == 1
|
||||
Recommends: %{name}-lvm-dbus
|
||||
@ -615,6 +603,7 @@ Various nice storage-related tools based on libblockdev.
|
||||
%package s390
|
||||
Summary: The s390 plugin for the libblockdev library
|
||||
Requires: s390utils
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description s390
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
@ -623,7 +612,7 @@ providing the functionality related to s390 devices.
|
||||
%package s390-devel
|
||||
Summary: Development files for the libblockdev-s390 plugin/library
|
||||
Requires: %{name}-s390%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description s390-devel
|
||||
@ -700,19 +689,6 @@ A meta-package that pulls all the libblockdev plugins as dependencies.
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
%patch14 -p1
|
||||
%patch15 -p1
|
||||
|
||||
%build
|
||||
autoreconf -ivf
|
||||
@ -1016,6 +992,14 @@ find %{buildroot} -type f -name "*.la" | xargs %{__rm}
|
||||
%files plugins-all
|
||||
|
||||
%changelog
|
||||
* Wed Sep 14 2022 Vojtech Trefny <vtrefny@redhat.com> - 2.28-1
|
||||
- Rebase to the latest upstream release 2.28
|
||||
Resolves: rhbz#2123346
|
||||
- Add dependency on device-mapper-multipath to libblockdev-mpath
|
||||
Resolves: rhbz#2121072
|
||||
- Fix spec issues found by rpminspect
|
||||
Resolves: rhbz#2116544
|
||||
|
||||
* Mon Aug 08 2022 Vojtech Trefny <vtrefny@redhat.com> - 2.25-14
|
||||
- tests: Fix expected extended partition flags with new parted
|
||||
Related: rhbz#2109026
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (libblockdev-2.25.tar.gz) = 628d05f3a257b44208a9d0b5d84ae248fefd415812d9a93d132c03039b09fefc4d6110beb9aa0d3072e3f0c992e642d7867d0241209056538f132f86a748e195
|
||||
SHA512 (libblockdev-2.28.tar.gz) = 9e01c41db4f728c8e81e710c6bb4725bbe34b3a7de25ff7f57b7b88ca6b7b5debbe858947585d314770036b2c3c533f9f8ff3d038b7ca50eee3d18f9fbe0d392
|
||||
|
Loading…
Reference in New Issue
Block a user