Sync from SUSE:SLFO:Main lvm2 revision de46374ba92fe41112d7cd3dc27ad775
This commit is contained in:
parent
6090fc942c
commit
3e921a8a75
@ -1,96 +0,0 @@
|
|||||||
From ff0a8d7b6734c745e52652fc5e7dd3a0f2efb518 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Teigland <teigland@redhat.com>
|
|
||||||
Date: Tue, 8 Aug 2023 16:57:22 -0500
|
|
||||||
Subject: [PATCH 01/24] lvconvert swapmetadata: fix lvmlockd locking
|
|
||||||
|
|
||||||
The lockd lock needs to be freed for the LV that is becoming
|
|
||||||
the new metadata LV, and a new lockd lock needs to be created
|
|
||||||
for the old metadata LV that is becoming an independent LV.
|
|
||||||
Fixes b3e45219c2f4
|
|
||||||
---
|
|
||||||
tools/lvconvert.c | 45 +++++++++++++++++++++++++++++++++++++++++++--
|
|
||||||
1 file changed, 43 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index 0004422f2..49047abb0 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -2818,6 +2818,9 @@ static int _lvconvert_swap_pool_metadata(struct cmd_context *cmd,
|
|
||||||
struct lv_type *lvtype;
|
|
||||||
char meta_name[NAME_LEN];
|
|
||||||
const char *swap_name;
|
|
||||||
+ char *lockd_meta_args = NULL;
|
|
||||||
+ char *lockd_meta_name = NULL;
|
|
||||||
+ struct id lockd_meta_id;
|
|
||||||
uint32_t chunk_size;
|
|
||||||
int is_thinpool;
|
|
||||||
int is_cachepool;
|
|
||||||
@@ -2872,6 +2875,12 @@ static int _lvconvert_swap_pool_metadata(struct cmd_context *cmd,
|
|
||||||
if (!lockd_lv(cmd, lv, "ex", 0))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
+ /* If new metadata LV is inactive here, ensure it's not active elsewhere */
|
|
||||||
+ if (!lockd_lv(cmd, metadata_lv, "ex", 0)) {
|
|
||||||
+ log_error("New pool metadata LV %s cannot be locked.", display_lvname(metadata_lv));
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (!deactivate_lv(cmd, metadata_lv)) {
|
|
||||||
log_error("Aborting. Failed to deactivate %s.",
|
|
||||||
display_lvname(metadata_lv));
|
|
||||||
@@ -2883,8 +2892,22 @@ static int _lvconvert_swap_pool_metadata(struct cmd_context *cmd,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- metadata_lv->lock_args = NULL;
|
|
||||||
-
|
|
||||||
+ /*
|
|
||||||
+ * metadata_lv is currently an independent LV with its own lockd lock allocated.
|
|
||||||
+ * A pool metadata LV does not have its own lockd lock (only the pool LV does.)
|
|
||||||
+ * So, when metadata_lv is added to the thin pool, it's lock needs to be freed.
|
|
||||||
+ * Save info about the metadata_lv here that will be used to free the lock.
|
|
||||||
+ * The current pool metadata LV does not currently have its own lockd lock
|
|
||||||
+ * allocated, and once it becomes an independent LV it will need its own lock.
|
|
||||||
+ * (see setting prev_metadata_lv->lock_args below.)
|
|
||||||
+ */
|
|
||||||
+ if (vg_is_shared(vg) && metadata_lv->lock_args) {
|
|
||||||
+ lockd_meta_args = dm_pool_strdup(cmd->mem, metadata_lv->lock_args);
|
|
||||||
+ lockd_meta_name = dm_pool_strdup(cmd->mem, metadata_lv->name);
|
|
||||||
+ memcpy(&lockd_meta_id, &metadata_lv->lvid.id[1], sizeof(struct id));
|
|
||||||
+ /* Without lock_args, a lock will no longer be acquired for this LV. */
|
|
||||||
+ metadata_lv->lock_args = NULL;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
seg = first_seg(lv);
|
|
||||||
|
|
||||||
@@ -2950,9 +2973,27 @@ static int _lvconvert_swap_pool_metadata(struct cmd_context *cmd,
|
|
||||||
if (!attach_pool_metadata_lv(seg, metadata_lv))
|
|
||||||
return_0;
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * The previous metadata LV will now be an independent LV so it now
|
|
||||||
+ * requires a lockd lock. We could call lockd_init_lv_args() directly
|
|
||||||
+ * here, but reuse the existing code in vg_write() to be consistent
|
|
||||||
+ * with the way lvcreate allocates locks.
|
|
||||||
+ */
|
|
||||||
+ if (is_lockd_type(vg->lock_type)) {
|
|
||||||
+ if (!strcmp(vg->lock_type, "sanlock"))
|
|
||||||
+ prev_metadata_lv->lock_args = "pending";
|
|
||||||
+ else if (!strcmp(vg->lock_type, "dlm"))
|
|
||||||
+ prev_metadata_lv->lock_args = "dlm";
|
|
||||||
+ else if (!strcmp(vg->lock_type, "idm"))
|
|
||||||
+ prev_metadata_lv->lock_args = "idm";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (!vg_write(vg) || !vg_commit(vg))
|
|
||||||
return_0;
|
|
||||||
|
|
||||||
+ if (lockd_meta_name)
|
|
||||||
+ lockd_free_lv(cmd, vg, lockd_meta_name, &lockd_meta_id, lockd_meta_args);
|
|
||||||
+
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
|||||||
From b982d9ac56a709f1ffcdfb052029556bd8d56635 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Wed, 9 Aug 2023 13:02:13 +0200
|
|
||||||
Subject: [PATCH 02/24] lvconvert: fix ret values fro integrity remove
|
|
||||||
|
|
||||||
Fix return value from _lvconvert_integrity_remove()
|
|
||||||
as it is expected to match _add() and be 0/1.
|
|
||||||
|
|
||||||
Also add some missing log_error() messages.
|
|
||||||
---
|
|
||||||
tools/lvconvert.c | 42 +++++++++++++++++++++++-------------------
|
|
||||||
1 file changed, 23 insertions(+), 19 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index 49047abb0..c25c87db4 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -6410,24 +6410,26 @@ int lvconvert_to_cache_with_cachevol_cmd(struct cmd_context *cmd, int argc, char
|
|
||||||
|
|
||||||
static int _lvconvert_integrity_remove(struct cmd_context *cmd, struct logical_volume *lv)
|
|
||||||
{
|
|
||||||
- int ret = 0;
|
|
||||||
-
|
|
||||||
- if (!lv_is_integrity(lv) && !lv_is_raid(lv)) {
|
|
||||||
+ if (!lv_is_integrity(lv)) {
|
|
||||||
log_error("LV does not have integrity.");
|
|
||||||
- return ECMD_FAILED;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!lv_is_raid(lv)) {
|
|
||||||
+ log_error("Cannot remove integrity from non raid type LV %s.",
|
|
||||||
+ display_lvname(lv));
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ensure it's not active elsewhere. */
|
|
||||||
if (!lockd_lv(cmd, lv, "ex", 0))
|
|
||||||
- return_ECMD_FAILED;
|
|
||||||
+ return_0;
|
|
||||||
|
|
||||||
- if (lv_is_raid(lv))
|
|
||||||
- ret = lv_remove_integrity_from_raid(lv);
|
|
||||||
- if (!ret)
|
|
||||||
- return_ECMD_FAILED;
|
|
||||||
+ if (!lv_remove_integrity_from_raid(lv))
|
|
||||||
+ return_0;
|
|
||||||
|
|
||||||
log_print_unless_silent("Logical volume %s has removed integrity.", display_lvname(lv));
|
|
||||||
- return ECMD_PROCESSED;
|
|
||||||
+ return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int _lvconvert_integrity_add(struct cmd_context *cmd, struct logical_volume *lv,
|
|
||||||
@@ -6435,7 +6437,6 @@ static int _lvconvert_integrity_add(struct cmd_context *cmd, struct logical_volu
|
|
||||||
{
|
|
||||||
struct volume_group *vg = lv->vg;
|
|
||||||
struct dm_list *use_pvh;
|
|
||||||
- int ret = 0;
|
|
||||||
|
|
||||||
/* ensure it's not active elsewhere. */
|
|
||||||
if (!lockd_lv(cmd, lv, "ex", 0))
|
|
||||||
@@ -6453,9 +6454,13 @@ static int _lvconvert_integrity_add(struct cmd_context *cmd, struct logical_volu
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (lv_is_raid(lv))
|
|
||||||
- ret = lv_add_integrity_to_raid(lv, set, use_pvh, NULL);
|
|
||||||
- if (!ret)
|
|
||||||
+ if (!lv_is_raid(lv)) {
|
|
||||||
+ log_error("Cannot add integrity to non raid type LV %s.",
|
|
||||||
+ display_lvname(lv));
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!lv_add_integrity_to_raid(lv, set, use_pvh, NULL))
|
|
||||||
return_0;
|
|
||||||
|
|
||||||
log_print_unless_silent("Logical volume %s has added integrity.", display_lvname(lv));
|
|
||||||
@@ -6466,10 +6471,8 @@ static int _lvconvert_integrity_single(struct cmd_context *cmd,
|
|
||||||
struct logical_volume *lv,
|
|
||||||
struct processing_handle *handle)
|
|
||||||
{
|
|
||||||
- struct integrity_settings settings;
|
|
||||||
- int ret = 0;
|
|
||||||
-
|
|
||||||
- memset(&settings, 0, sizeof(settings));
|
|
||||||
+ struct integrity_settings settings = { 0 };
|
|
||||||
+ int ret;
|
|
||||||
|
|
||||||
if (!integrity_mode_set(arg_str_value(cmd, raidintegritymode_ARG, NULL), &settings))
|
|
||||||
return_ECMD_FAILED;
|
|
||||||
@@ -6483,7 +6486,8 @@ static int _lvconvert_integrity_single(struct cmd_context *cmd,
|
|
||||||
ret = _lvconvert_integrity_remove(cmd, lv);
|
|
||||||
|
|
||||||
if (!ret)
|
|
||||||
- return ECMD_FAILED;
|
|
||||||
+ return_ECMD_FAILED;
|
|
||||||
+
|
|
||||||
return ECMD_PROCESSED;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
From 5829b341ea6826d70772af941859359475976b40 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Tue, 15 Aug 2023 23:06:29 +0200
|
|
||||||
Subject: [PATCH 03/24] lvconvert: fix regresion from integrity check
|
|
||||||
|
|
||||||
Testing code sliped into commit and cause regression in testing for
|
|
||||||
a raid with integrity.
|
|
||||||
---
|
|
||||||
tools/lvconvert.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index c25c87db4..6d2abb2e7 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -6410,8 +6410,8 @@ int lvconvert_to_cache_with_cachevol_cmd(struct cmd_context *cmd, int argc, char
|
|
||||||
|
|
||||||
static int _lvconvert_integrity_remove(struct cmd_context *cmd, struct logical_volume *lv)
|
|
||||||
{
|
|
||||||
- if (!lv_is_integrity(lv)) {
|
|
||||||
- log_error("LV does not have integrity.");
|
|
||||||
+ if (!lv_is_integrity(lv) && !lv_is_raid(lv)) {
|
|
||||||
+ log_error("LV %s does not have integrity.", display_lvname(lv));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,103 +0,0 @@
|
|||||||
From 2cd58bb4c9ef063c5283daf0e618c2ed0c77eb89 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Wed, 16 Aug 2023 15:12:36 +0200
|
|
||||||
Subject: [PATCH 04/24] gcc: cleanup warnings
|
|
||||||
|
|
||||||
Correcting signess comparation.
|
|
||||||
Also use standalone /* fall through */ comment as that's
|
|
||||||
the only one supported by gcc to quiet warning.
|
|
||||||
---
|
|
||||||
daemons/cmirrord/local.c | 2 +-
|
|
||||||
lib/metadata/metadata.c | 2 +-
|
|
||||||
libdm/datastruct/bitset.c | 3 ++-
|
|
||||||
tools/lvconvert.c | 2 +-
|
|
||||||
tools/lvmcmdline.c | 6 +++---
|
|
||||||
5 files changed, 8 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/daemons/cmirrord/local.c b/daemons/cmirrord/local.c
|
|
||||||
index d0a25e105..27396ad98 100644
|
|
||||||
--- a/daemons/cmirrord/local.c
|
|
||||||
+++ b/daemons/cmirrord/local.c
|
|
||||||
@@ -266,7 +266,7 @@ static int do_local_work(void *data __attribute__((unused)))
|
|
||||||
RQ_TYPE(u_rq->request_type));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
- /* ELSE, fall through */
|
|
||||||
+ /* ELSE */ /* fall through */
|
|
||||||
case DM_ULOG_IS_CLEAN:
|
|
||||||
case DM_ULOG_FLUSH:
|
|
||||||
case DM_ULOG_MARK_REGION:
|
|
||||||
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
|
|
||||||
index 819c6fd9a..f56b5002d 100644
|
|
||||||
--- a/lib/metadata/metadata.c
|
|
||||||
+++ b/lib/metadata/metadata.c
|
|
||||||
@@ -1133,7 +1133,7 @@ uint32_t extents_from_percent_size(struct volume_group *vg, const struct dm_list
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
- /* fall through to use all PVs in VG like %FREE */
|
|
||||||
+ /* fall through */ /* to use all PVs in VG like %FREE */
|
|
||||||
case PERCENT_FREE:
|
|
||||||
if (!(extents = vg->free_count)) {
|
|
||||||
log_error("No free extents in Volume group %s.", vg->name);
|
|
||||||
diff --git a/libdm/datastruct/bitset.c b/libdm/datastruct/bitset.c
|
|
||||||
index 220ea2f26..25407f521 100644
|
|
||||||
--- a/libdm/datastruct/bitset.c
|
|
||||||
+++ b/libdm/datastruct/bitset.c
|
|
||||||
@@ -149,7 +149,8 @@ dm_bitset_t dm_bitset_parse_list(const char *str, struct dm_pool *mem,
|
|
||||||
size_t min_num_bits)
|
|
||||||
{
|
|
||||||
unsigned a, b;
|
|
||||||
- int c, old_c, totaldigits, ndigits, nmaskbits;
|
|
||||||
+ int c, old_c, totaldigits, ndigits;
|
|
||||||
+ size_t nmaskbits;
|
|
||||||
int at_start, in_range;
|
|
||||||
dm_bitset_t mask = NULL;
|
|
||||||
const char *start = str;
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index 6d2abb2e7..d98d34ce0 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -1352,7 +1352,7 @@ static int _lvconvert_raid(struct logical_volume *lv, struct lvconvert_params *l
|
|
||||||
else
|
|
||||||
image_count = lp->mirrors + 1;
|
|
||||||
|
|
||||||
- images_reduced = (image_count < lv_raid_image_count(lv));
|
|
||||||
+ images_reduced = (image_count < (int) lv_raid_image_count(lv));
|
|
||||||
|
|
||||||
if (image_count < 1) {
|
|
||||||
log_error("Unable to %s images by specified amount.",
|
|
||||||
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
|
|
||||||
index 57f9f2651..87f829f19 100644
|
|
||||||
--- a/tools/lvmcmdline.c
|
|
||||||
+++ b/tools/lvmcmdline.c
|
|
||||||
@@ -1456,7 +1456,7 @@ static int _command_optional_opt_matches(struct cmd_context *cmd, int ci, int oo
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val_bit_is_set(commands[ci].optional_opt_args[oo].def.val_bits, constnum_VAL)) {
|
|
||||||
- if (commands[ci].optional_opt_args[oo].def.num == arg_int_value(cmd, opt_enum, 0))
|
|
||||||
+ if (commands[ci].optional_opt_args[oo].def.num == arg_uint64_value(cmd, opt_enum, 0))
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1475,7 +1475,7 @@ static int _command_ignore_opt_matches(struct cmd_context *cmd, int ci, int io)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val_bit_is_set(commands[ci].ignore_opt_args[io].def.val_bits, constnum_VAL)) {
|
|
||||||
- if (commands[ci].ignore_opt_args[io].def.num == arg_int_value(cmd, opt_enum, 0))
|
|
||||||
+ if (commands[ci].ignore_opt_args[io].def.num == arg_uint64_value(cmd, opt_enum, 0))
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1519,7 +1519,7 @@ check_val:
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val_bit_is_set(commands[ci].required_opt_args[ro].def.val_bits, constnum_VAL)) {
|
|
||||||
- if (commands[ci].required_opt_args[ro].def.num == arg_int_value(cmd, opt_enum, 0))
|
|
||||||
+ if (commands[ci].required_opt_args[ro].def.num == arg_uint64_value(cmd, opt_enum, 0))
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,379 +0,0 @@
|
|||||||
From 76a4599500aef12442c8c24be8aacc89f6a27e68 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Teigland <teigland@redhat.com>
|
|
||||||
Date: Tue, 15 Aug 2023 09:53:39 -0500
|
|
||||||
Subject: [PATCH 05/24] lvmlockd: fix thick to thin lv conversion
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/locking/lvmlockd.c | 2 +
|
|
||||||
lib/metadata/metadata.c | 2 +
|
|
||||||
tools/lvconvert.c | 231 ++++++++++++++++++++++++----------------
|
|
||||||
3 files changed, 143 insertions(+), 92 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/locking/lvmlockd.c b/lib/locking/lvmlockd.c
|
|
||||||
index a8db25d7a..d44b7333a 100644
|
|
||||||
--- a/lib/locking/lvmlockd.c
|
|
||||||
+++ b/lib/locking/lvmlockd.c
|
|
||||||
@@ -2908,6 +2908,8 @@ static int _free_lv(struct cmd_context *cmd, struct volume_group *vg,
|
|
||||||
if (!id_write_format(lv_id, lv_uuid, sizeof(lv_uuid)))
|
|
||||||
return_0;
|
|
||||||
|
|
||||||
+ log_debug("lockd free LV %s/%s %s lock_args %s", vg->name, lv_name, lv_uuid, lock_args ?: "none");
|
|
||||||
+
|
|
||||||
reply = _lockd_send("free_lv",
|
|
||||||
"pid = " FMTd64, (int64_t) getpid(),
|
|
||||||
"vg_name = %s", vg->name,
|
|
||||||
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
|
|
||||||
index f56b5002d..f8a4f6279 100644
|
|
||||||
--- a/lib/metadata/metadata.c
|
|
||||||
+++ b/lib/metadata/metadata.c
|
|
||||||
@@ -2924,6 +2924,8 @@ int vg_write(struct volume_group *vg)
|
|
||||||
vgid[ID_LEN] = 0;
|
|
||||||
memcpy(vgid, &vg->id.uuid, ID_LEN);
|
|
||||||
|
|
||||||
+ log_debug("Writing metadata for VG %s.", vg->name);
|
|
||||||
+
|
|
||||||
if (vg_is_shared(vg)) {
|
|
||||||
dm_list_iterate_items(lvl, &vg->lvs) {
|
|
||||||
if (lvl->lv->lock_args && !strcmp(lvl->lv->lock_args, "pending")) {
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index d98d34ce0..7c9540712 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -3007,9 +3007,22 @@ static struct logical_volume *_lvconvert_insert_thin_layer(struct logical_volume
|
|
||||||
if (!(thin_segtype = get_segtype_from_string(vg->cmd, SEG_TYPE_NAME_THIN)))
|
|
||||||
return_NULL;
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * input lv foo (often linear)
|
|
||||||
+ * creates new lv foo_tpoolN (no seg)
|
|
||||||
+ * segment from foo is moved to foo_tpoolN
|
|
||||||
+ * new linear segment is created for foo that maps to foo_tpoolN
|
|
||||||
+ * returns foo_tpoolN
|
|
||||||
+ *
|
|
||||||
+ * In spite of the "pool" variable naming, pool_lv foo_tpoolN is *not*
|
|
||||||
+ * yet a pool type, but rather is whatever type the input lv was.
|
|
||||||
+ */
|
|
||||||
if (!(pool_lv = insert_layer_for_lv(vg->cmd, lv, 0, "_tpool%d")))
|
|
||||||
return_NULL;
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * change lv foo to a thin LV using foo_tpoolN
|
|
||||||
+ */
|
|
||||||
lv->status |= THIN_VOLUME | VIRTUAL;
|
|
||||||
lv_set_visible(pool_lv);
|
|
||||||
|
|
||||||
@@ -3079,9 +3092,12 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
const char *pool_metadata_name; /* user-specified lv name */
|
|
||||||
char converted_names[3*NAME_LEN]; /* preserve names of converted lv */
|
|
||||||
struct segment_type *pool_segtype; /* thinpool or cachepool */
|
|
||||||
+ const char *str_seg_type = to_cachepool ? SEG_TYPE_NAME_CACHE_POOL : SEG_TYPE_NAME_THIN_POOL;
|
|
||||||
struct lv_segment *seg;
|
|
||||||
unsigned int target_attr = ~0;
|
|
||||||
unsigned int activate_pool;
|
|
||||||
+ unsigned int lock_active_pool;
|
|
||||||
+ unsigned int lock_active_pool_done = 0;
|
|
||||||
unsigned int zero_metadata;
|
|
||||||
uint64_t meta_size;
|
|
||||||
uint32_t meta_extents;
|
|
||||||
@@ -3096,16 +3112,18 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
thin_discards_t discards;
|
|
||||||
thin_zero_t zero_new_blocks;
|
|
||||||
int error_when_full;
|
|
||||||
- int r = 0;
|
|
||||||
+ int end_error = 0;
|
|
||||||
+ int is_active;
|
|
||||||
|
|
||||||
/* for handling lvmlockd cases */
|
|
||||||
char *lockd_data_args = NULL;
|
|
||||||
char *lockd_meta_args = NULL;
|
|
||||||
char *lockd_data_name = NULL;
|
|
||||||
char *lockd_meta_name = NULL;
|
|
||||||
+ uint32_t lockd_data_flags = 0;
|
|
||||||
+ uint32_t lockd_meta_flags = 0;
|
|
||||||
struct id lockd_data_id;
|
|
||||||
struct id lockd_meta_id;
|
|
||||||
- const char *str_seg_type = to_cachepool ? SEG_TYPE_NAME_CACHE_POOL : SEG_TYPE_NAME_THIN_POOL;
|
|
||||||
|
|
||||||
if (!_raid_split_image_conversion(lv))
|
|
||||||
return_0;
|
|
||||||
@@ -3124,8 +3142,10 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* Allow to have only thinpool active and restore it's active state. */
|
|
||||||
- activate_pool = to_thinpool && lv_is_active(lv);
|
|
||||||
+ is_active = lv_is_active(lv);
|
|
||||||
+
|
|
||||||
+ activate_pool = to_thinpool && is_active;
|
|
||||||
+ lock_active_pool = (to_thinpool || to_thin) && is_active;
|
|
||||||
|
|
||||||
/* Wipe metadata_lv by default, but allow skipping this for cache pools. */
|
|
||||||
zero_metadata = (to_cachepool) ? arg_int_value(cmd, zero_ARG, 1) : 1;
|
|
||||||
@@ -3356,20 +3376,11 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * When the LV referenced by the original function arg "lv"
|
|
||||||
- * is layered
|
|
||||||
- *
|
|
||||||
- * pool_name pool name taken from lv arg
|
|
||||||
- * data_name sub lv name, generated
|
|
||||||
- * meta_name sub lv name, generated
|
|
||||||
- *
|
|
||||||
- * pool_lv new lv for pool object, created here
|
|
||||||
- * data_lv sub lv, was lv arg, now renamed
|
|
||||||
- * metadata_lv sub lv, existing or created here
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
if (to_thin) {
|
|
||||||
+ /*
|
|
||||||
+ * pool_lv is not yet a pool, when returned, pool_lv contains
|
|
||||||
+ * the segment that belonged to "lv".
|
|
||||||
+ */
|
|
||||||
if (!(pool_lv = _lvconvert_insert_thin_layer(lv)))
|
|
||||||
goto_bad;
|
|
||||||
} else {
|
|
||||||
@@ -3383,6 +3394,17 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
pool_lv = lv;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * starts with pool_lv foo (not a pool yet)
|
|
||||||
+ * creates new data_lv foo_tdata
|
|
||||||
+ * segment from pool_lv foo is moved to data_lv foo_tdata
|
|
||||||
+ * pool_lv foo linear segment is created that maps to foo_tdata
|
|
||||||
+ * returns data_lv foo_tdata
|
|
||||||
+ *
|
|
||||||
+ * (In the to_thin case, the segment from the original lv is first
|
|
||||||
+ * moved to pool_lv by _lvconvert_insert_thin_layer, and now is
|
|
||||||
+ * moved to data_lv.)
|
|
||||||
+ */
|
|
||||||
if (!(data_lv = insert_layer_for_lv(cmd, pool_lv, 0,
|
|
||||||
(to_cachepool ? "_cdata" : "_tdata"))))
|
|
||||||
goto_bad;
|
|
||||||
@@ -3390,33 +3412,15 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
data_lv->status |= (to_cachepool) ? CACHE_POOL_DATA : THIN_POOL_DATA;
|
|
||||||
data_lv->status |= LVM_WRITE; /* Pool data LV is writable */
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * pool_lv now becomes a pool type.
|
|
||||||
+ * FIXME: change variable naming to avoid this confusion.
|
|
||||||
+ */
|
|
||||||
pool_lv->status |= (to_cachepool) ? CACHE_POOL : THIN_POOL;
|
|
||||||
|
|
||||||
seg = first_seg(pool_lv);
|
|
||||||
seg->segtype = pool_segtype;
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * Create a new lock for a thin pool LV. A cache pool LV has no lock.
|
|
||||||
- * Locks are removed from existing LVs that are being converted to
|
|
||||||
- * data and meta LVs (they are unlocked and deleted below.)
|
|
||||||
- */
|
|
||||||
- if (vg_is_shared(vg)) {
|
|
||||||
- lv->lock_args = NULL;
|
|
||||||
- pool_lv->lock_args = NULL;
|
|
||||||
- data_lv->lock_args = NULL;
|
|
||||||
- metadata_lv->lock_args = NULL;
|
|
||||||
-
|
|
||||||
- if (!to_cachepool) {
|
|
||||||
- if (!strcmp(vg->lock_type, "sanlock"))
|
|
||||||
- pool_lv->lock_args = "pending";
|
|
||||||
- else if (!strcmp(vg->lock_type, "dlm"))
|
|
||||||
- pool_lv->lock_args = "dlm";
|
|
||||||
- else if (!strcmp(vg->lock_type, "idm"))
|
|
||||||
- pool_lv->lock_args = "idm";
|
|
||||||
- /* The lock_args will be set in vg_write(). */
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
/* Apply settings to the new pool seg */
|
|
||||||
if (to_cachepool) {
|
|
||||||
if (!cache_set_params(seg, chunk_size, cache_metadata_format, cache_mode, policy_name, policy_settings))
|
|
||||||
@@ -3453,87 +3457,130 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
if (!_lvconvert_attach_metadata_to_pool(seg, metadata_lv))
|
|
||||||
goto_bad;
|
|
||||||
|
|
||||||
- if (!handle_pool_metadata_spare(vg,
|
|
||||||
- metadata_lv->le_count,
|
|
||||||
- use_pvh, pool_metadata_spare))
|
|
||||||
- goto_bad;
|
|
||||||
+ /*
|
|
||||||
+ * Create a new lock for a thin pool LV. A cache pool LV has no lock.
|
|
||||||
+ * Locks are removed from existing LVs that are being converted to
|
|
||||||
+ * data and meta LVs (they are unlocked and deleted below.)
|
|
||||||
+ * Acquire the new thin pool lock if the pool will remain active at
|
|
||||||
+ * the end of the command.
|
|
||||||
+ */
|
|
||||||
+ if (vg_is_shared(vg)) {
|
|
||||||
+ lv->lock_args = NULL;
|
|
||||||
+ pool_lv->lock_args = NULL;
|
|
||||||
+ data_lv->lock_args = NULL;
|
|
||||||
+ metadata_lv->lock_args = NULL;
|
|
||||||
|
|
||||||
- if (to_thin) {
|
|
||||||
- if (!lockd_lv(cmd, pool_lv, "ex", LDLV_PERSISTENT)) {
|
|
||||||
- log_error("Failed to lock pool LV %s.", display_lvname(pool_lv));
|
|
||||||
- goto out;
|
|
||||||
+ if (!to_cachepool) {
|
|
||||||
+ if (!strcmp(vg->lock_type, "sanlock")) {
|
|
||||||
+ if (!lockd_init_lv_args(cmd, vg, pool_lv,
|
|
||||||
+ vg->lock_type, &pool_lv->lock_args)) {
|
|
||||||
+ log_error("Cannot allocate lock for new pool LV.");
|
|
||||||
+ goto_bad;
|
|
||||||
+ }
|
|
||||||
+ pool_lv->new_lock_args = 1; /* tells vg_revert to lockd_free_lv */
|
|
||||||
+ } else if (!strcmp(vg->lock_type, "dlm")) {
|
|
||||||
+ pool_lv->lock_args = "dlm";
|
|
||||||
+ } else if (!strcmp(vg->lock_type, "idm")) {
|
|
||||||
+ pool_lv->lock_args = "idm";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (lock_active_pool) {
|
|
||||||
+ if (!lockd_lv(cmd, pool_lv, "ex", LDLV_PERSISTENT)) {
|
|
||||||
+ log_error("Failed to lock new pool LV %s.", display_lvname(pool_lv));
|
|
||||||
+ goto_bad;
|
|
||||||
+ }
|
|
||||||
+ lock_active_pool_done = 1;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (to_thin) {
|
|
||||||
if (!lv_update_and_reload(lv))
|
|
||||||
goto_bad;
|
|
||||||
} else {
|
|
||||||
if (!vg_write(vg) || !vg_commit(vg))
|
|
||||||
goto_bad;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (activate_pool) {
|
|
||||||
- if (!lockd_lv(cmd, pool_lv, "ex", LDLV_PERSISTENT)) {
|
|
||||||
- log_error("Failed to lock pool LV %s.", display_lvname(pool_lv));
|
|
||||||
- goto out;
|
|
||||||
- }
|
|
||||||
+ /*
|
|
||||||
+ * The main conversion is successfully committed. If any subsequent
|
|
||||||
+ * steps fail (creating spare, activating, unlocking), we do not
|
|
||||||
+ * currently have the ability to undo the changes committed up to this
|
|
||||||
+ * point. Failures in the remaining steps can print an error and cause
|
|
||||||
+ * the command to exit with an error, but no partial revert of the
|
|
||||||
+ * completed steps is attempted.
|
|
||||||
+ */
|
|
||||||
+ log_print_unless_silent("Converted %s to %s %s.", converted_names,
|
|
||||||
+ (to_cachepool) ? "cache" : "thin",
|
|
||||||
+ (to_thin) ? "volume" : "pool");
|
|
||||||
|
|
||||||
- if (!activate_lv(cmd, pool_lv)) {
|
|
||||||
- log_error("Failed to activate pool logical volume %s.",
|
|
||||||
- display_lvname(pool_lv));
|
|
||||||
-
|
|
||||||
- /* Deactivate subvolumes */
|
|
||||||
- if (!deactivate_lv(cmd, seg_lv(seg, 0)))
|
|
||||||
- log_error("Failed to deactivate pool data logical volume %s.",
|
|
||||||
- display_lvname(seg_lv(seg, 0)));
|
|
||||||
- if (!deactivate_lv(cmd, seg->metadata_lv))
|
|
||||||
- log_error("Failed to deactivate pool metadata logical volume %s.",
|
|
||||||
- display_lvname(seg->metadata_lv));
|
|
||||||
- goto out;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
+ /*
|
|
||||||
+ * FIXME handle_pool_metadata_spare() calls vg_write() vg_commit()
|
|
||||||
+ * after creating a new lvolN, but then lvolN is renamed and hidden as
|
|
||||||
+ * [lvolN_pmspare] without any further vg_write(). So, there's an extra
|
|
||||||
+ * vg_write and vg_commit required here to cover the renaming/hiding.
|
|
||||||
+ */
|
|
||||||
+ if (!handle_pool_metadata_spare(vg, metadata_lv->le_count, use_pvh, pool_metadata_spare) ||
|
|
||||||
+ !vg_write(vg) || !vg_commit(vg)) {
|
|
||||||
+ log_error("Failed to set up spare metadata LV for thin pool.");
|
|
||||||
+ end_error = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- r = 1;
|
|
||||||
-
|
|
||||||
-out:
|
|
||||||
- if (r)
|
|
||||||
- log_print_unless_silent("Converted %s to %s %s.",
|
|
||||||
- converted_names, (to_cachepool) ? "cache" : "thin",
|
|
||||||
- (to_thin) ? "volume" : "pool");
|
|
||||||
+ if (activate_pool && !activate_lv(cmd, pool_lv)) {
|
|
||||||
+ log_error("Failed to activate pool logical volume %s.", display_lvname(pool_lv));
|
|
||||||
+ end_error = 1;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Unlock and free the locks from existing LVs that became pool data
|
|
||||||
* and meta LVs.
|
|
||||||
*/
|
|
||||||
if (lockd_data_name) {
|
|
||||||
- if (!lockd_lv_name(cmd, vg, lockd_data_name, &lockd_data_id, lockd_data_args, "un", LDLV_PERSISTENT))
|
|
||||||
+ if (!lockd_lv_name(cmd, vg, lockd_data_name, &lockd_data_id, lockd_data_args, "un", lockd_data_flags)) {
|
|
||||||
log_error("Failed to unlock pool data LV %s/%s", vg->name, lockd_data_name);
|
|
||||||
- lockd_free_lv(cmd, vg, lockd_data_name, &lockd_data_id, lockd_data_args);
|
|
||||||
+ end_error = 1;
|
|
||||||
+ }
|
|
||||||
+ if (!lockd_free_lv(cmd, vg, lockd_data_name, &lockd_data_id, lockd_data_args)) {
|
|
||||||
+ log_error("Failed to free lock for pool data LV %s/%s", vg->name, lockd_data_name);
|
|
||||||
+ end_error = 1;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
-
|
|
||||||
if (lockd_meta_name) {
|
|
||||||
- if (!lockd_lv_name(cmd, vg, lockd_meta_name, &lockd_meta_id, lockd_meta_args, "un", LDLV_PERSISTENT))
|
|
||||||
+ if (!lockd_lv_name(cmd, vg, lockd_meta_name, &lockd_meta_id, lockd_meta_args, "un", lockd_meta_flags)) {
|
|
||||||
log_error("Failed to unlock pool metadata LV %s/%s", vg->name, lockd_meta_name);
|
|
||||||
- lockd_free_lv(cmd, vg, lockd_meta_name, &lockd_meta_id, lockd_meta_args);
|
|
||||||
+ end_error = 1;
|
|
||||||
+ }
|
|
||||||
+ if (!lockd_free_lv(cmd, vg, lockd_meta_name, &lockd_meta_id, lockd_meta_args)) {
|
|
||||||
+ log_error("Failed to free lock for pool metadata LV %s/%s", vg->name, lockd_meta_name);
|
|
||||||
+ end_error = 1;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
-bad:
|
|
||||||
+
|
|
||||||
if (policy_settings)
|
|
||||||
dm_config_destroy(policy_settings);
|
|
||||||
|
|
||||||
- return r;
|
|
||||||
-#if 0
|
|
||||||
-revert_new_lv:
|
|
||||||
- /* TBD */
|
|
||||||
- if (!pool_metadata_lv_name) {
|
|
||||||
- if (!deactivate_lv(cmd, metadata_lv)) {
|
|
||||||
- log_error("Failed to deactivate metadata lv.");
|
|
||||||
- return 0;
|
|
||||||
- }
|
|
||||||
- if (!lv_remove(metadata_lv) || !vg_write(vg) || !vg_commit(vg))
|
|
||||||
- log_error("Manual intervention may be required to remove "
|
|
||||||
- "abandoned LV(s) before retrying.");
|
|
||||||
+ if (end_error) {
|
|
||||||
+ log_error("Manual intervention may be required to handle reported errors.");
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ return 1;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Error exit path for failures that occur before the main conversion
|
|
||||||
+ * is committed. Failures that occur after the main conversion is
|
|
||||||
+ * committed should not exit here. There is some cleanup missing here.
|
|
||||||
+ */
|
|
||||||
+bad:
|
|
||||||
+ if (lock_active_pool_done)
|
|
||||||
+ lockd_lv(cmd, pool_lv, "un", LDLV_PERSISTENT);
|
|
||||||
+ if (pool_lv && pool_lv->lock_args && pool_lv->new_lock_args)
|
|
||||||
+ lockd_free_lv(cmd, vg, pool_lv->name, &pool_lv->lvid.id[1], pool_lv->lock_args);
|
|
||||||
+
|
|
||||||
+ if (policy_settings)
|
|
||||||
+ dm_config_destroy(policy_settings);
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
-#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static int _cache_vol_attach(struct cmd_context *cmd,
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
|||||||
From ae13074a0a6ea7997cdb370cdd2185801646b2c5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Teigland <teigland@redhat.com>
|
|
||||||
Date: Wed, 16 Aug 2023 13:24:36 -0500
|
|
||||||
Subject: [PATCH 06/24] lvmlockd: let lockd_init_lv_args set lock_args
|
|
||||||
|
|
||||||
Set the lock_args string in addition to doing initialization.
|
|
||||||
lvconvert calls lockd_init_lv_args() directly, skipping
|
|
||||||
the normal lockd_init_lv() which usually sets lock_args.
|
|
||||||
---
|
|
||||||
lib/locking/lvmlockd.c | 9 +++++++--
|
|
||||||
tools/lvconvert.c | 15 +++------------
|
|
||||||
2 files changed, 10 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/locking/lvmlockd.c b/lib/locking/lvmlockd.c
|
|
||||||
index d44b7333a..627aa2625 100644
|
|
||||||
--- a/lib/locking/lvmlockd.c
|
|
||||||
+++ b/lib/locking/lvmlockd.c
|
|
||||||
@@ -2938,8 +2938,13 @@ int lockd_init_lv_args(struct cmd_context *cmd, struct volume_group *vg,
|
|
||||||
struct logical_volume *lv,
|
|
||||||
const char *lock_type, const char **lock_args)
|
|
||||||
{
|
|
||||||
- /* sanlock is the only lock type that sets per-LV lock_args. */
|
|
||||||
- if (!strcmp(lock_type, "sanlock"))
|
|
||||||
+ if (!lock_type)
|
|
||||||
+ return 1;
|
|
||||||
+ if (!strcmp(lock_type, "dlm"))
|
|
||||||
+ *lock_args = "dlm";
|
|
||||||
+ else if (!strcmp(lock_type, "idm"))
|
|
||||||
+ *lock_args = "idm";
|
|
||||||
+ else if (!strcmp(lock_type, "sanlock"))
|
|
||||||
return _init_lv_sanlock(cmd, vg, lv->name, &lv->lvid.id[1], lock_args);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index 7c9540712..40e7a6871 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -3471,19 +3471,10 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
metadata_lv->lock_args = NULL;
|
|
||||||
|
|
||||||
if (!to_cachepool) {
|
|
||||||
- if (!strcmp(vg->lock_type, "sanlock")) {
|
|
||||||
- if (!lockd_init_lv_args(cmd, vg, pool_lv,
|
|
||||||
- vg->lock_type, &pool_lv->lock_args)) {
|
|
||||||
- log_error("Cannot allocate lock for new pool LV.");
|
|
||||||
- goto_bad;
|
|
||||||
- }
|
|
||||||
- pool_lv->new_lock_args = 1; /* tells vg_revert to lockd_free_lv */
|
|
||||||
- } else if (!strcmp(vg->lock_type, "dlm")) {
|
|
||||||
- pool_lv->lock_args = "dlm";
|
|
||||||
- } else if (!strcmp(vg->lock_type, "idm")) {
|
|
||||||
- pool_lv->lock_args = "idm";
|
|
||||||
+ if (!lockd_init_lv_args(cmd, vg, pool_lv, vg->lock_type, &pool_lv->lock_args)) {
|
|
||||||
+ log_error("Cannot allocate lock for new pool LV.");
|
|
||||||
+ goto_bad;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
if (lock_active_pool) {
|
|
||||||
if (!lockd_lv(cmd, pool_lv, "ex", LDLV_PERSISTENT)) {
|
|
||||||
log_error("Failed to lock new pool LV %s.", display_lvname(pool_lv));
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,97 +0,0 @@
|
|||||||
From 3e92798473a04bec26a91632e1436aa415c2bb3c Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Teigland <teigland@redhat.com>
|
|
||||||
Date: Wed, 16 Aug 2023 15:00:47 -0500
|
|
||||||
Subject: [PATCH 07/24] lvmlockd: fix lvconvert to thin-pool
|
|
||||||
|
|
||||||
---
|
|
||||||
tools/lvconvert.c | 37 ++++++++++++++++++++-----------------
|
|
||||||
1 file changed, 20 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index 40e7a6871..7d5057254 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -3096,7 +3096,6 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
struct lv_segment *seg;
|
|
||||||
unsigned int target_attr = ~0;
|
|
||||||
unsigned int activate_pool;
|
|
||||||
- unsigned int lock_active_pool;
|
|
||||||
unsigned int lock_active_pool_done = 0;
|
|
||||||
unsigned int zero_metadata;
|
|
||||||
uint64_t meta_size;
|
|
||||||
@@ -3145,12 +3144,10 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
is_active = lv_is_active(lv);
|
|
||||||
|
|
||||||
activate_pool = to_thinpool && is_active;
|
|
||||||
- lock_active_pool = (to_thinpool || to_thin) && is_active;
|
|
||||||
|
|
||||||
/* Wipe metadata_lv by default, but allow skipping this for cache pools. */
|
|
||||||
zero_metadata = (to_cachepool) ? arg_int_value(cmd, zero_ARG, 1) : 1;
|
|
||||||
|
|
||||||
- /* An existing LV needs to have its lock freed once it becomes a data LV. */
|
|
||||||
if (vg_is_shared(vg) && lv->lock_args) {
|
|
||||||
lockd_data_args = dm_pool_strdup(cmd->mem, lv->lock_args);
|
|
||||||
lockd_data_name = dm_pool_strdup(cmd->mem, lv->name);
|
|
||||||
@@ -3458,11 +3455,11 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
goto_bad;
|
|
||||||
|
|
||||||
/*
|
|
||||||
- * Create a new lock for a thin pool LV. A cache pool LV has no lock.
|
|
||||||
- * Locks are removed from existing LVs that are being converted to
|
|
||||||
- * data and meta LVs (they are unlocked and deleted below.)
|
|
||||||
- * Acquire the new thin pool lock if the pool will remain active at
|
|
||||||
- * the end of the command.
|
|
||||||
+ * If the input LV is being converted to a thin pool, the input LV lock
|
|
||||||
+ * is used for the thin pool LV. If the input LV is being converted to
|
|
||||||
+ * a thin LV, a new lock is created for the thin pool and the lock from
|
|
||||||
+ * the input LV is freed. A cache pool LV has no lock, so the lock for
|
|
||||||
+ * the input LV is freed.
|
|
||||||
*/
|
|
||||||
if (vg_is_shared(vg)) {
|
|
||||||
lv->lock_args = NULL;
|
|
||||||
@@ -3470,18 +3467,25 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
data_lv->lock_args = NULL;
|
|
||||||
metadata_lv->lock_args = NULL;
|
|
||||||
|
|
||||||
- if (!to_cachepool) {
|
|
||||||
+ if (to_thin) {
|
|
||||||
if (!lockd_init_lv_args(cmd, vg, pool_lv, vg->lock_type, &pool_lv->lock_args)) {
|
|
||||||
log_error("Cannot allocate lock for new pool LV.");
|
|
||||||
goto_bad;
|
|
||||||
}
|
|
||||||
- if (lock_active_pool) {
|
|
||||||
- if (!lockd_lv(cmd, pool_lv, "ex", LDLV_PERSISTENT)) {
|
|
||||||
- log_error("Failed to lock new pool LV %s.", display_lvname(pool_lv));
|
|
||||||
- goto_bad;
|
|
||||||
- }
|
|
||||||
- lock_active_pool_done = 1;
|
|
||||||
+ } else if (to_thinpool) {
|
|
||||||
+ pool_lv->lock_args = lockd_data_args;
|
|
||||||
+ /* Don't free this lock below. */
|
|
||||||
+ lockd_data_args = NULL;
|
|
||||||
+ lockd_data_name = NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Acquire the thin pool lock if the pool will remain active. */
|
|
||||||
+ if ((to_thin || to_thinpool) && is_active) {
|
|
||||||
+ if (!lockd_lv(cmd, pool_lv, "ex", LDLV_PERSISTENT)) {
|
|
||||||
+ log_error("Failed to lock new pool LV %s.", display_lvname(pool_lv));
|
|
||||||
+ goto_bad;
|
|
||||||
}
|
|
||||||
+ lock_active_pool_done = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -3523,8 +3527,7 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
- * Unlock and free the locks from existing LVs that became pool data
|
|
||||||
- * and meta LVs.
|
|
||||||
+ * Unlock and free locks that are no longer used.
|
|
||||||
*/
|
|
||||||
if (lockd_data_name) {
|
|
||||||
if (!lockd_lv_name(cmd, vg, lockd_data_name, &lockd_data_id, lockd_data_args, "un", lockd_data_flags)) {
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
|||||||
From 33b804a80e24d58e57936f7c5a6cbe7c77981483 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Thu, 17 Aug 2023 21:50:03 +0200
|
|
||||||
Subject: [PATCH 08/24] lvconvert: run error path code only for shared VG
|
|
||||||
|
|
||||||
Error path for locking only for share VG.
|
|
||||||
---
|
|
||||||
tools/lvconvert.c | 10 ++++++----
|
|
||||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index 7d5057254..49e9248a6 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -3566,10 +3566,12 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
|
|
||||||
* committed should not exit here. There is some cleanup missing here.
|
|
||||||
*/
|
|
||||||
bad:
|
|
||||||
- if (lock_active_pool_done)
|
|
||||||
- lockd_lv(cmd, pool_lv, "un", LDLV_PERSISTENT);
|
|
||||||
- if (pool_lv && pool_lv->lock_args && pool_lv->new_lock_args)
|
|
||||||
- lockd_free_lv(cmd, vg, pool_lv->name, &pool_lv->lvid.id[1], pool_lv->lock_args);
|
|
||||||
+ if (vg_is_shared(vg)) {
|
|
||||||
+ if (lock_active_pool_done)
|
|
||||||
+ lockd_lv(cmd, pool_lv, "un", LDLV_PERSISTENT);
|
|
||||||
+ if (pool_lv && pool_lv->lock_args && pool_lv->new_lock_args)
|
|
||||||
+ lockd_free_lv(cmd, vg, pool_lv->name, &pool_lv->lvid.id[1], pool_lv->lock_args);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (policy_settings)
|
|
||||||
dm_config_destroy(policy_settings);
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From b6ab049c3184edcb4d56789d32991bbf8c97de77 Mon Sep 17 00:00:00 2001
|
|
||||||
From: wangzhiqiang <wangzhiqiang95@huawei.com>
|
|
||||||
Date: Wed, 30 Aug 2023 15:47:42 -0500
|
|
||||||
Subject: [PATCH 09/24] vgchange: acquire an exclusive VG lock for refresh
|
|
||||||
|
|
||||||
Concurrent vgchange --refresh commands can lead to hung
|
|
||||||
tasks in dm code.
|
|
||||||
|
|
||||||
Signed-off-by: wangzhiqiang <wangzhiqiang95@huawei.com>
|
|
||||||
---
|
|
||||||
tools/vgchange.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/tools/vgchange.c b/tools/vgchange.c
|
|
||||||
index e2d3dad02..8c1d605c6 100644
|
|
||||||
--- a/tools/vgchange.c
|
|
||||||
+++ b/tools/vgchange.c
|
|
||||||
@@ -1008,7 +1008,8 @@ int vgchange(struct cmd_context *cmd, int argc, char **argv)
|
|
||||||
|
|
||||||
if (update)
|
|
||||||
flags |= READ_FOR_UPDATE;
|
|
||||||
- else if (arg_is_set(cmd, activate_ARG))
|
|
||||||
+ else if (arg_is_set(cmd, activate_ARG) ||
|
|
||||||
+ arg_is_set(cmd, refresh_ARG))
|
|
||||||
flags |= READ_FOR_ACTIVATE;
|
|
||||||
|
|
||||||
if (!(handle = init_processing_handle(cmd, NULL))) {
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
From cd17ccbc684590e8655888af6d6b0452287fd47d Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Teigland <teigland@redhat.com>
|
|
||||||
Date: Thu, 31 Aug 2023 13:15:07 -0500
|
|
||||||
Subject: [PATCH 10/24] lvmlockd: client mutex ordering
|
|
||||||
|
|
||||||
Avoid deadlock between threads on mutexes (in theory.)
|
|
||||||
---
|
|
||||||
daemons/lvmlockd/lvmlockd-core.c | 8 ++++++--
|
|
||||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c
|
|
||||||
index 887226f1a..1261f6482 100644
|
|
||||||
--- a/daemons/lvmlockd/lvmlockd-core.c
|
|
||||||
+++ b/daemons/lvmlockd/lvmlockd-core.c
|
|
||||||
@@ -4690,9 +4690,12 @@ static int dump_info(int *dump_len)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* clients
|
|
||||||
+ * Proper lock order is client_mutex then cl->mutex,
|
|
||||||
+ * but cl->mutex is already held so skip client info
|
|
||||||
+ * if it would block.
|
|
||||||
*/
|
|
||||||
-
|
|
||||||
- pthread_mutex_lock(&client_mutex);
|
|
||||||
+ if (pthread_mutex_trylock(&client_mutex))
|
|
||||||
+ goto print_ls;
|
|
||||||
list_for_each_entry(cl, &client_list, list) {
|
|
||||||
ret = print_client(cl, "client", pos, len);
|
|
||||||
if (ret >= len - pos) {
|
|
||||||
@@ -4706,6 +4709,7 @@ static int dump_info(int *dump_len)
|
|
||||||
if (rv < 0)
|
|
||||||
return rv;
|
|
||||||
|
|
||||||
+ print_ls:
|
|
||||||
/*
|
|
||||||
* lockspaces with their action/resource/lock info
|
|
||||||
*/
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
|||||||
From b5b97c2b663565833218f68b196327ef63b1a114 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Thu, 31 Aug 2023 18:50:33 +0200
|
|
||||||
Subject: [PATCH 11/24] filesystem: move stat after open check
|
|
||||||
|
|
||||||
To avoid time-of-check-time-of-use clash, take the stat()
|
|
||||||
after successful open with fstat().
|
|
||||||
Also add some debugs for failing sys calls.
|
|
||||||
---
|
|
||||||
lib/device/filesystem.c | 22 +++++++++++-----------
|
|
||||||
1 file changed, 11 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/device/filesystem.c b/lib/device/filesystem.c
|
|
||||||
index 53cbc2d02..29b57d0c9 100644
|
|
||||||
--- a/lib/device/filesystem.c
|
|
||||||
+++ b/lib/device/filesystem.c
|
|
||||||
@@ -155,26 +155,26 @@ int fs_get_info(struct cmd_context *cmd, struct logical_volume *lv,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (stat(crypt_path, &st_crypt) < 0) {
|
|
||||||
- log_error("Failed to get crypt path %s", crypt_path);
|
|
||||||
- return 0;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
memset(&info, 0, sizeof(info));
|
|
||||||
|
|
||||||
log_print_unless_silent("Checking crypt device %s on LV %s.",
|
|
||||||
crypt_path, display_lvname(lv));
|
|
||||||
|
|
||||||
if ((fd = open(crypt_path, O_RDONLY)) < 0) {
|
|
||||||
- log_error("Failed to open crypt path %s", crypt_path);
|
|
||||||
+ log_error("Failed to open crypt path %s.", crypt_path);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
- if (ioctl(fd, BLKGETSIZE64, &info.crypt_dev_size_bytes) < 0) {
|
|
||||||
- log_error("Failed to get crypt device size %s", crypt_path);
|
|
||||||
- close(fd);
|
|
||||||
+
|
|
||||||
+ if ((ret = fstat(fd, &st_crypt)) < 0)
|
|
||||||
+ log_sys_error("fstat", crypt_path);
|
|
||||||
+ else if ((ret = ioctl(fd, BLKGETSIZE64, &info.crypt_dev_size_bytes)) < 0)
|
|
||||||
+ log_error("Failed to get crypt device size %s.", crypt_path);
|
|
||||||
+
|
|
||||||
+ if (close(fd))
|
|
||||||
+ log_sys_debug("close", crypt_path);
|
|
||||||
+
|
|
||||||
+ if (ret < 0)
|
|
||||||
return 0;
|
|
||||||
- }
|
|
||||||
- close(fd);
|
|
||||||
|
|
||||||
if (!fs_get_blkid(crypt_path, &info)) {
|
|
||||||
log_error("No file system info from blkid for dm-crypt device %s on LV %s.",
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
From 950edf73781807b07d97717b460ae682edb38fdf Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Mon, 4 Sep 2023 17:32:26 +0200
|
|
||||||
Subject: [PATCH 12/24] tests: check for writecache
|
|
||||||
|
|
||||||
Writecache needs writecache kernel target to be present.
|
|
||||||
---
|
|
||||||
test/shell/caching-snapshot.sh | 9 +++++++++
|
|
||||||
1 file changed, 9 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/test/shell/caching-snapshot.sh b/test/shell/caching-snapshot.sh
|
|
||||||
index d73f4ad06..854d8bad7 100644
|
|
||||||
--- a/test/shell/caching-snapshot.sh
|
|
||||||
+++ b/test/shell/caching-snapshot.sh
|
|
||||||
@@ -22,6 +22,9 @@ lvm segtypes 2>/dev/null | grep writecache$ >/dev/null || {
|
|
||||||
aux have_cache 1 10 0 || skip
|
|
||||||
which mkfs.ext4 || skip
|
|
||||||
|
|
||||||
+HAVE_WRITECACHE=1
|
|
||||||
+aux have_writecache 1 0 0 || HAVE_WRITECACHE=0
|
|
||||||
+
|
|
||||||
mount_dir="mnt"
|
|
||||||
mkdir -p "$mount_dir"
|
|
||||||
|
|
||||||
@@ -105,7 +108,10 @@ test_snap_remove() {
|
|
||||||
|
|
||||||
test_snap_remove cache --cachepool
|
|
||||||
test_snap_remove cache --cachevol
|
|
||||||
+
|
|
||||||
+if [ "$HAVE_WRITECACHE" = "1" ]; then
|
|
||||||
test_snap_remove writecache --cachevol
|
|
||||||
+fi
|
|
||||||
|
|
||||||
# adding cache|writecache to an LV that has a snapshot
|
|
||||||
|
|
||||||
@@ -143,7 +149,10 @@ test_caching_with_snap() {
|
|
||||||
|
|
||||||
test_caching_with_snap cache --cachepool
|
|
||||||
test_caching_with_snap cache --cachevol
|
|
||||||
+
|
|
||||||
+if [ "$HAVE_WRITECACHE" = "1" ]; then
|
|
||||||
test_caching_with_snap writecache --cachevol
|
|
||||||
+fi
|
|
||||||
|
|
||||||
# adding cache|writecache to a snapshot is not allowed
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
|||||||
From 25618d71b57e380ab692b640419dc89a9c6fe20e Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Teigland <teigland@redhat.com>
|
|
||||||
Date: Mon, 11 Sep 2023 12:18:12 -0500
|
|
||||||
Subject: [PATCH 13/24] lvresize: fix 32 bit overflow in size calculation
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/metadata/lv_manip.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
|
|
||||||
index 9bec8b54d..23e04c3a8 100644
|
|
||||||
--- a/lib/metadata/lv_manip.c
|
|
||||||
+++ b/lib/metadata/lv_manip.c
|
|
||||||
@@ -6445,7 +6445,7 @@ static int _fs_reduce(struct cmd_context *cmd, struct logical_volume *lv,
|
|
||||||
}
|
|
||||||
|
|
||||||
/* extent_size units is SECTOR_SIZE (512) */
|
|
||||||
- newsize_bytes_lv = lp->extents * lv->vg->extent_size * SECTOR_SIZE;
|
|
||||||
+ newsize_bytes_lv = (uint64_t) lp->extents * lv->vg->extent_size * SECTOR_SIZE;
|
|
||||||
newsize_bytes_fs = newsize_bytes_lv;
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -6591,7 +6591,7 @@ static int _fs_extend(struct cmd_context *cmd, struct logical_volume *lv,
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* extent_size units is SECTOR_SIZE (512) */
|
|
||||||
- newsize_bytes_lv = lp->extents * lv->vg->extent_size * SECTOR_SIZE;
|
|
||||||
+ newsize_bytes_lv = (uint64_t) lp->extents * lv->vg->extent_size * SECTOR_SIZE;
|
|
||||||
newsize_bytes_fs = newsize_bytes_lv;
|
|
||||||
if (fsinfo.needs_crypt) {
|
|
||||||
newsize_bytes_fs -= fsinfo.crypt_offset_bytes;
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
|||||||
From afb60167d6268a61d51b1a33efa741f46c7e73ee Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mikulas Patocka <mpatocka@redhat.com>
|
|
||||||
Date: Wed, 6 Sep 2023 15:28:29 +0200
|
|
||||||
Subject: [PATCH 14/24] gcc: fix warnings for x32 architecture
|
|
||||||
|
|
||||||
Warning from x32 ABI compilation.
|
|
||||||
---
|
|
||||||
lib/log/log.c | 2 +-
|
|
||||||
lib/metadata/vdo_manip.c | 6 +++---
|
|
||||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/log/log.c b/lib/log/log.c
|
|
||||||
index 6dc269675..b654737f1 100644
|
|
||||||
--- a/lib/log/log.c
|
|
||||||
+++ b/lib/log/log.c
|
|
||||||
@@ -515,7 +515,7 @@ static void _set_time_prefix(char *prefix, int buflen)
|
|
||||||
if (!len)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
- len = dm_snprintf(prefix + len, buflen - len, ".%06ld ", ts.tv_nsec/1000);
|
|
||||||
+ len = dm_snprintf(prefix + len, buflen - len, ".%06d ", (int)ts.tv_nsec/1000);
|
|
||||||
if (len < 0)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
diff --git a/lib/metadata/vdo_manip.c b/lib/metadata/vdo_manip.c
|
|
||||||
index d51ef2dbf..516d42d8b 100644
|
|
||||||
--- a/lib/metadata/vdo_manip.c
|
|
||||||
+++ b/lib/metadata/vdo_manip.c
|
|
||||||
@@ -522,9 +522,9 @@ static int _get_sysinfo_memory(uint64_t *total_mb, uint64_t *available_mb)
|
|
||||||
if (sysinfo(&si) != 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- log_debug("Sysinfo free:%lu bufferram:%lu sharedram:%lu freehigh:%lu unit:%u.",
|
|
||||||
- si.freeram >> 20, si.bufferram >> 20, si.sharedram >> 20,
|
|
||||||
- si.freehigh >> 20, si.mem_unit);
|
|
||||||
+ log_debug("Sysinfo free:%llu bufferram:%llu sharedram:%llu freehigh:%llu unit:%u.",
|
|
||||||
+ (unsigned long long)si.freeram >> 20, (unsigned long long)si.bufferram >> 20, (unsigned long long)si.sharedram >> 20,
|
|
||||||
+ (unsigned long long)si.freehigh >> 20, si.mem_unit);
|
|
||||||
|
|
||||||
*available_mb = ((uint64_t)(si.freeram + si.bufferram) * si.mem_unit) >> 30;
|
|
||||||
*total_mb = si.totalram >> 30;
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
From ae65e71b3d519ed99f0bab6a595d6d255e0635bb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Tue, 12 Sep 2023 16:40:26 +0200
|
|
||||||
Subject: [PATCH 15/24] gcc: warning: missing braces around initializer
|
|
||||||
|
|
||||||
Fix warning emitted by some older gcc...
|
|
||||||
---
|
|
||||||
tools/lvconvert.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
|
|
||||||
index 49e9248a6..aa601d4ca 100644
|
|
||||||
--- a/tools/lvconvert.c
|
|
||||||
+++ b/tools/lvconvert.c
|
|
||||||
@@ -6514,7 +6514,7 @@ static int _lvconvert_integrity_single(struct cmd_context *cmd,
|
|
||||||
struct logical_volume *lv,
|
|
||||||
struct processing_handle *handle)
|
|
||||||
{
|
|
||||||
- struct integrity_settings settings = { 0 };
|
|
||||||
+ struct integrity_settings settings = { .tag_size = 0 };
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (!integrity_mode_set(arg_str_value(cmd, raidintegritymode_ARG, NULL), &settings))
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
From fbbf796dd89007fe57a3c7043f27aed2fbf0775c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Wed, 13 Sep 2023 00:39:33 +0200
|
|
||||||
Subject: [PATCH 16/24] test: improve aux teardown
|
|
||||||
|
|
||||||
Handle the case of device teardown where the first pass
|
|
||||||
could have only a single, but opened device, for removal.
|
|
||||||
In such case we want to at least once go through
|
|
||||||
the udev_wait and retry removal again.
|
|
||||||
|
|
||||||
TODO: maybe a sleep .1 might be usable as well with udev_wait
|
|
||||||
---
|
|
||||||
test/lib/aux.sh | 7 ++++---
|
|
||||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
|
|
||||||
index 3f66e9290..4474dc72c 100644
|
|
||||||
--- a/test/lib/aux.sh
|
|
||||||
+++ b/test/lib/aux.sh
|
|
||||||
@@ -239,8 +239,8 @@ prepare_lvmpolld() {
|
|
||||||
echo $! > LOCAL_LVMPOLLD
|
|
||||||
for i in {200..0} ; do
|
|
||||||
test -e "$TESTDIR/lvmpolld.socket" && break
|
|
||||||
- echo -n .;
|
|
||||||
- sleep .1;
|
|
||||||
+ echo -n .
|
|
||||||
+ sleep .1
|
|
||||||
done # wait for the socket
|
|
||||||
test "$i" -gt 0 || die "Startup of lvmpolld is too slow."
|
|
||||||
echo ok
|
|
||||||
@@ -395,10 +395,10 @@ teardown_devs_prefixed() {
|
|
||||||
# 2nd. loop is trying --force removal which can possibly 'unstuck' some bloked operations
|
|
||||||
for i in 0 1; do
|
|
||||||
test "$i" = 1 && test "$stray" = 0 && break # no stray device removal
|
|
||||||
+ local progress=1
|
|
||||||
|
|
||||||
while :; do
|
|
||||||
local sortby="name"
|
|
||||||
- local progress=0
|
|
||||||
|
|
||||||
# HACK: sort also by minors - so we try to close 'possibly later' created device first
|
|
||||||
test "$i" = 0 || sortby="-minor"
|
|
||||||
@@ -426,6 +426,7 @@ teardown_devs_prefixed() {
|
|
||||||
|
|
||||||
udev_wait
|
|
||||||
wait
|
|
||||||
+ progress=0
|
|
||||||
done # looping till there are some removed devices
|
|
||||||
done
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
From cf8a0c94fff754e4b6a504a430e53439d67b6ca0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Wed, 13 Sep 2023 23:27:55 +0200
|
|
||||||
Subject: [PATCH 17/24] tests: aux try with extra sleep
|
|
||||||
|
|
||||||
Since udev_wait is not really adding any major delay to wait
|
|
||||||
for any udev worker processing - add extra sleep .1.
|
|
||||||
---
|
|
||||||
test/lib/aux.sh | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
|
|
||||||
index 4474dc72c..816a13223 100644
|
|
||||||
--- a/test/lib/aux.sh
|
|
||||||
+++ b/test/lib/aux.sh
|
|
||||||
@@ -424,6 +424,7 @@ teardown_devs_prefixed() {
|
|
||||||
|
|
||||||
test "$progress" = 1 || break
|
|
||||||
|
|
||||||
+ sleep .1
|
|
||||||
udev_wait
|
|
||||||
wait
|
|
||||||
progress=0
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From cb34be9ba90613cd49f4822fc118cecfc93ac897 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Thu, 14 Sep 2023 01:41:45 +0200
|
|
||||||
Subject: [PATCH 18/24] tests: aux using singl lvmconf call
|
|
||||||
|
|
||||||
lvmconf can handle multiple options in a single pass.
|
|
||||||
---
|
|
||||||
test/lib/aux.sh | 3 +--
|
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
|
|
||||||
index 816a13223..20dbecec2 100644
|
|
||||||
--- a/test/lib/aux.sh
|
|
||||||
+++ b/test/lib/aux.sh
|
|
||||||
@@ -1444,8 +1444,7 @@ extend_filter_md() {
|
|
||||||
for rx in "$@"; do
|
|
||||||
filter=$(echo "$filter" | sed -e "s:\\[:[ \"$rx\", :")
|
|
||||||
done
|
|
||||||
- lvmconf "$filter"
|
|
||||||
- lvmconf "devices/scan = [ \"$DM_DEV_DIR\", \"/dev\" ]"
|
|
||||||
+ lvmconf "$filter" "devices/scan = [ \"$DM_DEV_DIR\", \"/dev\" ]"
|
|
||||||
}
|
|
||||||
|
|
||||||
extend_filter_LVMTEST() {
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
From da95bb6883810863a394525c9a66196b7b0dda21 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Wed, 13 Sep 2023 23:23:47 +0200
|
|
||||||
Subject: [PATCH 19/24] tests: missing to check for writecache support
|
|
||||||
|
|
||||||
Ono more case requires writecache presence.
|
|
||||||
---
|
|
||||||
test/shell/caching-snapshot.sh | 11 ++++-------
|
|
||||||
1 file changed, 4 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/shell/caching-snapshot.sh b/test/shell/caching-snapshot.sh
|
|
||||||
index 854d8bad7..b31cb520f 100644
|
|
||||||
--- a/test/shell/caching-snapshot.sh
|
|
||||||
+++ b/test/shell/caching-snapshot.sh
|
|
||||||
@@ -72,7 +72,8 @@ test_snap_create() {
|
|
||||||
|
|
||||||
test_snap_create cache --cachepool
|
|
||||||
test_snap_create cache --cachevol
|
|
||||||
-test_snap_create writecache --cachevol
|
|
||||||
+
|
|
||||||
+[ "$HAVE_WRITECACHE" = "1" ] && test_snap_create writecache --cachevol
|
|
||||||
|
|
||||||
# removing cache|writecache while snapshot exists
|
|
||||||
|
|
||||||
@@ -109,9 +110,7 @@ test_snap_remove() {
|
|
||||||
test_snap_remove cache --cachepool
|
|
||||||
test_snap_remove cache --cachevol
|
|
||||||
|
|
||||||
-if [ "$HAVE_WRITECACHE" = "1" ]; then
|
|
||||||
-test_snap_remove writecache --cachevol
|
|
||||||
-fi
|
|
||||||
+[ "$HAVE_WRITECACHE" = "1" ] && test_snap_remove writecache --cachevol
|
|
||||||
|
|
||||||
# adding cache|writecache to an LV that has a snapshot
|
|
||||||
|
|
||||||
@@ -150,9 +149,7 @@ test_caching_with_snap() {
|
|
||||||
test_caching_with_snap cache --cachepool
|
|
||||||
test_caching_with_snap cache --cachevol
|
|
||||||
|
|
||||||
-if [ "$HAVE_WRITECACHE" = "1" ]; then
|
|
||||||
-test_caching_with_snap writecache --cachevol
|
|
||||||
-fi
|
|
||||||
+[ "$HAVE_WRITECACHE" = "1" ] && test_caching_with_snap writecache --cachevol
|
|
||||||
|
|
||||||
# adding cache|writecache to a snapshot is not allowed
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
From befc30b610ed3a648f967e50cea752d0f5a09073 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Wed, 13 Sep 2023 23:39:08 +0200
|
|
||||||
Subject: [PATCH 20/24] tests: pvmove large disk area
|
|
||||||
|
|
||||||
With some faster test hw machine we need to make this test
|
|
||||||
a bit more resource consuming.
|
|
||||||
---
|
|
||||||
test/shell/pvmove-abort-all.sh | 8 ++++----
|
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/shell/pvmove-abort-all.sh b/test/shell/pvmove-abort-all.sh
|
|
||||||
index 872db041e..081c02911 100644
|
|
||||||
--- a/test/shell/pvmove-abort-all.sh
|
|
||||||
+++ b/test/shell/pvmove-abort-all.sh
|
|
||||||
@@ -26,7 +26,7 @@ aux target_at_least dm-mirror 1 10 0 || skip
|
|
||||||
# Throttle mirroring
|
|
||||||
aux throttle_dm_mirror || skip
|
|
||||||
|
|
||||||
-aux prepare_pvs 6 60
|
|
||||||
+aux prepare_pvs 6 90
|
|
||||||
|
|
||||||
vgcreate -s 512k $vg "$dev1" "$dev2"
|
|
||||||
pvcreate --metadatacopies 0 "$dev3"
|
|
||||||
@@ -41,9 +41,9 @@ for backgroundarg in "-b" "" ;
|
|
||||||
do
|
|
||||||
|
|
||||||
# Create multisegment LV
|
|
||||||
-lvcreate -an -Zn -l30 -n $lv1 $vg "$dev1"
|
|
||||||
-lvcreate -an -Zn -l30 -n $lv2 $vg "$dev2"
|
|
||||||
-lvcreate -an -Zn -l30 -n $lv1 $vg1 "$dev4"
|
|
||||||
+lvcreate -an -Zn -l60 -n $lv1 $vg "$dev1"
|
|
||||||
+lvcreate -an -Zn -l60 -n $lv2 $vg "$dev2"
|
|
||||||
+lvcreate -an -Zn -l60 -n $lv1 $vg1 "$dev4"
|
|
||||||
lvextend -l+30 -n $vg1/$lv1 "$dev5"
|
|
||||||
|
|
||||||
cmd1=(pvmove -i1 $backgroundarg $mode "$dev1" "$dev3")
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
From 8257181f9e4e54505de158a98d54c8a11b127553 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Wed, 13 Sep 2023 23:40:16 +0200
|
|
||||||
Subject: [PATCH 21/24] tests: enforce full fs check
|
|
||||||
|
|
||||||
---
|
|
||||||
test/shell/lvresize-fs-crypt.sh | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/test/shell/lvresize-fs-crypt.sh b/test/shell/lvresize-fs-crypt.sh
|
|
||||||
index 966870d5d..302fd5fc9 100644
|
|
||||||
--- a/test/shell/lvresize-fs-crypt.sh
|
|
||||||
+++ b/test/shell/lvresize-fs-crypt.sh
|
|
||||||
@@ -139,7 +139,7 @@ dd if=/dev/zero of="$mount_dir/zeros1" bs=1M count=10 oflag=direct
|
|
||||||
df --output=size "$mount_dir" |tee df1
|
|
||||||
# resize only the fs (to 256M), not the crypt dev or LV
|
|
||||||
umount "$mount_dir"
|
|
||||||
-fsck -n /dev/mapper/$cr
|
|
||||||
+fsck -fn /dev/mapper/$cr
|
|
||||||
resize2fs /dev/mapper/$cr 262144k
|
|
||||||
mount /dev/mapper/$cr "$mount_dir"
|
|
||||||
# this lvresize will not resize the fs (which is already reduced
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,588 +0,0 @@
|
|||||||
From 9683478371c60e78920c22cb4f5ca14b39bb9fcb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Thu, 14 Sep 2023 00:51:58 +0200
|
|
||||||
Subject: [PATCH 22/24] tests: update for work in fake dev environment
|
|
||||||
|
|
||||||
No write outside of $LVM_TEST_DIR (removed /test access).
|
|
||||||
Use 'aux prepare_scsi_debug_dev' for automated scsi_debug handling
|
|
||||||
Properly use "" around shell vars.
|
|
||||||
Smarter read of PVS values.
|
|
||||||
Relax requirement to only work with real /dev dir.
|
|
||||||
---
|
|
||||||
test/shell/devicesfile-vpd-ids.sh | 328 +++++++++++++++---------------
|
|
||||||
1 file changed, 164 insertions(+), 164 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/shell/devicesfile-vpd-ids.sh b/test/shell/devicesfile-vpd-ids.sh
|
|
||||||
index 9a12f49f9..37fb6b79f 100644
|
|
||||||
--- a/test/shell/devicesfile-vpd-ids.sh
|
|
||||||
+++ b/test/shell/devicesfile-vpd-ids.sh
|
|
||||||
@@ -16,12 +16,10 @@ SKIP_WITH_LVMPOLLD=1
|
|
||||||
|
|
||||||
. lib/inittest
|
|
||||||
|
|
||||||
-test "$DM_DEV_DIR" = "/dev" || skip "Only works with /dev access -> make check LVM_TEST_DEVDIR=/dev"
|
|
||||||
-
|
|
||||||
-aux lvmconf 'devices/use_devicesfile = 1'
|
|
||||||
+SYS_DIR="sys"
|
|
||||||
# requires trailing / to match dm
|
|
||||||
-aux lvmconf 'devices/device_id_sysfs_dir = "/test/sys/"'
|
|
||||||
-SYS_DIR="/test/sys"
|
|
||||||
+aux lvmconf "devices/device_id_sysfs_dir = \"$PWD/$SYS_DIR/\"" \
|
|
||||||
+ "devices/use_devicesfile = 1"
|
|
||||||
|
|
||||||
# These values match the values encoded in the binary blob
|
|
||||||
# written to dev1_vpd_pg83
|
|
||||||
@@ -34,7 +32,7 @@ DEV1_NAA2=naa.600a098000000002ac18542400000dbd
|
|
||||||
DEV1_NAA3=naa.553b13644430344b4e3f486d32647962
|
|
||||||
|
|
||||||
create_base() {
|
|
||||||
- mkdir -p $SYS_DIR/dev/block
|
|
||||||
+ mkdir -p "$SYS_DIR/dev/block"
|
|
||||||
|
|
||||||
echo -n "0083 009c 0201 0020 4c56 4d54 5354 2020 \
|
|
||||||
204c 554e 2038 3039 7741 4c56 4d54 5354 \
|
|
||||||
@@ -45,39 +43,36 @@ create_base() {
|
|
||||||
0000 0dbd 0114 0004 0101 0005 0115 0004 \
|
|
||||||
0000 03ec 0328 0028 6e61 612e 3535 3342 \
|
|
||||||
3133 3634 3434 3330 3334 3442 3445 3346 \
|
|
||||||
- 3438 3644 3332 3634 3739 3632 0000 0000" | xxd -r -p > $SYS_DIR/dev1_vpd_pg83
|
|
||||||
+ 3438 3644 3332 3634 3739 3632 0000 0000" | xxd -r -p > "$SYS_DIR/dev1_vpd_pg83"
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_base() {
|
|
||||||
- rm $SYS_DIR/dev1_vpd_pg83
|
|
||||||
- rmdir $SYS_DIR/dev/block
|
|
||||||
- rmdir $SYS_DIR/dev
|
|
||||||
- rmdir $SYS_DIR
|
|
||||||
+ rm "$SYS_DIR/dev1_vpd_pg83"
|
|
||||||
+ rmdir "$SYS_DIR/dev/block"
|
|
||||||
+ rmdir "$SYS_DIR/dev"
|
|
||||||
+ rmdir "$SYS_DIR"
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_sysfs() {
|
|
||||||
- mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device
|
|
||||||
- echo $1 > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
- cp $SYS_DIR/dev1_vpd_pg83 $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/vpd_pg83
|
|
||||||
+ mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device"
|
|
||||||
+ echo "$1" > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
+ cp "$SYS_DIR/dev1_vpd_pg83" "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/vpd_pg83"
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup_sysfs() {
|
|
||||||
- rm -f $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
- rm -f $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/vpd_pg83
|
|
||||||
- rmdir $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device || true
|
|
||||||
- rmdir $SYS_DIR/dev/block/$MAJOR1:$MINOR1 || true
|
|
||||||
+ rm -f "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
+ rm -f "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/vpd_pg83"
|
|
||||||
+ rmdir "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device" || true
|
|
||||||
+ rmdir "$SYS_DIR/dev/block/$MAJOR1:$MINOR1" || true
|
|
||||||
}
|
|
||||||
|
|
||||||
+aux prepare_scsi_debug_dev 16 || skip
|
|
||||||
|
|
||||||
-modprobe scsi_debug dev_size_mb=16 num_tgts=1
|
|
||||||
-sleep 2
|
|
||||||
# Get scsi device name created by scsi_debug.
|
|
||||||
# SD = sdh
|
|
||||||
# DEV1 = /dev/sdh
|
|
||||||
-SD=$(grep -H scsi_debug /sys/block/sd*/device/model | cut -f4 -d /);
|
|
||||||
-echo $SD
|
|
||||||
-DEV1=/dev/$SD
|
|
||||||
-echo $DEV1
|
|
||||||
+DEV1=$(< SCSI_DEBUG_DEV)
|
|
||||||
+echo "Using scsi_debug device: $DEV1"
|
|
||||||
|
|
||||||
DFDIR="$LVM_SYSTEM_DIR/devices"
|
|
||||||
mkdir -p "$DFDIR" || true
|
|
||||||
@@ -87,22 +82,23 @@ touch $DF
|
|
||||||
|
|
||||||
pvcreate "$DEV1"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
-MAJOR1=`pvs "$DEV1" --noheading -o major | tr -d - | awk '{print $1}'`
|
|
||||||
-MINOR1=`pvs "$DEV1" --noheading -o minor | tr -d - | awk '{print $1}'`
|
|
||||||
-PVID1=`pvs "$DEV1" --noheading -o uuid | tr -d - | awk '{print $1}'`
|
|
||||||
+eval "$(pvs --noheading --nameprefixes -o major,minor,uuid "$DEV1")"
|
|
||||||
+MAJOR1=$LVM2_PV_MAJOR
|
|
||||||
+MINOR1=$LVM2_PV_MINOR
|
|
||||||
+PVID1=${LVM2_PV_UUID//-/}
|
|
||||||
|
|
||||||
create_base
|
|
||||||
|
|
||||||
# No sys/wwid, lvm uses wwid from sys/vpd
|
|
||||||
|
|
||||||
-setup_sysfs $DEV1_NAA
|
|
||||||
+setup_sysfs "$DEV1_NAA"
|
|
||||||
# no sys/wwid is reported
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
-rm $DF
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
+rm "$DF"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
pvs "$DEV1"
|
|
||||||
-grep $DEV1_NAA $DF
|
|
||||||
+grep "$DEV1_NAA" "$DF"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
# Kernel changes the type printed from sys/wwid from t10 to naa
|
|
||||||
@@ -113,15 +109,15 @@ cleanup_sysfs
|
|
||||||
# reporting pvs should still find the dev based on using vpd data
|
|
||||||
# and find the t10 value there
|
|
||||||
|
|
||||||
-setup_sysfs $DEV1_T10
|
|
||||||
-rm $DF
|
|
||||||
+setup_sysfs "$DEV1_T10"
|
|
||||||
+rm "$DF"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-grep sys_wwid $DF
|
|
||||||
-grep $DEV1_T10 $DF
|
|
||||||
+cat "$DF"
|
|
||||||
+grep sys_wwid "$DF"
|
|
||||||
+grep "$DEV1_T10" "$DF"
|
|
||||||
pvs "$DEV1"
|
|
||||||
# kernel changes what it reports from sys/wwid
|
|
||||||
-echo $DEV1_NAA > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+echo "$DEV1_NAA" > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
# lvm finds the original t10 id in vpd
|
|
||||||
pvs "$DEV1"
|
|
||||||
cleanup_sysfs
|
|
||||||
@@ -132,229 +128,231 @@ cleanup_sysfs
|
|
||||||
# df entry uses the specified type
|
|
||||||
# reporting pvs should show the pv
|
|
||||||
|
|
||||||
-setup_sysfs $DEV1_T10
|
|
||||||
-rm $DF
|
|
||||||
+setup_sysfs "$DEV1_T10"
|
|
||||||
+rm "$DF"
|
|
||||||
lvmdevices --adddev "$DEV1" --deviceidtype wwid_naa
|
|
||||||
-cat $DF
|
|
||||||
-grep wwid_naa $DF
|
|
||||||
-grep $DEV1_NAA $DF
|
|
||||||
+cat "$DF"
|
|
||||||
+grep wwid_naa "$DF"
|
|
||||||
+grep "$DEV1_NAA" "$DF"
|
|
||||||
pvs "$DEV1"
|
|
||||||
lvmdevices --deldev "$DEV1"
|
|
||||||
lvmdevices --addpvid "$PVID1" --deviceidtype wwid_naa
|
|
||||||
-cat $DF
|
|
||||||
-grep $DEV1_NAA $DF
|
|
||||||
+cat "$DF"
|
|
||||||
+grep "$DEV1_NAA" "$DF"
|
|
||||||
pvs "$DEV1"
|
|
||||||
lvmdevices --deldev "$DEV1"
|
|
||||||
lvmdevices --adddev "$DEV1" --deviceidtype wwid_eui
|
|
||||||
-cat $DF
|
|
||||||
-grep wwid_eui $DF
|
|
||||||
-grep $DEV1_EUI $DF
|
|
||||||
+cat "$DF"
|
|
||||||
+grep wwid_eui "$DF"
|
|
||||||
+grep "$DEV1_EUI" "$DF"
|
|
||||||
pvs "$DEV1"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
-# Any of the vpd wwids can be used in the devices file
|
|
||||||
+# Any of the vpd wwids can be used in the devices file
|
|
||||||
# with type sys_wwid and the device will be matched to
|
|
||||||
# it by finding that wwid in the vpd data.
|
|
||||||
|
|
||||||
-setup_sysfs $DEV1_NAA
|
|
||||||
-rm $DF
|
|
||||||
+setup_sysfs "$DEV1_NAA"
|
|
||||||
+rm "$DF"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+cat "$DF"
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
pvs "$DEV1"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
-setup_sysfs $DEV1_NAA2
|
|
||||||
-rm $DF
|
|
||||||
+setup_sysfs "$DEV1_NAA2"
|
|
||||||
+rm "$DF"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+cat "$DF"
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
pvs "$DEV1"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
-setup_sysfs $DEV1_NAA3
|
|
||||||
-rm $DF
|
|
||||||
+setup_sysfs "$DEV1_NAA3"
|
|
||||||
+rm "$DF"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+cat "$DF"
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
pvs "$DEV1"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
-setup_sysfs $DEV1_EUI
|
|
||||||
-rm $DF
|
|
||||||
+setup_sysfs "$DEV1_EUI"
|
|
||||||
+rm "$DF"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+cat "$DF"
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
pvs "$DEV1"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
-setup_sysfs $DEV1_T10
|
|
||||||
-rm $DF
|
|
||||||
+setup_sysfs "$DEV1_T10"
|
|
||||||
+rm "$DF"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+cat "$DF"
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
pvs "$DEV1"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
# Test nvme wwid that starts with "nvme" instead of naa/eui/t10
|
|
||||||
-rm $DF
|
|
||||||
+rm "$DF"
|
|
||||||
aux wipefs_a "$DEV1"
|
|
||||||
-mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/
|
|
||||||
-echo "nvme.111111111111111111122222222222333333333333333-44444444444444444445555555555556666666666666666662-00000001" > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/wwid
|
|
||||||
+mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1"
|
|
||||||
+echo "nvme.111111111111111111122222222222333333333333333-44444444444444444445555555555556666666666666666662-00000001" > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/wwid"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
lvcreate -l1 -an $vg
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1" |tee out
|
|
||||||
grep sys_wwid out
|
|
||||||
grep nvme.111 out
|
|
||||||
-grep sys_wwid $DF
|
|
||||||
-grep nvme.111 $DF
|
|
||||||
+grep sys_wwid "$DF"
|
|
||||||
+grep nvme.111 "$DF"
|
|
||||||
lvmdevices --deldev "$DEV1"
|
|
||||||
not lvmdevices --adddev "$DEV1" --deviceidtype wwid_eui
|
|
||||||
lvmdevices --adddev "$DEV1" --deviceidtype sys_wwid
|
|
||||||
lvmdevices | grep nvme.111
|
|
||||||
lvremove -y $vg
|
|
||||||
-sleep 1
|
|
||||||
+sleep .1
|
|
||||||
lvs $vg
|
|
||||||
vgremove $vg
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/wwid
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/wwid"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
# Test t10 wwid containing quote
|
|
||||||
-rm $DF
|
|
||||||
+rm "$DF"
|
|
||||||
aux wipefs_a "$DEV1"
|
|
||||||
-mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device
|
|
||||||
-echo "t10.ATA_2.5\"_SATA_SSD_1112-A___111111111111" > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device"
|
|
||||||
+echo "t10.ATA_2.5\"_SATA_SSD_1112-A___111111111111" > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
lvcreate -l1 -an $vg
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
# check wwid string in metadata output
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1" |tee out
|
|
||||||
grep sys_wwid out
|
|
||||||
# the quote is removed after the 5
|
|
||||||
grep 2.5_SATA_SSD out
|
|
||||||
# check wwid string in system.devices
|
|
||||||
-grep sys_wwid $DF
|
|
||||||
+grep sys_wwid "$DF"
|
|
||||||
# the quote is removed after the 5
|
|
||||||
-grep 2.5_SATA_SSD $DF
|
|
||||||
+grep 2.5_SATA_SSD "$DF"
|
|
||||||
lvremove -y $vg
|
|
||||||
vgremove $vg
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
# Test t10 wwid with trailing space and line feed at the end
|
|
||||||
-rm $DF
|
|
||||||
+rm "$DF"
|
|
||||||
aux wipefs_a "$DEV1"
|
|
||||||
-mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device
|
|
||||||
+mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device"
|
|
||||||
echo -n "7431 302e 4154 4120 2020 2020 5642 4f58 \
|
|
||||||
2048 4152 4444 4953 4b20 2020 2020 2020 \
|
|
||||||
2020 2020 2020 2020 2020 2020 2020 2020 \
|
|
||||||
2020 2020 5642 3963 3130 6433 3138 2d31 \
|
|
||||||
-3838 6439 6562 6320 0a" | xxd -r -p > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
-cat $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+3838 6439 6562 6320 0a" | xxd -r -p > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
+cat "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
lvcreate -l1 -an $vg
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
# check wwid string in metadata output
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1" |tee out
|
|
||||||
grep sys_wwid out
|
|
||||||
# check wwid string in system.devices
|
|
||||||
-grep sys_wwid $DF
|
|
||||||
+grep sys_wwid "$DF"
|
|
||||||
lvremove -y $vg
|
|
||||||
vgremove $vg
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
# Test t10 wwid with trailing space at the end that was created by 9.0/9.1
|
|
||||||
-rm $DF
|
|
||||||
+rm "$DF"
|
|
||||||
aux wipefs_a "$DEV1"
|
|
||||||
-mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device
|
|
||||||
+mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device"
|
|
||||||
echo -n "7431 302e 4154 4120 2020 2020 5642 4f58 \
|
|
||||||
2048 4152 4444 4953 4b20 2020 2020 2020 \
|
|
||||||
2020 2020 2020 2020 2020 2020 2020 2020 \
|
|
||||||
2020 2020 5642 3963 3130 6433 3138 2d31 \
|
|
||||||
-3838 6439 6562 6320 0a" | xxd -r -p > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
-cat $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+3838 6439 6562 6320 0a" | xxd -r -p > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
+cat "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
-PVID1=`pvs "$DEV1" --noheading -o uuid | tr -d - | awk '{print $1}'`
|
|
||||||
+eval "$(pvs --noheading --nameprefixes -o uuid "$DEV1")"
|
|
||||||
+PVID1=${LVM2_PV_UUID//-/}
|
|
||||||
T10_WWID_RHEL91="t10.ATA_____VBOX_HARDDISK___________________________VB9c10d318-188d9ebc_"
|
|
||||||
lvcreate -l1 -an $vg
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
# check wwid string in metadata output
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1" |tee out
|
|
||||||
grep sys_wwid out
|
|
||||||
# check wwid string in system.devices
|
|
||||||
-grep sys_wwid $DF
|
|
||||||
+grep sys_wwid "$DF"
|
|
||||||
# Replace IDNAME with the IDNAME that 9.0/9.1 created from this wwid
|
|
||||||
-cat $DF | grep -v IDNAME > $DFTMP
|
|
||||||
-cat $DFTMP
|
|
||||||
-echo "IDTYPE=sys_wwid IDNAME=t10.ATA_____VBOX_HARDDISK___________________________VB9c10d318-188d9ebc_ DEVNAME=${DEV1} PVID=${PVID1}" >> $DFTMP
|
|
||||||
-cp $DFTMP $DF
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF" | grep -v IDNAME > "$DFTMP"
|
|
||||||
+cat "$DFTMP"
|
|
||||||
+echo "IDTYPE=sys_wwid IDNAME=t10.ATA_____VBOX_HARDDISK___________________________VB9c10d318-188d9ebc_ DEVNAME=${DEV1} PVID=${PVID1}" >> "$DFTMP"
|
|
||||||
+cp "$DFTMP" "$DF"
|
|
||||||
+cat "$DF"
|
|
||||||
vgs
|
|
||||||
pvs
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1"
|
|
||||||
# Removing the trailing _ which should then work
|
|
||||||
-cat $DF | grep -v IDNAME > $DFTMP
|
|
||||||
-cat $DFTMP
|
|
||||||
-echo "IDTYPE=sys_wwid IDNAME=t10.ATA_____VBOX_HARDDISK___________________________VB9c10d318-188d9ebc DEVNAME=${DEV1} PVID=${PVID1}" >> $DFTMP
|
|
||||||
-cp $DFTMP $DF
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF" | grep -v IDNAME > "$DFTMP"
|
|
||||||
+cat "$DFTMP"
|
|
||||||
+echo "IDTYPE=sys_wwid IDNAME=t10.ATA_____VBOX_HARDDISK___________________________VB9c10d318-188d9ebc DEVNAME=${DEV1} PVID=${PVID1}" >> "$DFTMP"
|
|
||||||
+cp "$DFTMP" "$DF"
|
|
||||||
+cat "$DF"
|
|
||||||
vgs
|
|
||||||
pvs
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1"
|
|
||||||
lvremove -y $vg
|
|
||||||
vgremove $vg
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
# test a t10 wwid that has actual trailing underscore which
|
|
||||||
# is followed by a trailing space.
|
|
||||||
-rm $DF
|
|
||||||
+rm "$DF"
|
|
||||||
aux wipefs_a "$DEV1"
|
|
||||||
-mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device
|
|
||||||
+mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device"
|
|
||||||
echo -n "7431 302e 4154 4120 2020 2020 5642 4f58 \
|
|
||||||
2048 4152 4444 4953 4b20 2020 2020 2020 \
|
|
||||||
2020 2020 2020 2020 2020 2020 2020 2020 \
|
|
||||||
2020 2020 5642 3963 3130 6433 3138 2d31 \
|
|
||||||
-3838 6439 6562 5f20 0a" | xxd -r -p > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
-cat $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+3838 6439 6562 5f20 0a" | xxd -r -p > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
+cat "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
# The wwid has an actual underscore char (5f) followed by a space char (20)
|
|
||||||
# 9.1 converts the trailing space to an underscore
|
|
||||||
T10_WWID_RHEL91="t10.ATA_____VBOX_HARDDISK___________________________VB9c10d318-188d9eb__"
|
|
||||||
# 9.2 ignores the trailing space
|
|
||||||
T10_WWID_RHEL92="t10.ATA_____VBOX_HARDDISK___________________________VB9c10d318-188d9eb_"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
-PVID1=`pvs "$DEV1" --noheading -o uuid | tr -d - | awk '{print $1}'`
|
|
||||||
+eval "$(pvs --noheading --nameprefixes -o uuid "$DEV1")"
|
|
||||||
+PVID1=${LVM2_PV_UUID//-/}
|
|
||||||
lvcreate -l1 -an $vg
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF"
|
|
||||||
# check wwid string in metadata output
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1" |tee out
|
|
||||||
grep sys_wwid out
|
|
||||||
# check wwid string in system.devices
|
|
||||||
-grep sys_wwid $DF
|
|
||||||
+grep sys_wwid "$DF"
|
|
||||||
# Replace IDNAME with the IDNAME that 9.0/9.1 created from this wwid
|
|
||||||
-cat $DF | grep -v IDNAME > $DFTMP
|
|
||||||
-cat $DFTMP
|
|
||||||
-echo "IDTYPE=sys_wwid IDNAME=${T10_WWID_RHEL91} DEVNAME=${DEV1} PVID=${PVID1}" >> $DFTMP
|
|
||||||
-cp $DFTMP $DF
|
|
||||||
-cat $DF
|
|
||||||
+cat "$DF" | grep -v IDNAME > "$DFTMP"
|
|
||||||
+cat "$DFTMP"
|
|
||||||
+echo "IDTYPE=sys_wwid IDNAME=${T10_WWID_RHEL91} DEVNAME=${DEV1} PVID=${PVID1}" >> "$DFTMP"
|
|
||||||
+cp "$DFTMP" "$DF"
|
|
||||||
+cat "$DF"
|
|
||||||
vgs
|
|
||||||
pvs
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1"
|
|
||||||
lvremove -y $vg
|
|
||||||
vgremove $vg
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
#
|
|
||||||
@@ -363,67 +361,70 @@ cleanup_sysfs
|
|
||||||
# underscores are understood.
|
|
||||||
#
|
|
||||||
|
|
||||||
-rm $DF
|
|
||||||
+rm "$DF"
|
|
||||||
aux wipefs_a "$DEV1"
|
|
||||||
-mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device
|
|
||||||
-echo -n " s123 456 " > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/serial
|
|
||||||
+mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device"
|
|
||||||
+echo -n " s123 456 " > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/serial"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-grep "IDNAME=s123__456 DEVNAME" $DF
|
|
||||||
+cat "$DF"
|
|
||||||
+grep "IDNAME=s123__456 DEVNAME" "$DF"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
-PVID1=`pvs "$DEV1" --noheading -o uuid | tr -d - | awk '{print $1}'`
|
|
||||||
-cat $DF | grep -v IDNAME > $DFTMP
|
|
||||||
-cat $DFTMP
|
|
||||||
-echo "IDTYPE=sys_serial IDNAME=__s123__456__ DEVNAME=${DEV1} PVID=${PVID1}" >> $DFTMP
|
|
||||||
-cp $DFTMP $DF
|
|
||||||
-cat $DF
|
|
||||||
+eval "$(pvs --noheading --nameprefixes -o uuid "$DEV1")"
|
|
||||||
+PVID1=${LVM2_PV_UUID//-/}
|
|
||||||
+cat "$DF" | grep -v IDNAME > "$DFTMP"
|
|
||||||
+cat "$DFTMP"
|
|
||||||
+echo "IDTYPE=sys_serial IDNAME=__s123__456__ DEVNAME=${DEV1} PVID=${PVID1}" >> "$DFTMP"
|
|
||||||
+cp "$DFTMP" "$DF"
|
|
||||||
+cat "$DF"
|
|
||||||
vgs
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1"
|
|
||||||
lvremove -y $vg
|
|
||||||
vgremove $vg
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/serial
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/serial"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
-rm $DF
|
|
||||||
+rm "$DF"
|
|
||||||
aux wipefs_a "$DEV1"
|
|
||||||
-mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device
|
|
||||||
-echo -n " t10.123 456 " > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device"
|
|
||||||
+echo -n " t10.123 456 " > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-grep "IDNAME=t10.123_456 DEVNAME" $DF
|
|
||||||
+cat "$DF"
|
|
||||||
+grep "IDNAME=t10.123_456 DEVNAME" "$DF"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
-PVID1=`pvs "$DEV1" --noheading -o uuid | tr -d - | awk '{print $1}'`
|
|
||||||
-cat $DF | grep -v IDNAME > $DFTMP
|
|
||||||
-cat $DFTMP
|
|
||||||
-echo "IDTYPE=sys_wwid IDNAME=__t10.123__456__ DEVNAME=${DEV1} PVID=${PVID1}" >> $DFTMP
|
|
||||||
-cp $DFTMP $DF
|
|
||||||
-cat $DF
|
|
||||||
+eval "$(pvs --noheading --nameprefixes -o uuid "$DEV1")"
|
|
||||||
+PVID1=${LVM2_PV_UUID//-/}
|
|
||||||
+cat "$DF" | grep -v IDNAME > "$DFTMP"
|
|
||||||
+cat "$DFTMP"
|
|
||||||
+echo "IDTYPE=sys_wwid IDNAME=__t10.123__456__ DEVNAME=${DEV1} PVID=${PVID1}" >> "$DFTMP"
|
|
||||||
+cp "$DFTMP" "$DF"
|
|
||||||
+cat "$DF"
|
|
||||||
vgs
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1"
|
|
||||||
lvremove -y $vg
|
|
||||||
vgremove $vg
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
-rm $DF
|
|
||||||
+rm "$DF"
|
|
||||||
aux wipefs_a "$DEV1"
|
|
||||||
-mkdir -p $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device
|
|
||||||
-echo -n " naa.123 456 " > $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+mkdir -p "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device"
|
|
||||||
+echo -n " naa.123 456 " > "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
lvmdevices --adddev "$DEV1"
|
|
||||||
-cat $DF
|
|
||||||
-grep "IDNAME=naa.123__456 DEVNAME" $DF
|
|
||||||
+cat "$DF"
|
|
||||||
+grep "IDNAME=naa.123__456 DEVNAME" "$DF"
|
|
||||||
vgcreate $vg "$DEV1"
|
|
||||||
-PVID1=`pvs "$DEV1" --noheading -o uuid | tr -d - | awk '{print $1}'`
|
|
||||||
-cat $DF | grep -v IDNAME > $DFTMP
|
|
||||||
-cat $DFTMP
|
|
||||||
-echo "IDTYPE=sys_wwid IDNAME=__naa.123__456__ DEVNAME=${DEV1} PVID=${PVID1}" >> $DFTMP
|
|
||||||
-cp $DFTMP $DF
|
|
||||||
-cat $DF
|
|
||||||
+eval "$(pvs --noheading --nameprefixes -o uuid "$DEV1")"
|
|
||||||
+PVID1=${LVM2_PV_UUID//-/}
|
|
||||||
+cat "$DF" | grep -v IDNAME > "$DFTMP"
|
|
||||||
+cat "$DFTMP"
|
|
||||||
+echo "IDTYPE=sys_wwid IDNAME=__naa.123__456__ DEVNAME=${DEV1} PVID=${PVID1}" >> "$DFTMP"
|
|
||||||
+cp "$DFTMP" "$DF"
|
|
||||||
+cat "$DF"
|
|
||||||
vgs
|
|
||||||
pvs -o+deviceidtype,deviceid "$DEV1"
|
|
||||||
lvremove -y $vg
|
|
||||||
vgremove $vg
|
|
||||||
-rm $SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid
|
|
||||||
+rm "$SYS_DIR/dev/block/$MAJOR1:$MINOR1/device/wwid"
|
|
||||||
cleanup_sysfs
|
|
||||||
|
|
||||||
|
|
||||||
@@ -433,4 +434,3 @@ cleanup_sysfs
|
|
||||||
# This would let the user specify the second naa wwid.
|
|
||||||
|
|
||||||
remove_base
|
|
||||||
-rmmod scsi_debug || true
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From a55bd2ddc1ca21ca6fb44df58d7287f619cb54f6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Thu, 14 Sep 2023 01:42:29 +0200
|
|
||||||
Subject: [PATCH 23/24] tests: skip test when lvmdbusd runs on the system
|
|
||||||
|
|
||||||
lvmdbusd changes $RUNDIR results.
|
|
||||||
---
|
|
||||||
test/shell/duplicate-pvs-md0.sh | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/test/shell/duplicate-pvs-md0.sh b/test/shell/duplicate-pvs-md0.sh
|
|
||||||
index ea800cf5a..9c1005b0b 100644
|
|
||||||
--- a/test/shell/duplicate-pvs-md0.sh
|
|
||||||
+++ b/test/shell/duplicate-pvs-md0.sh
|
|
||||||
@@ -27,6 +27,9 @@ _clear_online_files() {
|
|
||||||
|
|
||||||
. lib/inittest
|
|
||||||
|
|
||||||
+# Running lvmdbusd with its fullreport scannnig changes $RUNDIR results
|
|
||||||
+pgrep lvmdbusd && skip "Test cannot work, while there is running lvmdbusd."
|
|
||||||
+
|
|
||||||
MD_LEVEL=${MD_LEVEL-0}
|
|
||||||
|
|
||||||
aux prepare_devs 4 10
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
From dc31f8bdd8d6685c04802a023b769fe9310f1c91 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Kabelac <zkabelac@redhat.com>
|
|
||||||
Date: Wed, 23 Aug 2023 13:47:06 +0200
|
|
||||||
Subject: [PATCH 24/24] tests: better slowdown
|
|
||||||
|
|
||||||
---
|
|
||||||
test/shell/lvconvert-mirror.sh | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/shell/lvconvert-mirror.sh b/test/shell/lvconvert-mirror.sh
|
|
||||||
index 17ed033b2..461d14748 100644
|
|
||||||
--- a/test/shell/lvconvert-mirror.sh
|
|
||||||
+++ b/test/shell/lvconvert-mirror.sh
|
|
||||||
@@ -323,10 +323,10 @@ SHOULD=
|
|
||||||
aux throttle_dm_mirror || SHOULD=should
|
|
||||||
|
|
||||||
# Use large enough mirror that takes time to sychronize with small regionsize
|
|
||||||
-lvcreate -aey -L30 -Zn -Wn --type mirror --regionsize 16k -m2 -n $lv1 $vg "$dev1" "$dev2" "$dev4" "$dev3:$DEVRANGE"
|
|
||||||
+lvcreate -aey -L20 -Zn -Wn --type mirror --regionsize 4k -m2 -n $lv1 $vg "$dev1" "$dev2" "$dev4" "$dev3:$DEVRANGE"
|
|
||||||
$SHOULD not lvconvert -m-1 $vg/$lv1 "$dev1" 2>&1 | tee out
|
|
||||||
aux restore_dm_mirror
|
|
||||||
-grep "not in-sync" out
|
|
||||||
+$SHOULD grep "not in-sync" out
|
|
||||||
|
|
||||||
lvconvert $vg/$lv1 # wait
|
|
||||||
|
|
||||||
@@ -341,7 +341,7 @@ lvremove -ff $vg
|
|
||||||
aux throttle_dm_mirror || :
|
|
||||||
# No parallel lvconverts on a single LV please
|
|
||||||
# Use big enough mirror size and small regionsize to run on all test machines succesfully
|
|
||||||
-lvcreate -aey -Zn -Wn -L30 --type mirror --regionsize 16k -m1 -n $lv1 $vg "$dev1" "$dev2" "$dev3:0-8"
|
|
||||||
+lvcreate -aey -Zn -Wn -L20 --type mirror --regionsize 4k -m1 -n $lv1 $vg "$dev1" "$dev2" "$dev3:0-8"
|
|
||||||
check mirror $vg $lv1
|
|
||||||
check mirror_legs $vg $lv1 2
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.3
|
|
||||||
|
|
BIN
LVM2.2.03.22.tgz
(Stored with Git LFS)
BIN
LVM2.2.03.22.tgz
(Stored with Git LFS)
Binary file not shown.
@ -1,16 +0,0 @@
|
|||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
|
|
||||||
iQIzBAABCAAdFiEE1QGkeEQK4v0TChvouREkMeUJA58FAmTKUZsACgkQuREkMeUJ
|
|
||||||
A5+Z1A//eTi65tos1se3+iivR+K1soXQLagU3WdwgOUbPu5amjipNZ6iMWCuGLOH
|
|
||||||
XleuHRGQb0ytnkRwlUeYgUkcaFqbofH9FmY5Hugp20BE+8P3bfeAX5a5ApsoU0wF
|
|
||||||
fY+XlSyuq3waFAM7XadxTgiOqWNT4Y+CnO3IUfAlkupOZi2h+00U8FlroIZdLqKR
|
|
||||||
919CpIyh9obPxvvQeE30vNQVA8jUazG7pkq9J/bVFf4ZYqJ1AieDFQ05dqAvdO4e
|
|
||||||
I8A/0Hc6n5OZBgbK1eX8EvpYuQOd5YYVFtsLoYzCl6Q1AZ5hviddifqxwnSHyPX7
|
|
||||||
iXt82ppRBIEO500QK/R+6ZAu1qF7S5ZVQMvWuSQM4hYwxJfipFaWDljpS2Gc8x8h
|
|
||||||
YIB7BSbNJMFu1Qf1iE/I8yqTt7x+Q/zL8paat5P5ZpsD//tG/CAWyfcml7ieTGDY
|
|
||||||
yoMuIY8GzAFYYzSWtubQEJx75E757cexOeZu5oiDfjSU6JxYFzoNWoF79NUVzTgU
|
|
||||||
bscvzWnibIjGpDoSD6aCjjmmNbbpnSALjUdKnUlt+KDR72u66KDssTQOpbg/W17T
|
|
||||||
Ghxe+I0kF8FObSD9T7CockCx81dqS7lrq8jLkMmAk9TKzr4OPi8mMjCMqGha+swg
|
|
||||||
Z/Sy/z/V7BAdknyRvg4ZQKxrA+9rRizt/xMlgpnRY8nvk+8VgYw=
|
|
||||||
=yBW6
|
|
||||||
-----END PGP SIGNATURE-----
|
|
BIN
LVM2.2.03.24.tgz
(Stored with Git LFS)
Normal file
BIN
LVM2.2.03.24.tgz
(Stored with Git LFS)
Normal file
Binary file not shown.
16
LVM2.2.03.24.tgz.asc
Normal file
16
LVM2.2.03.24.tgz.asc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
|
iQIzBAABCAAdFiEE1QGkeEQK4v0TChvouREkMeUJA58FAmZF3zYACgkQuREkMeUJ
|
||||||
|
A5+JxA/9HXxpPzrLKLo4+TmGHw53eVp/xrFCNt43AO+cywJ/iAyZNa/Moyz8xD1k
|
||||||
|
nBtEoGk/2yooJlHWnrtxKCXGVuNiUwuzRwwsU/EVB1+UA/x8GMUaQHelOzGwCFsd
|
||||||
|
YxmsoQ6rGE9+GMfz3AMd0noOPJkj5g8GXIy1Dv3wF8/xdaRcEEODbPYCBmVTVtv7
|
||||||
|
vrNVAP9yXo4tibV05C0Arm8D9ymWK/pXjE3LHD1m7s66gLDziubYNuiOik4nb5y9
|
||||||
|
DiECfO1B1fNXMF51FH3miRia/UgoDbrJhkVTTDrDO9ivjq4A7LZPpBmV93gNDOM9
|
||||||
|
1aGymKFv0zgzveyOdr+As7GvH8ShQSbcXUAwerGXjvcjqx3VbPR0yZo1jY6cDY+F
|
||||||
|
58K1bGG0XmdfxasWW/ZZjpCPs2bfpaMadDcnOC9gs7h5jVF7D7rAS+twazGqI/Yg
|
||||||
|
Ak2IsBMVYV2WRuEyBHqCYKsQlhsybtYm+ptn7k9qc1QDJXXrjJbE1USmNtdC5Dyj
|
||||||
|
nvpkkxdehzxDgcCKg1xr2lKkKTXO40+uXlhaDRmmVvAkrXIJQGqizfbB6rk3LsM8
|
||||||
|
tKfCOyQbp7nE0ZtOYmZIqeb0WZ1N/mHIOjzMefx7IfDKX4neJ7f1kB4F3ntjsIOK
|
||||||
|
hNjVH8CTjKqckMTJzwR/zpIXp3LfSvdNGVfVX/ghsSr8A7aiODU=
|
||||||
|
=T58+
|
||||||
|
-----END PGP SIGNATURE-----
|
@ -34,13 +34,14 @@ diff -Nupr a/scripts/lvm2-pvscan.service.in b/scripts/lvm2-pvscan.service.in
|
|||||||
diff -Nupr a/udev/69-dm-lvm.rules.in b/udev/69-dm-lvm.rules.in
|
diff -Nupr a/udev/69-dm-lvm.rules.in b/udev/69-dm-lvm.rules.in
|
||||||
--- a/udev/69-dm-lvm.rules.in 2022-09-02 14:04:51.074880312 +0800
|
--- a/udev/69-dm-lvm.rules.in 2022-09-02 14:04:51.074880312 +0800
|
||||||
+++ b/udev/69-dm-lvm.rules.in 2022-09-02 14:07:19.978230990 +0800
|
+++ b/udev/69-dm-lvm.rules.in 2022-09-02 14:07:19.978230990 +0800
|
||||||
@@ -10,6 +10,9 @@ SUBSYSTEM!="block", GOTO="lvm_end"
|
@@ -10,6 +10,9 @@ (LVM_EXEC_RULE)
|
||||||
|
|
||||||
ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="lvm_end"
|
ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="lvm_end"
|
||||||
|
|
||||||
+IMPORT{cmdline}="nolvm"
|
+IMPORT{cmdline}="nolvm"
|
||||||
+ENV{nolvm}=="?*", GOTO="lvm_end"
|
+ENV{nolvm}=="?*", GOTO="lvm_end"
|
||||||
+
|
+
|
||||||
# Only process devices already marked as a PV - this requires blkid to be called before.
|
# Ignore PVs on LVs.
|
||||||
ENV{ID_FS_TYPE}!="LVM2_member", GOTO="lvm_end"
|
# This is usually a case of an LV being used for a guest VM
|
||||||
ENV{DM_MULTIPATH_DEVICE_PATH}=="1", GOTO="lvm_end"
|
# image, where the guest is using lvm. The host should
|
||||||
|
# ignore lvm data from the guest and not attempt to scan or
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
From 3ef8ec8eb6a8ccde2ca4db53fcac224eedaf4a28 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Su Yue <glass.su@suse.com>
|
||||||
|
Date: Tue, 13 Aug 2024 20:57:53 +0800
|
||||||
|
Subject: [PATCH] lvm2-monitor.service: start after system fully booted
|
||||||
|
|
||||||
|
This patch is for 'bsc#1228854 - lvm2-monitor.service fails to start'.
|
||||||
|
All verions with system.devices enabled should contain this patch.
|
||||||
|
|
||||||
|
Signed-off-by: Su Yue <glass.su@suse.com>
|
||||||
|
---
|
||||||
|
scripts/lvm2_monitoring_systemd_red_hat.service.in | 5 +----
|
||||||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/scripts/lvm2_monitoring_systemd_red_hat.service.in b/scripts/lvm2_monitoring_systemd_red_hat.service.in
|
||||||
|
index c0c96e316b67..b50007cd8bd2 100644
|
||||||
|
--- a/scripts/lvm2_monitoring_systemd_red_hat.service.in
|
||||||
|
+++ b/scripts/lvm2_monitoring_systemd_red_hat.service.in
|
||||||
|
@@ -3,9 +3,6 @@ Description=Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progres
|
||||||
|
Documentation=man:dmeventd(8) man:lvcreate(8) man:lvchange(8) man:vgchange(8)
|
||||||
|
Requires=dm-event.socket
|
||||||
|
After=dm-event.socket dm-event.service
|
||||||
|
-Before=local-fs-pre.target shutdown.target
|
||||||
|
-DefaultDependencies=no
|
||||||
|
-Conflicts=shutdown.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
@@ -15,4 +12,4 @@ ExecStop=@SBINDIR@/lvm vgchange --monitor n
|
||||||
|
RemainAfterExit=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
-WantedBy=sysinit.target
|
||||||
|
+WantedBy=multi-user.target
|
||||||
|
--
|
||||||
|
2.45.2
|
||||||
|
|
2
lvm.conf
2
lvm.conf
@ -128,7 +128,7 @@ devices {
|
|||||||
# be used, regardless of this setting, when the --devicesfile
|
# be used, regardless of this setting, when the --devicesfile
|
||||||
# option is set to a specific file name.
|
# option is set to a specific file name.
|
||||||
# This configuration option has an automatic default value.
|
# This configuration option has an automatic default value.
|
||||||
# use_devicesfile = 0
|
# use_devicesfile = 1
|
||||||
|
|
||||||
# Configuration option devices/devicesfile.
|
# Configuration option devices/devicesfile.
|
||||||
# The name of the system devices file, listing devices that LVM should use.
|
# The name of the system devices file, listing devices that LVM should use.
|
||||||
|
178
lvm2.changes
178
lvm2.changes
@ -1,3 +1,181 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 30 02:26:00 UTC 2024 - Glass Su <glass.su@suse.com>
|
||||||
|
|
||||||
|
- [SLFO] systemd 254 is missing reworked SYSTEMD_READY logic in device mapper udev rules (bsc#1229518)
|
||||||
|
* update udev dependency version in lvm2.spec
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Aug 13 13:08:00 UTC 2024 - Glass Su <glass.su@suse.com>
|
||||||
|
|
||||||
|
- lvm2-monitor.service fails to start (boo#1228854)
|
||||||
|
+ bug-1228854_lvm2-monitor-service-start-after-system-fully-booted.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jul 22 01:44:00 UTC 2024 - Glass Su <glass.su@suse.com>
|
||||||
|
|
||||||
|
- enable devices file feature by default - see lvmdevices(8)
|
||||||
|
* enable '--with-default-use-devices-file=1' in lvm2.spec
|
||||||
|
* update commented default value of 'use_devicesfile' in lvm2.conf
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jun 26 22:59:00 UTC 2024 - Heming Zhao <heming.zhao@suse.com>
|
||||||
|
|
||||||
|
- add rpm dependency in spec file for aligning new DM udev rules (bsc#1225783)
|
||||||
|
* update lvm2.spec for multipath-tools
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jun 18 04:09:00 UTC 2024 - Glass Su <glass.su@suse.com>
|
||||||
|
|
||||||
|
- change BuildRequires due to corosync devel package rename
|
||||||
|
* update lvm2.spec, use pkgconfig(corosync)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Jun 1 01:46:00 UTC 2024 - Heming Zhao <heming.zhao@suse.com>
|
||||||
|
|
||||||
|
- add rpm dependency in spec file for aligning new DM udev rules (bsc#1225783)
|
||||||
|
* update lvm2.spec
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun May 26 13:14:00 UTC 2024 - Heming Zhao <heming.zhao@suse.com>
|
||||||
|
|
||||||
|
- Update lvm2 from LVM2.2.03.22 to LVM2.2.03.24
|
||||||
|
|
||||||
|
*** WHATS_NEW from 2.03.22 to 2.03.24 ***
|
||||||
|
|
||||||
|
Version 2.03.24 - 16th May 2024
|
||||||
|
===============================
|
||||||
|
Lvconvert supports VDO options for thin-pool with vdo conversion.
|
||||||
|
Improve placement to .data.rel.ro and .rodata sections.
|
||||||
|
Fix support for -y and -W when creating thinpool with vdo.
|
||||||
|
Bettter support for runtime valgrind detection.
|
||||||
|
Allow command interruption when communicating with dmeventd.
|
||||||
|
Fix resize of VDO volume used for thin pool data volume.
|
||||||
|
Use -Wl,-z,now and -Wl,--as-needed for compilation by default.
|
||||||
|
Require 3.7 as minimal version for sanlock.
|
||||||
|
Share code for closing opened desriptors on program startup.
|
||||||
|
Fix memleak in lvmcache.
|
||||||
|
Add configure --with-default-event-activation=ON setting.
|
||||||
|
Fix return value from reporter function when hitting internal error.
|
||||||
|
Skip checking of pools for lvremove and vgremove commands.
|
||||||
|
VDO modprobes dm-vdo for 6.9 kernel and kvdo for older kernel version.
|
||||||
|
Fix lvs reporting for VDO volumes with new upstream kernel driver.
|
||||||
|
Don't import DM_UDEV_DISABLE_OTHER_RULES_FLAG in LVM rules, DM rules cover it.
|
||||||
|
Fix table line generation for cache snapshots using cachevol.
|
||||||
|
Enhance lvconvert support for external origins stacking.
|
||||||
|
When swapping LV names also swap properties like hostname, time and data.
|
||||||
|
Fix removal of stacked external origins.
|
||||||
|
Lock filesystem when converting volume to read-only external origin.
|
||||||
|
Support external origin between different thin-pool.
|
||||||
|
Improve validation of acceptable volumes for external origins.
|
||||||
|
Reduce amount of preloaded devices for complex device trees.
|
||||||
|
Avoid logging problems from monitoring snapshots with inactive origins.
|
||||||
|
Check for cache policy module presence in kernel's builtin modules file.
|
||||||
|
Add configure --with-modulesdir to select kernel modules directory.
|
||||||
|
Support creation of thin-pool with VDO use for its data volume.
|
||||||
|
|
||||||
|
Version 2.03.23 - 21st November 2023
|
||||||
|
====================================
|
||||||
|
Set the first lv_attr flag for raid integrity images to i or I.
|
||||||
|
Add -A option for pvs and pvscan to show PVs outside devices file.
|
||||||
|
Improve searched_devnames temp file usage to prevent redundant scanning.
|
||||||
|
Change default search_for_devnames from auto to all.
|
||||||
|
Add lvmdevices --refresh to search for missing PVIDs on all devices.
|
||||||
|
Add comparison between old and new entries in lvmdevices --check.
|
||||||
|
Fix device_id matching order - match non-devname first.
|
||||||
|
Fix "lvconvert -m 0" when there is other than first in-sync leg.
|
||||||
|
Use system.devices as default for dmeventd when dmeventd.devices is undefined.
|
||||||
|
Accept WWIDs containing QEMU HARDDISK for device_id.
|
||||||
|
Improve handling of non-standard WWID prefixes used for device_id.
|
||||||
|
Configure automatically enables cmdlib for dmeventd and notify-dbus for dbus.
|
||||||
|
Fix hint calculation for pools with zero or error segment.
|
||||||
|
Configure supports --disable-shared to build only static binaries.
|
||||||
|
Configure supports --without-{blkid|systemd|udev} for easier static build.
|
||||||
|
Refresh device ids if the system changes.
|
||||||
|
Fix pvmove when specifying raid components as moved LVs.
|
||||||
|
Enhance error detection for lvm_import_vdo.
|
||||||
|
Support PV lists with thin lvconvert.
|
||||||
|
Fix support for lvm_import_vdo with SCSI VDO volumes.
|
||||||
|
Fix locking issue leading to hanging concurrent vgchange --refresh.
|
||||||
|
Recognize lvm.conf report/headings=2 for full column names in report headings.
|
||||||
|
Add --headings none|abbrev|full cmd line option to set report headings type.
|
||||||
|
Fix conversion to thin pool using lvmlockd.
|
||||||
|
Fix conversion from thick into thin volume using lvmlockd.
|
||||||
|
Require writable LV for conversion to vdo pool.
|
||||||
|
Fix return value from lvconvert integrity remove.
|
||||||
|
Preserve UUID for pool metadata spare.
|
||||||
|
Preserve UUID for swapped pool metadata.
|
||||||
|
Rewrite validation of device name entries used as device_id.
|
||||||
|
|
||||||
|
*** WHATS_NEW_DM from 1.02.196 to 1.02.198 ***
|
||||||
|
|
||||||
|
Version 1.02.198 - 16th May 2024
|
||||||
|
================================
|
||||||
|
Fix static only compilation of libdevmapper.a and dmsetup tool.
|
||||||
|
Use better code for closing opened descriptors when starting dmeventd.
|
||||||
|
Correct dmeventd -R for systemd environment.
|
||||||
|
Restart of dmeventd -R checks pid file to detect running dmeventd first.
|
||||||
|
Query with dmeventd -i quickly ends when there is no running dmeventd.
|
||||||
|
Enhance dm_get_status_raid to handle mismatching status or reported legs.
|
||||||
|
Create /dev/disk/by-label symlinks for DM devs that have crypto as next layer.
|
||||||
|
Persist udev db for DM devs on cleanup used in initrd to rootfs transition.
|
||||||
|
Process synthetic udev events other than 'add/change' as 'change' events.
|
||||||
|
Increase DM_UDEV_RULES_VSN to 3 to indicate changed udev rules.
|
||||||
|
Rename DM_NOSCAN to .DM_NOSCAN so it's not stored in udev db.
|
||||||
|
Rename DM_SUSPENDED to .DM_SUSPENDED so it's not stored in udev db.
|
||||||
|
Do not import DM_UDEV_DISABLE_OTHER_RULES_FLAG from db in 10-dm-disk.rules.
|
||||||
|
Test DISK_RO after importing properties from db in 10-dm.rules.
|
||||||
|
Also import ID_FS_TYPE in 13-dm-disk.rules from db if needed.
|
||||||
|
|
||||||
|
Version 1.02.197 - 21st November 2023
|
||||||
|
=====================================
|
||||||
|
Fix invalid JSON report if using DM_REPORT_OUTPUT_MULTIPLE_TIMES and selection.
|
||||||
|
Propagate ioctl errno from dm_task_run when creating new table line.
|
||||||
|
Add support for group aliases in dmstats.
|
||||||
|
Add support for exit-on file for dmeventd to reduce shutdown delays.
|
||||||
|
Add configure option --with-dmeventd-exit-on-path to specify default path.
|
||||||
|
Add dmsetup --headings none|abbrev|full to set report headings type.
|
||||||
|
Add DM_REPORT_OUTPUT_FIELD_IDS_IN_HEADINGS to provide alternative headings.
|
||||||
|
|
||||||
|
- Drop patches that have been merged into upstream
|
||||||
|
- 0001-lvconvert-swapmetadata-fix-lvmlockd-locking.patch
|
||||||
|
- 0002-lvconvert-fix-ret-values-fro-integrity-remove.patch
|
||||||
|
- 0003-lvconvert-fix-regresion-from-integrity-check.patch
|
||||||
|
- 0004-gcc-cleanup-warnings.patch
|
||||||
|
- 0005-lvmlockd-fix-thick-to-thin-lv-conversion.patch
|
||||||
|
- 0006-lvmlockd-let-lockd_init_lv_args-set-lock_args.patch
|
||||||
|
- 0007-lvmlockd-fix-lvconvert-to-thin-pool.patch
|
||||||
|
- 0008-lvconvert-run-error-path-code-only-for-shared-VG.patch
|
||||||
|
- 0009-vgchange-acquire-an-exclusive-VG-lock-for-refresh.patch
|
||||||
|
- 0010-lvmlockd-client-mutex-ordering.patch
|
||||||
|
- 0011-filesystem-move-stat-after-open-check.patch
|
||||||
|
- 0012-tests-check-for-writecache.patch
|
||||||
|
- 0013-lvresize-fix-32-bit-overflow-in-size-calculation.patch
|
||||||
|
- 0014-gcc-fix-warnings-for-x32-architecture.patch
|
||||||
|
- 0015-gcc-warning-missing-braces-around-initializer.patch
|
||||||
|
- 0016-test-improve-aux-teardown.patch
|
||||||
|
- 0017-tests-aux-try-with-extra-sleep.patch
|
||||||
|
- 0018-tests-aux-using-singl-lvmconf-call.patch
|
||||||
|
- 0019-tests-missing-to-check-for-writecache-support.patch
|
||||||
|
- 0020-tests-pvmove-large-disk-area.patch
|
||||||
|
- 0021-tests-enforce-full-fs-check.patch
|
||||||
|
- 0022-tests-update-for-work-in-fake-dev-environment.patch
|
||||||
|
- 0023-tests-skip-test-when-lvmdbusd-runs-on-the-system.patch
|
||||||
|
- 0024-tests-better-slowdown.patch
|
||||||
|
|
||||||
|
- Update patch
|
||||||
|
- bug-1184687_Add-nolvm-for-kernel-cmdline.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 21 11:30:07 UTC 2024 - Dominique Leuenberger <dimstar@opensuse.org>
|
||||||
|
|
||||||
|
- Use %patch -P N instead of deprecated %patchN syntax.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 22 12:54:54 UTC 2024 - pgajdos@suse.com
|
||||||
|
|
||||||
|
- remove dependency on /usr/bin/python3 using
|
||||||
|
%python3_fix_shebang_path macro, [bsc#1212476]
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Sep 18 02:06:09 UTC 2023 - Glass Su <glass.su@suse.com>
|
Mon Sep 18 02:06:09 UTC 2023 - Glass Su <glass.su@suse.com>
|
||||||
|
|
||||||
|
102
lvm2.spec
102
lvm2.spec
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file
|
# spec file
|
||||||
#
|
#
|
||||||
# Copyright (c) 2023 SUSE LLC
|
# Copyright (c) 2024 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -21,11 +21,11 @@
|
|||||||
%define libname_event libdevmapper-event1_03
|
%define libname_event libdevmapper-event1_03
|
||||||
%define _udevdir %(pkg-config --variable=udevdir udev)
|
%define _udevdir %(pkg-config --variable=udevdir udev)
|
||||||
%define cmdlib liblvm2cmd2_03
|
%define cmdlib liblvm2cmd2_03
|
||||||
%define lvm2_version 2.03.22
|
%define lvm2_version 2.03.24
|
||||||
# For device_mapper_version, it's package version, see bsc#1199074.
|
# For device_mapper_version, it's package version, see bsc#1199074.
|
||||||
# Also note there is another dm version on below "sed -ie ... VERSION_DM".
|
# Also note there is another dm version on below "sed -ie ... VERSION_DM".
|
||||||
%define upstream_device_mapper_version 1.02.196
|
%define upstream_device_mapper_version 1.02.198
|
||||||
%define device_mapper_version %{lvm2_version}_1.02.196
|
%define device_mapper_version %{lvm2_version}_1.02.198
|
||||||
%define thin_provisioning_version 0.7.0
|
%define thin_provisioning_version 0.7.0
|
||||||
%define _supportsanlock 1
|
%define _supportsanlock 1
|
||||||
%define dlm_version 4.0.9
|
%define dlm_version 4.0.9
|
||||||
@ -40,6 +40,10 @@
|
|||||||
%define sanlock_version 3.3.0
|
%define sanlock_version 3.3.0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?suse_version} >= 1600
|
||||||
|
%define default_use_devices_file 1
|
||||||
|
%endif
|
||||||
|
|
||||||
%global flavor @BUILD_FLAVOR@%{nil}
|
%global flavor @BUILD_FLAVOR@%{nil}
|
||||||
%define psuffix %{nil}
|
%define psuffix %{nil}
|
||||||
|
|
||||||
@ -71,30 +75,7 @@ Source42: ftp://sourceware.org/pub/lvm2/LVM2.%{version}.tgz.asc
|
|||||||
Source99: baselibs.conf
|
Source99: baselibs.conf
|
||||||
|
|
||||||
# Upstream patches
|
# Upstream patches
|
||||||
Patch0001: 0001-lvconvert-swapmetadata-fix-lvmlockd-locking.patch
|
#Patch0001: n/a
|
||||||
Patch0002: 0002-lvconvert-fix-ret-values-fro-integrity-remove.patch
|
|
||||||
Patch0003: 0003-lvconvert-fix-regresion-from-integrity-check.patch
|
|
||||||
Patch0004: 0004-gcc-cleanup-warnings.patch
|
|
||||||
Patch0005: 0005-lvmlockd-fix-thick-to-thin-lv-conversion.patch
|
|
||||||
Patch0006: 0006-lvmlockd-let-lockd_init_lv_args-set-lock_args.patch
|
|
||||||
Patch0007: 0007-lvmlockd-fix-lvconvert-to-thin-pool.patch
|
|
||||||
Patch0008: 0008-lvconvert-run-error-path-code-only-for-shared-VG.patch
|
|
||||||
Patch0009: 0009-vgchange-acquire-an-exclusive-VG-lock-for-refresh.patch
|
|
||||||
Patch0010: 0010-lvmlockd-client-mutex-ordering.patch
|
|
||||||
Patch0011: 0011-filesystem-move-stat-after-open-check.patch
|
|
||||||
Patch0012: 0012-tests-check-for-writecache.patch
|
|
||||||
Patch0013: 0013-lvresize-fix-32-bit-overflow-in-size-calculation.patch
|
|
||||||
Patch0014: 0014-gcc-fix-warnings-for-x32-architecture.patch
|
|
||||||
Patch0015: 0015-gcc-warning-missing-braces-around-initializer.patch
|
|
||||||
Patch0016: 0016-test-improve-aux-teardown.patch
|
|
||||||
Patch0017: 0017-tests-aux-try-with-extra-sleep.patch
|
|
||||||
Patch0018: 0018-tests-aux-using-singl-lvmconf-call.patch
|
|
||||||
Patch0019: 0019-tests-missing-to-check-for-writecache-support.patch
|
|
||||||
Patch0020: 0020-tests-pvmove-large-disk-area.patch
|
|
||||||
Patch0021: 0021-tests-enforce-full-fs-check.patch
|
|
||||||
Patch0022: 0022-tests-update-for-work-in-fake-dev-environment.patch
|
|
||||||
Patch0023: 0023-tests-skip-test-when-lvmdbusd-runs-on-the-system.patch
|
|
||||||
Patch0024: 0024-tests-better-slowdown.patch
|
|
||||||
# SUSE patches: 1000+ for LVM
|
# SUSE patches: 1000+ for LVM
|
||||||
# Never upstream
|
# Never upstream
|
||||||
Patch1001: cmirrord_remove_date_time_from_compilation.patch
|
Patch1001: cmirrord_remove_date_time_from_compilation.patch
|
||||||
@ -106,6 +87,7 @@ Patch1006: fate-31841-01_fsadm-add-support-to-resize-check-btrfs-filesystem
|
|||||||
Patch1007: fate-31841-02_man-add-support-for-btrfs.patch
|
Patch1007: fate-31841-02_man-add-support-for-btrfs.patch
|
||||||
Patch1008: fate-31841-03_tests-new-test-suite-of-fsadm-for-btrfs.patch
|
Patch1008: fate-31841-03_tests-new-test-suite-of-fsadm-for-btrfs.patch
|
||||||
Patch1009: bug-1214071-blkdeactivate_calls_wrong_mountpoint.patch
|
Patch1009: bug-1214071-blkdeactivate_calls_wrong_mountpoint.patch
|
||||||
|
Patch1010: bug-1228854_lvm2-monitor-service-start-after-system-fully-booted.patch
|
||||||
# SUSE patches 2000+ for device mapper, udev rules
|
# SUSE patches 2000+ for device mapper, udev rules
|
||||||
Patch2001: bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-rules.patch
|
Patch2001: bug-1012973_simplify-special-case-for-md-in-69-dm-lvm-rules.patch
|
||||||
# SUSE patches 3000+ for test code
|
# SUSE patches 3000+ for test code
|
||||||
@ -116,11 +98,15 @@ Patch4001: bug-1037309_Makefile-skip-compliling-daemons-lvmlockd-directory.
|
|||||||
BuildRequires: kmod-compat
|
BuildRequires: kmod-compat
|
||||||
BuildRequires: libaio-devel
|
BuildRequires: libaio-devel
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
|
BuildRequires: python-rpm-macros
|
||||||
BuildRequires: thin-provisioning-tools >= %{thin_provisioning_version}
|
BuildRequires: thin-provisioning-tools >= %{thin_provisioning_version}
|
||||||
BuildRequires: pkgconfig(libsystemd)
|
BuildRequires: pkgconfig(libsystemd)
|
||||||
BuildRequires: pkgconfig(libudev)
|
BuildRequires: pkgconfig(libudev)
|
||||||
Requires: device-mapper >= %{device_mapper_version}
|
Requires: device-mapper >= %{device_mapper_version}
|
||||||
Requires: modutils
|
Requires: modutils
|
||||||
|
# see bsc#1225783 for following 2 lines
|
||||||
|
Requires: (udev >= 254.17 if udev)
|
||||||
|
Requires: (multipath-tools >= 0.9.9 if multipath-tools)
|
||||||
Requires(post): coreutils
|
Requires(post): coreutils
|
||||||
Requires(postun):coreutils
|
Requires(postun):coreutils
|
||||||
Provides: lvm = %{version}
|
Provides: lvm = %{version}
|
||||||
@ -133,8 +119,8 @@ BuildRequires: suse-module-tools
|
|||||||
BuildRequires: pkgconfig(libselinux)
|
BuildRequires: pkgconfig(libselinux)
|
||||||
BuildRequires: pkgconfig(libsepol)
|
BuildRequires: pkgconfig(libsepol)
|
||||||
%else
|
%else
|
||||||
BuildRequires: libcorosync-devel
|
|
||||||
BuildRequires: pkgconfig(blkid)
|
BuildRequires: pkgconfig(blkid)
|
||||||
|
BuildRequires: pkgconfig(corosync)
|
||||||
%if %{with lockd}
|
%if %{with lockd}
|
||||||
BuildRequires: libdlm-devel >= %{dlm_version}
|
BuildRequires: libdlm-devel >= %{dlm_version}
|
||||||
%if 0%{_supportsanlock} == 1
|
%if 0%{_supportsanlock} == 1
|
||||||
@ -154,44 +140,21 @@ Volume Manager.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n LVM2.%{version}
|
%setup -q -n LVM2.%{version}
|
||||||
%patch0001 -p1
|
%patch -P 1001 -p1
|
||||||
%patch0002 -p1
|
%patch -P 1002 -p1
|
||||||
%patch0003 -p1
|
%patch -P 1003 -p1
|
||||||
%patch0004 -p1
|
%patch -P 1004 -p1
|
||||||
%patch0005 -p1
|
%patch -P 1005 -p1
|
||||||
%patch0006 -p1
|
%patch -P 1006 -p1
|
||||||
%patch0007 -p1
|
%patch -P 1007 -p1
|
||||||
%patch0008 -p1
|
%patch -P 1008 -p1
|
||||||
%patch0009 -p1
|
%patch -P 1009 -p1
|
||||||
%patch0010 -p1
|
%patch -P 1010 -p1
|
||||||
%patch0011 -p1
|
%patch -P 2001 -p1
|
||||||
%patch0012 -p1
|
%patch -P 3001 -p1
|
||||||
%patch0013 -p1
|
|
||||||
%patch0014 -p1
|
|
||||||
%patch0015 -p1
|
|
||||||
%patch0016 -p1
|
|
||||||
%patch0017 -p1
|
|
||||||
%patch0018 -p1
|
|
||||||
%patch0019 -p1
|
|
||||||
%patch0020 -p1
|
|
||||||
%patch0021 -p1
|
|
||||||
%patch0022 -p1
|
|
||||||
%patch0023 -p1
|
|
||||||
%patch0024 -p1
|
|
||||||
%patch1001 -p1
|
|
||||||
%patch1002 -p1
|
|
||||||
%patch1003 -p1
|
|
||||||
%patch1004 -p1
|
|
||||||
%patch1005 -p1
|
|
||||||
%patch1006 -p1
|
|
||||||
%patch1007 -p1
|
|
||||||
%patch1008 -p1
|
|
||||||
%patch1009 -p1
|
|
||||||
%patch2001 -p1
|
|
||||||
%patch3001 -p1
|
|
||||||
|
|
||||||
%if !%{with lockd}
|
%if !%{with lockd}
|
||||||
%patch4001 -p1
|
%patch -P 4001 -p1
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -226,6 +189,12 @@ extra_opts="
|
|||||||
"
|
"
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?default_use_devices_file} == 1
|
||||||
|
extra_opts="$extra_opts
|
||||||
|
--with-default-use-devices-file=1
|
||||||
|
"
|
||||||
|
%endif
|
||||||
|
|
||||||
### COMMON-CONFIG-BEGIN ###
|
### COMMON-CONFIG-BEGIN ###
|
||||||
export PATH=$PATH:/sbin:%{_sbindir}
|
export PATH=$PATH:/sbin:%{_sbindir}
|
||||||
# Why this messy fix here? someone released a wrong version...
|
# Why this messy fix here? someone released a wrong version...
|
||||||
@ -328,6 +297,9 @@ sed -ie "s/%{upstream_device_mapper_version}/1.03.01/g" VERSION_DM
|
|||||||
install -m 644 %{SOURCE1} "%{buildroot}/%{_sysconfdir}/lvm/"
|
install -m 644 %{SOURCE1} "%{buildroot}/%{_sysconfdir}/lvm/"
|
||||||
# Install testsuite
|
# Install testsuite
|
||||||
make -C test install DESTDIR=%{buildroot}
|
make -C test install DESTDIR=%{buildroot}
|
||||||
|
%if %{suse_version} >= 1600
|
||||||
|
%python3_fix_shebang_path %{buildroot}%{_datadir}/lvm2-testsuite/dbus/*
|
||||||
|
%endif
|
||||||
|
|
||||||
pushd "%{buildroot}/%{_libdir}"
|
pushd "%{buildroot}/%{_libdir}"
|
||||||
ln -sf liblvm2cmd.so.2.03 liblvm2cmd.so
|
ln -sf liblvm2cmd.so.2.03 liblvm2cmd.so
|
||||||
|
Loading…
Reference in New Issue
Block a user