!106 [sync] PR-105: backport upstream patches
From: @openeuler-sync-bot Reviewed-by: @swf504 Signed-off-by: @swf504
This commit is contained in:
commit
edf4b25045
127
0028-pvscan-use-alternate-device-names-from-DEVLINKS-to-c.patch
Normal file
127
0028-pvscan-use-alternate-device-names-from-DEVLINKS-to-c.patch
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
From 542390047f9e38d139a68088ffdc9acad74ab8fa Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Teigland <teigland@redhat.com>
|
||||||
|
Date: Thu, 19 Jan 2023 17:37:31 -0600
|
||||||
|
Subject: [PATCH] pvscan: use alternate device names from DEVLINKS to check
|
||||||
|
filter
|
||||||
|
|
||||||
|
pvscan --cache <dev> is called by our udev rule at a time when all
|
||||||
|
the symlinks for <dev> may not be created yet (by other udev rules.)
|
||||||
|
The regex filter in lvm.conf may refer to <dev> using a symlink name
|
||||||
|
that hasn't yet been created, which would cause <dev> to not match
|
||||||
|
the filter regex. The DEVLINKS env var, set by udev, contains all
|
||||||
|
the symlink names for <dev> that have been or will be created.
|
||||||
|
So, we add all these symlink names to dev->aliases, as if we had
|
||||||
|
found them in /dev. This allows <dev> to be recognized by a regex
|
||||||
|
filter containing a symlink for <dev>.
|
||||||
|
---
|
||||||
|
lib/commands/toolcontext.h | 1 +
|
||||||
|
lib/filters/filter-regex.c | 2 +-
|
||||||
|
tools/pvscan.c | 60 +++++++++++++++++++++++---------------
|
||||||
|
3 files changed, 38 insertions(+), 25 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/commands/toolcontext.h b/lib/commands/toolcontext.h
|
||||||
|
index 957ab7f..2840fb5 100644
|
||||||
|
--- a/lib/commands/toolcontext.h
|
||||||
|
+++ b/lib/commands/toolcontext.h
|
||||||
|
@@ -202,6 +202,7 @@ struct cmd_context {
|
||||||
|
unsigned ignore_device_name_mismatch:1; /* skip updating devices file names */
|
||||||
|
unsigned backup_disabled:1; /* skip repeated debug message */
|
||||||
|
unsigned event_activation:1; /* whether event_activation is set */
|
||||||
|
+ unsigned filter_regex_set_preferred_name_disable:1; /* prevent dev_set_preferred_name */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Devices and filtering.
|
||||||
|
diff --git a/lib/filters/filter-regex.c b/lib/filters/filter-regex.c
|
||||||
|
index 05c5b3f..d9ed010 100644
|
||||||
|
--- a/lib/filters/filter-regex.c
|
||||||
|
+++ b/lib/filters/filter-regex.c
|
||||||
|
@@ -179,7 +179,7 @@ static int _accept_p(struct cmd_context *cmd, struct dev_filter *f, struct devic
|
||||||
|
|
||||||
|
if (m >= 0) {
|
||||||
|
if (dm_bit(rf->accept, m)) {
|
||||||
|
- if (!first)
|
||||||
|
+ if (!first && !cmd->filter_regex_set_preferred_name_disable)
|
||||||
|
dev_set_preferred_name(sl, dev);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
diff --git a/tools/pvscan.c b/tools/pvscan.c
|
||||||
|
index 35258c5..710ffcd 100644
|
||||||
|
--- a/tools/pvscan.c
|
||||||
|
+++ b/tools/pvscan.c
|
||||||
|
@@ -1234,30 +1234,6 @@ static int _get_args_devs(struct cmd_context *cmd, struct dm_list *pvscan_args,
|
||||||
|
struct pvscan_arg *arg;
|
||||||
|
struct device_list *devl;
|
||||||
|
|
||||||
|
- /*
|
||||||
|
- * If no devices file is used, and lvm.conf filter is set to
|
||||||
|
- * accept /dev/disk/by-id/lvm-pv-uuid-xyz or another symlink,
|
||||||
|
- * but pvscan --cache is passed devname or major:minor, so
|
||||||
|
- * pvscan needs to match its arg device to the filter symlink.
|
||||||
|
- * setup_dev_in_dev_cache() adds /dev/sda2 to dev-cache which
|
||||||
|
- * does not match a symlink to /dev/sda2, so we need a full
|
||||||
|
- * dev_cache_scan that will associate all symlinks to sda2,
|
||||||
|
- * which allows filter-regex to work. This case could be
|
||||||
|
- * optimized if needed by adding dev-cache entries for each
|
||||||
|
- * filter "a" entry (filter symlink patterns would still need
|
||||||
|
- * a full dev_cache_scan.)
|
||||||
|
- * (When no devices file is used and 69-dm-lvm.rules is
|
||||||
|
- * used which calls pvscan directly, symlinks may not
|
||||||
|
- * have been created by other rules when pvscan runs, so
|
||||||
|
- * the full dev_cache_scan may still not find them.)
|
||||||
|
- */
|
||||||
|
- if (!cmd->enable_devices_file && !cmd->enable_devices_list &&
|
||||||
|
- (_filter_uses_symlinks(cmd, devices_filter_CFG) ||
|
||||||
|
- _filter_uses_symlinks(cmd, devices_global_filter_CFG))) {
|
||||||
|
- log_print_pvscan(cmd, "finding all devices for filter symlinks.");
|
||||||
|
- dev_cache_scan(cmd);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
/* pass NULL filter when getting devs from dev-cache, filtering is done separately */
|
||||||
|
|
||||||
|
/* in common usage, no dev will be found for a devno */
|
||||||
|
@@ -1835,6 +1811,42 @@ static int _pvscan_cache_args(struct cmd_context *cmd, int argc, char **argv,
|
||||||
|
|
||||||
|
cmd->filter_nodata_only = 1;
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * Hack to handle regex filter that contains a symlink name for dev arg.
|
||||||
|
+ * pvscan --cache <dev> is called by our udev rule at a time when the
|
||||||
|
+ * symlinks for <dev> may not all be created yet (by other udev rules.)
|
||||||
|
+ * The regex filter in lvm.conf may refer to <dev> using a symlink name,
|
||||||
|
+ * so we need to know all the symlinks for <dev> in order for the filter
|
||||||
|
+ * to work correctly. Scanning /dev with dev_cache_scan() would usually
|
||||||
|
+ * find all the symlink names for <dev>, adding them to dev->aliases,
|
||||||
|
+ * which would let the filter work, but all symlinks aren't created yet.
|
||||||
|
+ * But, the DEVLINKS env var, set by udev, contains all the symlink
|
||||||
|
+ * names for <dev> that have been or *will be* created. So, we add all
|
||||||
|
+ * these symlink names to dev->aliases, as if we had found them in /dev.
|
||||||
|
+ * This allows <dev> to be recognized by a regex filter containing a
|
||||||
|
+ * symlink for <dev>. We have to tell filter-regex to not set the
|
||||||
|
+ * preferred name for <dev> to a symlink name since the <dev> may not
|
||||||
|
+ * be usable by that symlink name yet.
|
||||||
|
+ */
|
||||||
|
+ if ((dm_list_size(&pvscan_devs) == 1) &&
|
||||||
|
+ !cmd->enable_devices_file && !cmd->enable_devices_list &&
|
||||||
|
+ (_filter_uses_symlinks(cmd, devices_filter_CFG) ||
|
||||||
|
+ _filter_uses_symlinks(cmd, devices_global_filter_CFG))) {
|
||||||
|
+ char *env_str;
|
||||||
|
+ struct dm_list *env_aliases;
|
||||||
|
+ devl = dm_list_item(dm_list_first(&pvscan_devs), struct device_list);
|
||||||
|
+ if ((env_str = getenv("DEVLINKS"))) {
|
||||||
|
+ log_debug("Finding symlink names from DEVLINKS for filter regex.");
|
||||||
|
+ log_debug("DEVLINKS %s", env_str);
|
||||||
|
+ env_aliases = str_to_str_list(cmd->mem, env_str, " ", 0);
|
||||||
|
+ dm_list_splice(&devl->dev->aliases, env_aliases);
|
||||||
|
+ } else {
|
||||||
|
+ log_debug("Finding symlink names from /dev for filter regex.");
|
||||||
|
+ dev_cache_scan(cmd);
|
||||||
|
+ }
|
||||||
|
+ cmd->filter_regex_set_preferred_name_disable = 1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
dm_list_iterate_items_safe(devl, devl2, &pvscan_devs) {
|
||||||
|
if (!cmd->filter->passes_filter(cmd, cmd->filter, devl->dev, NULL)) {
|
||||||
|
log_print_pvscan(cmd, "%s excluded by filters: %s.",
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
30
0029-vgchange-acquire-an-exclusive-VG-lock-for-refresh.patch
Normal file
30
0029-vgchange-acquire-an-exclusive-VG-lock-for-refresh.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From 65d23a1d75013f328e9a3a1914484514621822ef Mon Sep 17 00:00:00 2001
|
||||||
|
From: wangzhiqiang <wangzhiqiang95@huawei.com>
|
||||||
|
Date: Wed, 30 Aug 2023 15:47:42 -0500
|
||||||
|
Subject: [PATCH] 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.33.0
|
||||||
|
|
||||||
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
Name: lvm2
|
Name: lvm2
|
||||||
Version: 2.03.14
|
Version: 2.03.14
|
||||||
Release: 9
|
Release: 10
|
||||||
Epoch: 8
|
Epoch: 8
|
||||||
Summary: Tools for logical volume management
|
Summary: Tools for logical volume management
|
||||||
License: GPLv2+ and LGPLv2.1 and BSD
|
License: GPLv2+ and LGPLv2.1 and BSD
|
||||||
@ -76,6 +76,8 @@ Patch24: 0024-use-sync-io-read-bcache-by-defaults.patch
|
|||||||
Patch25: 0025-vgremove-PVID-file-leakage-in-run-lvm-pvs_online.patch
|
Patch25: 0025-vgremove-PVID-file-leakage-in-run-lvm-pvs_online.patch
|
||||||
Patch26: 0026-lvmcache-fix-valgrind-error-when-dropping-md-duplica.patch
|
Patch26: 0026-lvmcache-fix-valgrind-error-when-dropping-md-duplica.patch
|
||||||
Patch27: 0027-toollib-fix-segfault-if-using-S-select-with-log-repo.patch
|
Patch27: 0027-toollib-fix-segfault-if-using-S-select-with-log-repo.patch
|
||||||
|
Patch28: 0028-pvscan-use-alternate-device-names-from-DEVLINKS-to-c.patch
|
||||||
|
Patch29: 0029-vgchange-acquire-an-exclusive-VG-lock-for-refresh.patch
|
||||||
|
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
@ -502,6 +504,9 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 5 2023 wangzhiqiang <wangzhiqiang95@huawei.com> - 8:2.03.14-10
|
||||||
|
- fix some bugs
|
||||||
|
|
||||||
* Sun Jun 25 2023 wangzhiqiang <wangzhiqiang95@huawei.com> - 8:2.03.14-9
|
* Sun Jun 25 2023 wangzhiqiang <wangzhiqiang95@huawei.com> - 8:2.03.14-9
|
||||||
- backport some bugfix patches from upstream
|
- backport some bugfix patches from upstream
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user