import libblockdev-2.28-4.el9
This commit is contained in:
parent
fc5e826b4c
commit
5ff90eea81
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/libblockdev-2.25.tar.gz
|
||||
SOURCES/libblockdev-2.28.tar.gz
|
||||
|
@ -1 +1 @@
|
||||
c16d236f95a7a88b1d0f5309fdc8823999d297d1 SOURCES/libblockdev-2.25.tar.gz
|
||||
d32fce132c75d94ad9c033a636906d63027ffba5 SOURCES/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,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;
|
||||
}
|
||||
}
|
6467
SOURCES/0003-NVMe-plugin-backport.patch
Normal file
6467
SOURCES/0003-NVMe-plugin-backport.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -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")
|
59
SOURCES/0004-Fix-double-free-in-write_escrow_data_file.patch
Normal file
59
SOURCES/0004-Fix-double-free-in-write_escrow_data_file.patch
Normal file
@ -0,0 +1,59 @@
|
||||
From 7a0e344d0642f76992c943158621d8ee7e5caea3 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Tue, 15 Nov 2022 13:21:25 +0100
|
||||
Subject: [PATCH 1/2] crypto: Fix GError overwrite from libvolume_key
|
||||
|
||||
---
|
||||
src/plugins/crypto.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c
|
||||
index 35c38410..9064c8e3 100644
|
||||
--- a/src/plugins/crypto.c
|
||||
+++ b/src/plugins/crypto.c
|
||||
@@ -2552,13 +2552,14 @@ static gboolean write_escrow_data_file (struct libvk_volume *volume, struct libv
|
||||
GIOChannel *out_file = NULL;
|
||||
GIOStatus status = G_IO_STATUS_ERROR;
|
||||
gsize bytes_written = 0;
|
||||
+ GError *l_error = NULL;
|
||||
|
||||
packet_data = libvk_volume_create_packet_asymmetric_with_format (volume, &packet_data_size, secret_type, cert,
|
||||
- ui, LIBVK_PACKET_FORMAT_ASYMMETRIC_WRAP_SECRET_ONLY, error);
|
||||
-
|
||||
+ ui, LIBVK_PACKET_FORMAT_ASYMMETRIC_WRAP_SECRET_ONLY, &l_error);
|
||||
if (!packet_data) {
|
||||
g_set_error (error, BD_CRYPTO_ERROR, BD_CRYPTO_ERROR_ESCROW_FAILED,
|
||||
- "Failed to get escrow data");
|
||||
+ "Failed to get escrow data: %s", l_error->message);
|
||||
+ g_clear_error (&l_error);
|
||||
libvk_volume_free (volume);
|
||||
return FALSE;
|
||||
}
|
||||
--
|
||||
2.38.1
|
||||
|
||||
|
||||
From 25bf34c4c03e37eb3782dfccf459b9a3f795ddb3 Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 16 Nov 2022 10:26:06 +0100
|
||||
Subject: [PATCH 2/2] crypto: Fix double free in write_escrow_data_file
|
||||
|
||||
---
|
||||
src/plugins/crypto.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/src/plugins/crypto.c b/src/plugins/crypto.c
|
||||
index 9064c8e3..2086209e 100644
|
||||
--- a/src/plugins/crypto.c
|
||||
+++ b/src/plugins/crypto.c
|
||||
@@ -2560,7 +2560,6 @@ static gboolean write_escrow_data_file (struct libvk_volume *volume, struct libv
|
||||
g_set_error (error, BD_CRYPTO_ERROR, BD_CRYPTO_ERROR_ESCROW_FAILED,
|
||||
"Failed to get escrow data: %s", l_error->message);
|
||||
g_clear_error (&l_error);
|
||||
- libvk_volume_free (volume);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
--
|
||||
2.38.1
|
||||
|
@ -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"""
|
||||
|
506
SOURCES/0005-nvme-Fix-namespace-identifiers.patch
Normal file
506
SOURCES/0005-nvme-Fix-namespace-identifiers.patch
Normal file
@ -0,0 +1,506 @@
|
||||
From b25fd9caca9b2fb34e5a4d7d4bee0031e4758d0a Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||
Date: Thu, 22 Sep 2022 16:31:28 +0200
|
||||
Subject: [PATCH 1/5] nvme: Avoid sending NVME_IDENTIFY_CNS_NS_DESC_LIST on
|
||||
older devices
|
||||
|
||||
Turned out this Identify feature was introduced only with the NVMe 1.3
|
||||
specification. To find out device supported NVMe revision an extra
|
||||
Identify Controller call is needed.
|
||||
---
|
||||
src/plugins/nvme/nvme-info.c | 14 +++++++++++---
|
||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/nvme/nvme-info.c b/src/plugins/nvme/nvme-info.c
|
||||
index fdd90459..112b4054 100644
|
||||
--- a/src/plugins/nvme/nvme-info.c
|
||||
+++ b/src/plugins/nvme/nvme-info.c
|
||||
@@ -431,7 +431,7 @@ BDNVMEControllerInfo * bd_nvme_get_controller_info (const gchar *device, GError
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
|
||||
- /* send the NVME_IDENTIFY_CNS_NS + NVME_IDENTIFY_CNS_CTRL ioctl */
|
||||
+ /* send the NVME_IDENTIFY_CNS_CTRL ioctl */
|
||||
ret = nvme_identify_ctrl (fd, &ctrl_id);
|
||||
if (ret != 0) {
|
||||
_nvme_status_to_error (ret, FALSE, error);
|
||||
@@ -539,9 +539,11 @@ BDNVMEControllerInfo * bd_nvme_get_controller_info (const gchar *device, GError
|
||||
*/
|
||||
BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **error) {
|
||||
int ret;
|
||||
- int ret_desc;
|
||||
+ int ret_ctrl;
|
||||
+ int ret_desc = -1;
|
||||
int fd;
|
||||
__u32 nsid = 0;
|
||||
+ struct nvme_id_ctrl ctrl_id = ZERO_INIT;
|
||||
struct nvme_id_ns ns_info = ZERO_INIT;
|
||||
uint8_t desc[NVME_IDENTIFY_DATA_SIZE] = ZERO_INIT;
|
||||
guint8 flbas;
|
||||
@@ -565,7 +567,6 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
}
|
||||
|
||||
/* send the NVME_IDENTIFY_CNS_NS ioctl */
|
||||
- ret_desc = nvme_identify_ns_descs (fd, nsid, (struct nvme_ns_id_desc *) &desc);
|
||||
ret = nvme_identify_ns (fd, nsid, &ns_info);
|
||||
if (ret != 0) {
|
||||
_nvme_status_to_error (ret, FALSE, error);
|
||||
@@ -573,6 +574,13 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
close (fd);
|
||||
return NULL;
|
||||
}
|
||||
+
|
||||
+ /* send the NVME_IDENTIFY_CNS_CTRL ioctl */
|
||||
+ ret_ctrl = nvme_identify_ctrl (fd, &ctrl_id);
|
||||
+
|
||||
+ /* send the NVME_IDENTIFY_CNS_NS_DESC_LIST ioctl, NVMe 1.3 */
|
||||
+ if (ret_ctrl == 0 && GUINT32_FROM_LE (ctrl_id.ver) >= 0x10300)
|
||||
+ ret_desc = nvme_identify_ns_descs (fd, nsid, (struct nvme_ns_id_desc *) &desc);
|
||||
close (fd);
|
||||
|
||||
info = g_new0 (BDNVMENamespaceInfo, 1);
|
||||
--
|
||||
2.39.0
|
||||
|
||||
|
||||
From e6f7d0c4562623b03df96dc6b89ab00d8e4d6b90 Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||
Date: Thu, 22 Sep 2022 16:56:26 +0200
|
||||
Subject: [PATCH 2/5] nvme: Add BD_NVME_NS_FEAT_ROTATIONAL
|
||||
|
||||
A NVMe 2.0 feature indicating rotational medium on a namespace level.
|
||||
Further information can be found in the Rotational Media Information Log
|
||||
page (Log Identifier 16h) that is not implemented in libblockdev yet.
|
||||
---
|
||||
src/lib/plugin_apis/nvme.api | 2 ++
|
||||
src/plugins/nvme/nvme-info.c | 10 ++++++++++
|
||||
src/plugins/nvme/nvme.h | 2 ++
|
||||
tests/nvme_test.py | 1 +
|
||||
4 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/src/lib/plugin_apis/nvme.api b/src/lib/plugin_apis/nvme.api
|
||||
index 79247a01..7bc2cf9e 100644
|
||||
--- a/src/lib/plugin_apis/nvme.api
|
||||
+++ b/src/lib/plugin_apis/nvme.api
|
||||
@@ -317,12 +317,14 @@ GType bd_nvme_lba_format_get_type () {
|
||||
* in the NVM subsystem concurrently.
|
||||
* @BD_NVME_NS_FEAT_FORMAT_PROGRESS: indicates the capability to report the percentage of the namespace
|
||||
* that remains to be formatted.
|
||||
+ * @BD_NVME_NS_FEAT_ROTATIONAL: indicates a rotational medium.
|
||||
*/
|
||||
/* BpG-skip-end */
|
||||
typedef enum {
|
||||
BD_NVME_NS_FEAT_THIN = 1 << 0,
|
||||
BD_NVME_NS_FEAT_MULTIPATH_SHARED = 1 << 1,
|
||||
BD_NVME_NS_FEAT_FORMAT_PROGRESS = 1 << 2,
|
||||
+ BD_NVME_NS_FEAT_ROTATIONAL = 1 << 3,
|
||||
} BDNVMENamespaceFeature;
|
||||
|
||||
#define BD_NVME_TYPE_NAMESPACE_INFO (bd_nvme_namespace_info_get_type ())
|
||||
diff --git a/src/plugins/nvme/nvme-info.c b/src/plugins/nvme/nvme-info.c
|
||||
index 112b4054..c574a6f3 100644
|
||||
--- a/src/plugins/nvme/nvme-info.c
|
||||
+++ b/src/plugins/nvme/nvme-info.c
|
||||
@@ -541,10 +541,12 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
int ret;
|
||||
int ret_ctrl;
|
||||
int ret_desc = -1;
|
||||
+ int ret_ns_ind = -1;
|
||||
int fd;
|
||||
__u32 nsid = 0;
|
||||
struct nvme_id_ctrl ctrl_id = ZERO_INIT;
|
||||
struct nvme_id_ns ns_info = ZERO_INIT;
|
||||
+ struct nvme_id_independent_id_ns ns_info_ind = ZERO_INIT;
|
||||
uint8_t desc[NVME_IDENTIFY_DATA_SIZE] = ZERO_INIT;
|
||||
guint8 flbas;
|
||||
guint i;
|
||||
@@ -581,6 +583,10 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
/* send the NVME_IDENTIFY_CNS_NS_DESC_LIST ioctl, NVMe 1.3 */
|
||||
if (ret_ctrl == 0 && GUINT32_FROM_LE (ctrl_id.ver) >= 0x10300)
|
||||
ret_desc = nvme_identify_ns_descs (fd, nsid, (struct nvme_ns_id_desc *) &desc);
|
||||
+
|
||||
+ /* send the NVME_IDENTIFY_CNS_CSI_INDEPENDENT_ID_NS ioctl, NVMe 2.0 */
|
||||
+ if (ret_ctrl == 0 && GUINT32_FROM_LE (ctrl_id.ver) >= 0x20000)
|
||||
+ ret_ns_ind = nvme_identify_independent_identify_ns (fd, nsid, &ns_info_ind);
|
||||
close (fd);
|
||||
|
||||
info = g_new0 (BDNVMENamespaceInfo, 1);
|
||||
@@ -627,6 +633,10 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
}
|
||||
}
|
||||
}
|
||||
+ if (ret_ns_ind == 0) {
|
||||
+ if ((ns_info_ind.nsfeat & 1 << 4) == 1 << 4)
|
||||
+ info->features |= BD_NVME_NS_FEAT_ROTATIONAL;
|
||||
+ }
|
||||
|
||||
/* translate the LBA Format array */
|
||||
ptr_array = g_ptr_array_new ();
|
||||
diff --git a/src/plugins/nvme/nvme.h b/src/plugins/nvme/nvme.h
|
||||
index a7d30d79..ad456a82 100644
|
||||
--- a/src/plugins/nvme/nvme.h
|
||||
+++ b/src/plugins/nvme/nvme.h
|
||||
@@ -202,11 +202,13 @@ typedef struct BDNVMELBAFormat {
|
||||
* in the NVM subsystem concurrently.
|
||||
* @BD_NVME_NS_FEAT_FORMAT_PROGRESS: indicates the capability to report the percentage of the namespace
|
||||
* that remains to be formatted.
|
||||
+ * @BD_NVME_NS_FEAT_ROTATIONAL: indicates a rotational medium.
|
||||
*/
|
||||
typedef enum {
|
||||
BD_NVME_NS_FEAT_THIN = 1 << 0,
|
||||
BD_NVME_NS_FEAT_MULTIPATH_SHARED = 1 << 1,
|
||||
BD_NVME_NS_FEAT_FORMAT_PROGRESS = 1 << 2,
|
||||
+ BD_NVME_NS_FEAT_ROTATIONAL = 1 << 3,
|
||||
} BDNVMENamespaceFeature;
|
||||
|
||||
/**
|
||||
diff --git a/tests/nvme_test.py b/tests/nvme_test.py
|
||||
index a46f7422..f205e539 100644
|
||||
--- a/tests/nvme_test.py
|
||||
+++ b/tests/nvme_test.py
|
||||
@@ -73,6 +73,7 @@ class NVMeTestCase(NVMeTest):
|
||||
self.assertFalse(info.features & BlockDev.NVMENamespaceFeature.THIN)
|
||||
self.assertTrue (info.features & BlockDev.NVMENamespaceFeature.MULTIPATH_SHARED)
|
||||
self.assertFalse(info.features & BlockDev.NVMENamespaceFeature.FORMAT_PROGRESS)
|
||||
+ self.assertFalse(info.features & BlockDev.NVMENamespaceFeature.ROTATIONAL)
|
||||
self.assertEqual(info.eui64, "0000000000000000")
|
||||
self.assertEqual(info.format_progress_remaining, 0)
|
||||
self.assertEqual(len(info.lba_formats), 1)
|
||||
--
|
||||
2.39.0
|
||||
|
||||
|
||||
From 4ff0df937dcd357623e7b7d960c08c476b1deffb Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||
Date: Fri, 9 Dec 2022 16:13:43 +0100
|
||||
Subject: [PATCH 3/5] nvme: Fix namespace identifiers
|
||||
|
||||
Use Namespace Identification Descriptor list (CNS 03h) data when available
|
||||
and NVM Command Set Identify Namespace Data Structure (CNS 00h) as a fallback.
|
||||
|
||||
Also, if the CNS 00h EUI64 or NGUID fields equal to zero, return NULL
|
||||
instead of zeroes:
|
||||
"If the controller is not able to provide a ... identifier in this field,
|
||||
then this field shall be cleared to 0h."
|
||||
---
|
||||
src/plugins/nvme/nvme-info.c | 26 +++++++++++++++++++-------
|
||||
tests/nvme_test.py | 2 +-
|
||||
2 files changed, 20 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/nvme/nvme-info.c b/src/plugins/nvme/nvme-info.c
|
||||
index c574a6f3..ac189abe 100644
|
||||
--- a/src/plugins/nvme/nvme-info.c
|
||||
+++ b/src/plugins/nvme/nvme-info.c
|
||||
@@ -603,12 +603,7 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
info->format_progress_remaining = ns_info.fpi & NVME_NS_FPI_REMAINING;
|
||||
/* TODO: what the ns_info.nvmcap really stands for? */
|
||||
info->write_protected = (ns_info.nsattr & NVME_NS_NSATTR_WRITE_PROTECTED) == NVME_NS_NSATTR_WRITE_PROTECTED;
|
||||
- info->nguid = g_malloc0 (sizeof (ns_info.nguid) * 2 + 1);
|
||||
- for (i = 0; i < G_N_ELEMENTS (ns_info.nguid); i++)
|
||||
- snprintf (info->nguid + i * 2, 3, "%02x", ns_info.nguid[i]);
|
||||
- info->eui64 = g_malloc0 (sizeof (ns_info.eui64) * 2 + 1);
|
||||
- for (i = 0; i < G_N_ELEMENTS (ns_info.eui64); i++)
|
||||
- snprintf (info->eui64 + i * 2, 3, "%02x", ns_info.eui64[i]);
|
||||
+
|
||||
if (ret_desc == 0) {
|
||||
for (i = 0; i < NVME_IDENTIFY_DATA_SIZE; i += len) {
|
||||
struct nvme_ns_id_desc *d = (void *) desc + i;
|
||||
@@ -620,8 +615,14 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
|
||||
switch (d->nidt) {
|
||||
case NVME_NIDT_EUI64:
|
||||
+ info->eui64 = g_malloc0 (d->nidl * 2 + 1);
|
||||
+ for (i = 0; i < d->nidl; i++)
|
||||
+ snprintf (info->eui64 + i * 2, 3, "%02x", d->nid[i]);
|
||||
+ break;
|
||||
case NVME_NIDT_NGUID:
|
||||
- /* already have these from nvme_identify_ns() */
|
||||
+ info->nguid = g_malloc0 (d->nidl * 2 + 1);
|
||||
+ for (i = 0; i < d->nidl; i++)
|
||||
+ snprintf (info->nguid + i * 2, 3, "%02x", d->nid[i]);
|
||||
break;
|
||||
case NVME_NIDT_UUID:
|
||||
uuid_unparse (d->nid, uuid_buf);
|
||||
@@ -633,6 +634,17 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+ if (info->nguid == NULL && ns_info.nguid[G_N_ELEMENTS (ns_info.nguid) - 1] > 0) {
|
||||
+ info->nguid = g_malloc0 (sizeof (ns_info.nguid) * 2 + 1);
|
||||
+ for (i = 0; i < G_N_ELEMENTS (ns_info.nguid); i++)
|
||||
+ snprintf (info->nguid + i * 2, 3, "%02x", ns_info.nguid[i]);
|
||||
+ }
|
||||
+ if (info->eui64 == NULL && ns_info.eui64[G_N_ELEMENTS (ns_info.eui64) - 1] > 0) {
|
||||
+ info->eui64 = g_malloc0 (sizeof (ns_info.eui64) * 2 + 1);
|
||||
+ for (i = 0; i < G_N_ELEMENTS (ns_info.eui64); i++)
|
||||
+ snprintf (info->eui64 + i * 2, 3, "%02x", ns_info.eui64[i]);
|
||||
+ }
|
||||
if (ret_ns_ind == 0) {
|
||||
if ((ns_info_ind.nsfeat & 1 << 4) == 1 << 4)
|
||||
info->features |= BD_NVME_NS_FEAT_ROTATIONAL;
|
||||
diff --git a/tests/nvme_test.py b/tests/nvme_test.py
|
||||
index f205e539..a1822be6 100644
|
||||
--- a/tests/nvme_test.py
|
||||
+++ b/tests/nvme_test.py
|
||||
@@ -74,7 +74,7 @@ class NVMeTestCase(NVMeTest):
|
||||
self.assertTrue (info.features & BlockDev.NVMENamespaceFeature.MULTIPATH_SHARED)
|
||||
self.assertFalse(info.features & BlockDev.NVMENamespaceFeature.FORMAT_PROGRESS)
|
||||
self.assertFalse(info.features & BlockDev.NVMENamespaceFeature.ROTATIONAL)
|
||||
- self.assertEqual(info.eui64, "0000000000000000")
|
||||
+ self.assertIsNone(info.eui64)
|
||||
self.assertEqual(info.format_progress_remaining, 0)
|
||||
self.assertEqual(len(info.lba_formats), 1)
|
||||
self.assertGreater(len(info.nguid), 0)
|
||||
--
|
||||
2.39.0
|
||||
|
||||
|
||||
From cdbb9a37a19d3f388910f68c4c384bafae8901ae Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||
Date: Wed, 11 Jan 2023 18:19:36 +0100
|
||||
Subject: [PATCH 4/5] nvme: Use libnvme-1.2's nvme_uuid_to_string()
|
||||
|
||||
This also bumps libnvme dependency to 1.2
|
||||
---
|
||||
configure.ac | 5 +----
|
||||
src/plugins/nvme/Makefile.am | 4 ++--
|
||||
src/plugins/nvme/nvme-error.c | 3 ---
|
||||
src/plugins/nvme/nvme-fabrics.c | 1 -
|
||||
src/plugins/nvme/nvme-info.c | 17 ++++++++++-------
|
||||
src/plugins/nvme/nvme-op.c | 1 -
|
||||
src/plugins/nvme/nvme.c | 1 -
|
||||
7 files changed, 13 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ec789c91..fbd70473 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -281,10 +281,7 @@ AS_IF([test "x$with_nvdimm" != "xno"],
|
||||
[])
|
||||
|
||||
AS_IF([test "x$with_nvme" != "xno"],
|
||||
- [LIBBLOCKDEV_PKG_CHECK_MODULES([NVME], [libnvme >= 1.0])
|
||||
- AS_IF([$PKG_CONFIG --atleast-version=1.1 libnvme],
|
||||
- [AC_DEFINE([HAVE_LIBNVME_1_1])], [])
|
||||
- ],
|
||||
+ [LIBBLOCKDEV_PKG_CHECK_MODULES([NVME], [libnvme >= 1.2])],
|
||||
[])
|
||||
|
||||
AS_IF([test "x$with_vdo" != "xno"],
|
||||
diff --git a/src/plugins/nvme/Makefile.am b/src/plugins/nvme/Makefile.am
|
||||
index b4a10ce0..a8a856d4 100644
|
||||
--- a/src/plugins/nvme/Makefile.am
|
||||
+++ b/src/plugins/nvme/Makefile.am
|
||||
@@ -2,8 +2,8 @@ AUTOMAKE_OPTIONS = subdir-objects
|
||||
|
||||
lib_LTLIBRARIES = libbd_nvme.la
|
||||
|
||||
-libbd_nvme_la_CFLAGS = $(GLIB_CFLAGS) $(GIO_CFLAGS) $(UUID_CFLAGS) $(NVME_CFLAGS) -Wall -Wextra -Werror
|
||||
-libbd_nvme_la_LIBADD = ${builddir}/../../utils/libbd_utils.la $(GLIB_LIBS) $(GIO_LIBS) $(UUID_LIBS) $(NVME_LIBS)
|
||||
+libbd_nvme_la_CFLAGS = $(GLIB_CFLAGS) $(GIO_CFLAGS) $(NVME_CFLAGS) -Wall -Wextra -Werror
|
||||
+libbd_nvme_la_LIBADD = ${builddir}/../../utils/libbd_utils.la $(GLIB_LIBS) $(GIO_LIBS) $(NVME_LIBS)
|
||||
libbd_nvme_la_LDFLAGS = -L${srcdir}/../../utils/ -version-info 2:0:0 -Wl,--no-undefined
|
||||
libbd_nvme_la_CPPFLAGS = -I${builddir}/../../../include/ -I${srcdir}/../ -I. -DPACKAGE_SYSCONF_DIR=\""$(sysconfdir)"\"
|
||||
|
||||
diff --git a/src/plugins/nvme/nvme-error.c b/src/plugins/nvme/nvme-error.c
|
||||
index 86f0d6a3..cb95a46d 100644
|
||||
--- a/src/plugins/nvme/nvme-error.c
|
||||
+++ b/src/plugins/nvme/nvme-error.c
|
||||
@@ -28,7 +28,6 @@
|
||||
#include <malloc.h>
|
||||
|
||||
#include <libnvme.h>
|
||||
-#include <uuid/uuid.h>
|
||||
|
||||
#include <blockdev/utils.h>
|
||||
#include <check_deps.h>
|
||||
@@ -123,7 +122,6 @@ void _nvme_fabrics_errno_to_gerror (int result, int _errno, GError **error)
|
||||
case ENVME_CONNECT_LOOKUP_SUBSYS:
|
||||
code = BD_NVME_ERROR_CONNECT;
|
||||
break;
|
||||
-#ifdef HAVE_LIBNVME_1_1
|
||||
case ENVME_CONNECT_ALREADY:
|
||||
code = BD_NVME_ERROR_CONNECT_ALREADY;
|
||||
break;
|
||||
@@ -139,7 +137,6 @@ void _nvme_fabrics_errno_to_gerror (int result, int _errno, GError **error)
|
||||
case ENVME_CONNECT_OPNOTSUPP:
|
||||
code = BD_NVME_ERROR_CONNECT_OPNOTSUPP;
|
||||
break;
|
||||
-#endif
|
||||
default:
|
||||
code = BD_NVME_ERROR_CONNECT;
|
||||
}
|
||||
diff --git a/src/plugins/nvme/nvme-fabrics.c b/src/plugins/nvme/nvme-fabrics.c
|
||||
index 20ed57f5..bba7392d 100644
|
||||
--- a/src/plugins/nvme/nvme-fabrics.c
|
||||
+++ b/src/plugins/nvme/nvme-fabrics.c
|
||||
@@ -30,7 +30,6 @@
|
||||
#include <glib/gstdio.h>
|
||||
|
||||
#include <libnvme.h>
|
||||
-#include <uuid/uuid.h>
|
||||
|
||||
#include <blockdev/utils.h>
|
||||
#include <check_deps.h>
|
||||
diff --git a/src/plugins/nvme/nvme-info.c b/src/plugins/nvme/nvme-info.c
|
||||
index ac189abe..18719d51 100644
|
||||
--- a/src/plugins/nvme/nvme-info.c
|
||||
+++ b/src/plugins/nvme/nvme-info.c
|
||||
@@ -28,7 +28,6 @@
|
||||
#include <malloc.h>
|
||||
|
||||
#include <libnvme.h>
|
||||
-#include <uuid/uuid.h>
|
||||
|
||||
#include <blockdev/utils.h>
|
||||
#include <check_deps.h>
|
||||
@@ -408,6 +407,14 @@ static gchar *decode_nvme_rev (guint32 ver) {
|
||||
return g_strdup_printf ("%u.%u.%u", mjr, mnr, ter);
|
||||
}
|
||||
|
||||
+static gchar *_uuid_to_str (unsigned char uuid[NVME_UUID_LEN]) {
|
||||
+ gchar uuid_buf[NVME_UUID_LEN_STRING] = ZERO_INIT;
|
||||
+
|
||||
+ if (nvme_uuid_to_string (uuid, uuid_buf) == 0)
|
||||
+ return g_strdup (uuid_buf);
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* bd_nvme_get_controller_info:
|
||||
* @device: a NVMe controller device (e.g. `/dev/nvme0`)
|
||||
@@ -461,9 +468,7 @@ BDNVMEControllerInfo * bd_nvme_get_controller_info (const gchar *device, GError
|
||||
info->pci_vendor_id = GUINT16_FROM_LE (ctrl_id.vid);
|
||||
info->pci_subsys_vendor_id = GUINT16_FROM_LE (ctrl_id.ssvid);
|
||||
info->ctrl_id = GUINT16_FROM_LE (ctrl_id.cntlid);
|
||||
- /* TODO: decode fguid as 128-bit hex string? */
|
||||
- info->fguid = g_strdup_printf ("%-.*s", (int) sizeof (ctrl_id.fguid), ctrl_id.fguid);
|
||||
- g_strstrip (info->fguid);
|
||||
+ info->fguid = _uuid_to_str (ctrl_id.fguid);
|
||||
info->model_number = g_strndup (ctrl_id.mn, sizeof (ctrl_id.mn));
|
||||
g_strstrip (info->model_number);
|
||||
info->serial_number = g_strndup (ctrl_id.sn, sizeof (ctrl_id.sn));
|
||||
@@ -607,7 +612,6 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
if (ret_desc == 0) {
|
||||
for (i = 0; i < NVME_IDENTIFY_DATA_SIZE; i += len) {
|
||||
struct nvme_ns_id_desc *d = (void *) desc + i;
|
||||
- gchar uuid_buf[37] = ZERO_INIT;
|
||||
|
||||
if (!d->nidl)
|
||||
break;
|
||||
@@ -625,8 +629,7 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
snprintf (info->nguid + i * 2, 3, "%02x", d->nid[i]);
|
||||
break;
|
||||
case NVME_NIDT_UUID:
|
||||
- uuid_unparse (d->nid, uuid_buf);
|
||||
- info->uuid = g_strdup (uuid_buf);
|
||||
+ info->uuid = _uuid_to_str (d->nid);
|
||||
break;
|
||||
case NVME_NIDT_CSI:
|
||||
/* unused */
|
||||
diff --git a/src/plugins/nvme/nvme-op.c b/src/plugins/nvme/nvme-op.c
|
||||
index 4568c453..c9e92697 100644
|
||||
--- a/src/plugins/nvme/nvme-op.c
|
||||
+++ b/src/plugins/nvme/nvme-op.c
|
||||
@@ -29,7 +29,6 @@
|
||||
#include <linux/fs.h>
|
||||
|
||||
#include <libnvme.h>
|
||||
-#include <uuid/uuid.h>
|
||||
|
||||
#include <blockdev/utils.h>
|
||||
#include <check_deps.h>
|
||||
diff --git a/src/plugins/nvme/nvme.c b/src/plugins/nvme/nvme.c
|
||||
index 00f2f76e..4a32ac4e 100644
|
||||
--- a/src/plugins/nvme/nvme.c
|
||||
+++ b/src/plugins/nvme/nvme.c
|
||||
@@ -28,7 +28,6 @@
|
||||
#include <malloc.h>
|
||||
|
||||
#include <libnvme.h>
|
||||
-#include <uuid/uuid.h>
|
||||
|
||||
#include <blockdev/utils.h>
|
||||
#include <check_deps.h>
|
||||
--
|
||||
2.39.0
|
||||
|
||||
|
||||
From 64263599ec39b6b0f20d8e16c1169afcf66f5d9a Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||
Date: Thu, 12 Jan 2023 16:01:28 +0100
|
||||
Subject: [PATCH 5/5] nvme: Fix zeroed struct fields detection
|
||||
|
||||
As often stated in the NVMe specification, fields of features that
|
||||
are either not implemented or not valid are typically cleared to zero (0h).
|
||||
---
|
||||
src/plugins/nvme/nvme-info.c | 20 +++++++++++++++-----
|
||||
tests/nvme_test.py | 2 +-
|
||||
2 files changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/nvme/nvme-info.c b/src/plugins/nvme/nvme-info.c
|
||||
index 18719d51..85f94a32 100644
|
||||
--- a/src/plugins/nvme/nvme-info.c
|
||||
+++ b/src/plugins/nvme/nvme-info.c
|
||||
@@ -415,6 +415,15 @@ static gchar *_uuid_to_str (unsigned char uuid[NVME_UUID_LEN]) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static gboolean _nvme_a_is_zero (const __u8 a[], int len) {
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < len; i++)
|
||||
+ if (a[i] > 0)
|
||||
+ return FALSE;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* bd_nvme_get_controller_info:
|
||||
* @device: a NVMe controller device (e.g. `/dev/nvme0`)
|
||||
@@ -468,7 +477,8 @@ BDNVMEControllerInfo * bd_nvme_get_controller_info (const gchar *device, GError
|
||||
info->pci_vendor_id = GUINT16_FROM_LE (ctrl_id.vid);
|
||||
info->pci_subsys_vendor_id = GUINT16_FROM_LE (ctrl_id.ssvid);
|
||||
info->ctrl_id = GUINT16_FROM_LE (ctrl_id.cntlid);
|
||||
- info->fguid = _uuid_to_str (ctrl_id.fguid);
|
||||
+ if (!_nvme_a_is_zero (ctrl_id.fguid, sizeof (ctrl_id.fguid)))
|
||||
+ info->fguid = _uuid_to_str (ctrl_id.fguid);
|
||||
info->model_number = g_strndup (ctrl_id.mn, sizeof (ctrl_id.mn));
|
||||
g_strstrip (info->model_number);
|
||||
info->serial_number = g_strndup (ctrl_id.sn, sizeof (ctrl_id.sn));
|
||||
@@ -638,14 +648,14 @@ BDNVMENamespaceInfo *bd_nvme_get_namespace_info (const gchar *device, GError **e
|
||||
}
|
||||
}
|
||||
|
||||
- if (info->nguid == NULL && ns_info.nguid[G_N_ELEMENTS (ns_info.nguid) - 1] > 0) {
|
||||
+ if (info->nguid == NULL && !_nvme_a_is_zero (ns_info.nguid, sizeof (ns_info.nguid))) {
|
||||
info->nguid = g_malloc0 (sizeof (ns_info.nguid) * 2 + 1);
|
||||
- for (i = 0; i < G_N_ELEMENTS (ns_info.nguid); i++)
|
||||
+ for (i = 0; i < sizeof (ns_info.nguid); i++)
|
||||
snprintf (info->nguid + i * 2, 3, "%02x", ns_info.nguid[i]);
|
||||
}
|
||||
- if (info->eui64 == NULL && ns_info.eui64[G_N_ELEMENTS (ns_info.eui64) - 1] > 0) {
|
||||
+ if (info->eui64 == NULL && !_nvme_a_is_zero (ns_info.eui64, sizeof (ns_info.eui64))) {
|
||||
info->eui64 = g_malloc0 (sizeof (ns_info.eui64) * 2 + 1);
|
||||
- for (i = 0; i < G_N_ELEMENTS (ns_info.eui64); i++)
|
||||
+ for (i = 0; i < sizeof (ns_info.eui64); i++)
|
||||
snprintf (info->eui64 + i * 2, 3, "%02x", ns_info.eui64[i]);
|
||||
}
|
||||
if (ret_ns_ind == 0) {
|
||||
diff --git a/tests/nvme_test.py b/tests/nvme_test.py
|
||||
index a1822be6..a1494d9a 100644
|
||||
--- a/tests/nvme_test.py
|
||||
+++ b/tests/nvme_test.py
|
||||
@@ -116,7 +116,7 @@ class NVMeTestCase(NVMeTest):
|
||||
self.assertFalse(info.features & BlockDev.NVMEControllerFeature.ENCLOSURE)
|
||||
self.assertFalse(info.features & BlockDev.NVMEControllerFeature.MGMT_PCIE)
|
||||
self.assertFalse(info.features & BlockDev.NVMEControllerFeature.MGMT_SMBUS)
|
||||
- self.assertEqual(info.fguid, "")
|
||||
+ self.assertIsNone(info.fguid)
|
||||
self.assertEqual(info.pci_vendor_id, 0)
|
||||
self.assertEqual(info.pci_subsys_vendor_id, 0)
|
||||
self.assertIn("Linux", info.model_number)
|
||||
--
|
||||
2.39.0
|
||||
|
@ -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
|
||||
|
@ -20,6 +20,7 @@
|
||||
%define with_escrow 1
|
||||
%define with_dmraid 1
|
||||
%define with_tools 1
|
||||
%define with_nvme 1
|
||||
|
||||
# python2 is not available on RHEL > 7 and not needed on Fedora > 29
|
||||
%if 0%{?rhel} > 7 || 0%{?fedora} > 29 || %{with_python2} == 0
|
||||
@ -120,32 +121,25 @@
|
||||
%if %{with_gi} != 1
|
||||
%define gi_copts --disable-introspection
|
||||
%endif
|
||||
%if %{with_nvme} != 1
|
||||
%define nvme_copts --without-nvme
|
||||
%endif
|
||||
|
||||
%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}
|
||||
%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} %{?nvme_copts} %{?vdo_copts} %{?tools_copts} %{?gi_copts}
|
||||
|
||||
Name: libblockdev
|
||||
Version: 2.25
|
||||
Release: 14%{?dist}
|
||||
Version: 2.28
|
||||
Release: 4%{?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
|
||||
Patch3: 0003-NVMe-plugin-backport.patch
|
||||
Patch4: 0004-Fix-double-free-in-write_escrow_data_file.patch
|
||||
Patch5: 0005-nvme-Fix-namespace-identifiers.patch
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: glib2-devel
|
||||
@ -167,6 +161,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 +184,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 +241,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 +252,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 +262,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 +280,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 +297,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 +316,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 +330,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 +339,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 +354,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 +367,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 +379,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 +388,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 +401,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 +423,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 +446,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 +456,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 +469,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 +479,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 +492,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 +502,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
|
||||
@ -516,11 +511,34 @@ with the libblockdev-nvdimm plugin/library.
|
||||
%endif
|
||||
|
||||
|
||||
%if %{with_nvme}
|
||||
%package nvme
|
||||
BuildRequires: libnvme-devel
|
||||
BuildRequires: libuuid-devel
|
||||
Summary: The NVMe plugin for the libblockdev library
|
||||
Requires: %{name}-utils%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description nvme
|
||||
The libblockdev library plugin (and in the same time a standalone library)
|
||||
providing the functionality related to operations with NVMe devices.
|
||||
|
||||
%package nvme-devel
|
||||
Summary: Development files for the libblockdev-nvme plugin/library
|
||||
Requires: %{name}-nvme%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-utils-devel%{?_isa} = %{version}-%{release}
|
||||
Requires: glib2-devel
|
||||
|
||||
%description nvme-devel
|
||||
This package contains header files and pkg-config files needed for development
|
||||
with the libblockdev-nvme plugin/library.
|
||||
%endif
|
||||
|
||||
|
||||
%if %{with_part}
|
||||
%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 +549,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 +562,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 +572,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 +586,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 +606,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 +617,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 +633,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 +642,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
|
||||
@ -675,6 +694,10 @@ Requires: %{name}-mpath%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-nvdimm%{?_isa} = %{version}-%{release}
|
||||
%endif
|
||||
|
||||
%if %{with_nvme}
|
||||
Requires: %{name}-nvme%{?_isa} = %{version}-%{release}
|
||||
%endif
|
||||
|
||||
%if %{with_part}
|
||||
Requires: %{name}-part%{?_isa} = %{version}-%{release}
|
||||
%endif
|
||||
@ -703,16 +726,6 @@ A meta-package that pulls all the libblockdev plugins as dependencies.
|
||||
%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
|
||||
@ -767,6 +780,10 @@ find %{buildroot} -type f -name "*.la" | xargs %{__rm}
|
||||
%ldconfig_scriptlets nvdimm
|
||||
%endif
|
||||
|
||||
%if %{with_nvme}
|
||||
%ldconfig_scriptlets nvme
|
||||
%endif
|
||||
|
||||
%if %{with_part}
|
||||
%ldconfig_scriptlets part
|
||||
%endif
|
||||
@ -966,6 +983,17 @@ find %{buildroot} -type f -name "*.la" | xargs %{__rm}
|
||||
%endif
|
||||
|
||||
|
||||
%if %{with_nvme}
|
||||
%files nvme
|
||||
%{_libdir}/libbd_nvme.so.*
|
||||
|
||||
%files nvme-devel
|
||||
%{_libdir}/libbd_nvme.so
|
||||
%dir %{_includedir}/blockdev
|
||||
%{_includedir}/blockdev/nvme.h
|
||||
%endif
|
||||
|
||||
|
||||
%if %{with_part}
|
||||
%files part
|
||||
%{_libdir}/libbd_part.so.*
|
||||
@ -1016,6 +1044,28 @@ find %{buildroot} -type f -name "*.la" | xargs %{__rm}
|
||||
%files plugins-all
|
||||
|
||||
%changelog
|
||||
* Thu Jan 05 2023 Vojtech Trefny <vtrefny@redhat.com> - 2.28-4
|
||||
- nvme: Fix namespace identifiers
|
||||
Resolves: rhbz#2151535
|
||||
- nvme: Avoid sending NVME_IDENTIFY_CNS_NS_DESC_LIST on older devices
|
||||
Related: rhbz#2151535
|
||||
|
||||
* Mon Nov 28 2022 Vojtech Trefny <vtrefny@redhat.com> - 2.28-3
|
||||
- Fix double free in write_escrow_data_file
|
||||
Resolves: rhbz#2143226
|
||||
|
||||
* Thu Sep 22 2022 Vojtech Trefny <vtrefny@redhat.com> - 2.28-2
|
||||
- NVMe plugin backport
|
||||
Resolves: rhbz#2123338
|
||||
|
||||
* 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
|
||||
|
Loading…
Reference in New Issue
Block a user