diff --git a/0013-udev-repeat.patch b/0013-udev-repeat.patch new file mode 100644 index 0000000000000000000000000000000000000000..176efda65772b429ba93e8466557264133848777 --- /dev/null +++ b/0013-udev-repeat.patch @@ -0,0 +1,49 @@ +From 69a3f4d986a4f5302a35771376a7785b9464889d Mon Sep 17 00:00:00 2001 +From: wuguanghao +Date: Sat, 9 Jun 2021 19:07:43 +0800 +Subject: [PATCH] udev repeat + +systemd-udev exec IMPORT{program} in rules to get stdout of +program for storing some ENV vars. However due to some reasons, +the stdout of program cannot be gotten by systemd-udevd, which +cause some errors due to missing of ENV vars. + +lv maybe lost after reboot, now we repeat to exec programs to +avoid lv missing. + +Signed-off-by: wuguanghao +Signed-off-by: Zhiqiang Liu +--- + udev/10-dm.rules.in | 2 ++ + udev/11-dm-lvm.rules.in | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/udev/10-dm.rules.in b/udev/10-dm.rules.in +index b4fa52a..3ed1242 100644 +--- a/udev/10-dm.rules.in ++++ b/udev/10-dm.rules.in +@@ -51,6 +51,8 @@ ACTION!="add|change", GOTO="dm_end" + # kernel version 2.6.31. Therefore, we can use this feature with + # kernels >= 2.6.31 only. Cookie is not decoded for remove event. + ENV{DM_COOKIE}=="?*", IMPORT{program}="(DM_EXEC)/dmsetup udevflags $env{DM_COOKIE}" ++ENV{DM_COOKIE}=="?*", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="?*", IMPORT{program}="(DM_EXEC)/dmsetup udevflags $env{DM_COOKIE}" ++ENV{DM_COOKIE}=="?*", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="?*", IMPORT{program}="(DM_EXEC)/dmsetup udevflags $env{DM_COOKIE}" + + # Rule out easy-to-detect inappropriate events first. + ENV{DISK_RO}=="1", GOTO="dm_disable" +diff --git a/udev/11-dm-lvm.rules.in b/udev/11-dm-lvm.rules.in +index 7c58994..33f7d1d 100644 +--- a/udev/11-dm-lvm.rules.in ++++ b/udev/11-dm-lvm.rules.in +@@ -19,6 +19,8 @@ ENV{DM_UUID}!="LVM-?*", GOTO="lvm_end" + + # Use DM name and split it up into its VG/LV/layer constituents. + IMPORT{program}="(DM_EXEC)/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}" ++ENV{DM_VG_NAME}!="?*", IMPORT{program}="(DM_EXEC)/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}" ++ENV{DM_LV_NAME}!="?*", IMPORT{program}="(DM_EXEC)/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}" + + # DM_SUBSYSTEM_UDEV_FLAG0 is the 'NOSCAN' flag for LVM subsystem. + # This flag is used to temporarily disable selected rules to prevent any +-- +2.33.0 + diff --git a/0014-use-sync-io-read-bcache-by-defaults.patch b/0014-use-sync-io-read-bcache-by-defaults.patch new file mode 100644 index 0000000000000000000000000000000000000000..8017062090bc98b3b3d6a2c93212b4ab17a3a7e3 --- /dev/null +++ b/0014-use-sync-io-read-bcache-by-defaults.patch @@ -0,0 +1,31 @@ +From b36985754f67c3df89c42ed29250abf6dfaf7890 Mon Sep 17 00:00:00 2001 +From: Wu Guanghao +Date: Sat, 4 Jun 2022 03:06:52 +0400 +Subject: [PATCH] use sync io read bcache by defaults + +Currently lvm2 uses aio to read bcache by default, +but aio is created successfully but read fails, +resulting in lv creation failure. So use sync io +read bcache by default. + +Signed-off-by: Wu Guanghao +--- + lib/config/defaults.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/config/defaults.h b/lib/config/defaults.h +index faf628f..d039cc7 100644 +--- a/lib/config/defaults.h ++++ b/lib/config/defaults.h +@@ -70,7 +70,7 @@ + #define DEFAULT_METADATA_READ_ONLY 0 + #define DEFAULT_LVDISPLAY_SHOWS_FULL_DEVICE_PATH 0 + #define DEFAULT_UNKNOWN_DEVICE_NAME "[unknown]" +-#define DEFAULT_USE_AIO 1 ++#define DEFAULT_USE_AIO 0 + + #define DEFAULT_SANLOCK_LV_EXTEND_MB 256 + +-- +2.33.0 + diff --git a/0015-vgremove-PVID-file-leakage-in-run-lvm-pvs_online.patch b/0015-vgremove-PVID-file-leakage-in-run-lvm-pvs_online.patch new file mode 100644 index 0000000000000000000000000000000000000000..bbda7949d54499b651b72000d7f8d28ff20bc2e2 --- /dev/null +++ b/0015-vgremove-PVID-file-leakage-in-run-lvm-pvs_online.patch @@ -0,0 +1,75 @@ +From 65927e86669e702b8b76f8af81c040c666bc3260 Mon Sep 17 00:00:00 2001 +From: miaoguanqin +Date: Thu, 8 Sep 2022 19:59:44 +0800 +Subject: [PATCH] vgremove: PVID file leakage in /run/lvm/pvs_online + +We found PVID file leakage problem when exec the following test; +pvcreate /dev/sdb +vgcreate -s 1G docker /dev/sdb +lvcreate -L 10M docker +pvscan --cache --listvg --checkcomplete --vgonline --udevoutput --journal=output /dev/sdb +vgremove -ff docker + +pvcreate operation generates a new PVID, which is used to create PVID pvid file +when exec pvscan. However vgremove does not delete the old PVID file. + +Here, we will delete all PVID files of each PV in current vg, when exec vgremove. + +Signed-off-by: miaoguanqin +--- + lib/metadata/metadata.c | 32 ++++++++++++++++++++++++++++++++ + 1 file changed, 32 insertions(+) + +diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c +index 30b2c17..ea02629 100644 +--- a/lib/metadata/metadata.c ++++ b/lib/metadata/metadata.c +@@ -38,6 +38,29 @@ + #include + #include + ++static const char *_pvs_online_dir = DEFAULT_RUN_DIR "/pvs_online"; ++ ++static int remove_pvid_file(struct physical_volume *pv) ++{ ++ char pvid[ID_LEN + 1] __attribute__((aligned(8))) = { 0 }; ++ char path[PATH_MAX] __attribute__((aligned(8)))={ 0 }; ++ ++ memcpy(pvid, &pv->id.uuid, ID_LEN); ++ ++ if (dm_snprintf(path, sizeof(path), "%s/%s", _pvs_online_dir, pvid) < 0) { ++ log_warn("WARNING:pvid file path is %s", path); ++ return 0; ++ } ++ ++ log_warn("unlink pvid file, path is %s", path); ++ ++ if (unlink(path) && (errno != ENOENT)) { ++ log_warn("WARNING:unlink pvid file path error, path is %s", path); ++ return 0; ++ } ++ return 1; ++} ++ + static struct physical_volume *_pv_read(struct cmd_context *cmd, + const struct format_type *fmt, + struct volume_group *vg, +@@ -665,6 +688,15 @@ int vg_remove_direct(struct volume_group *vg) + " from volume group \"%s\"", + pv_dev_name(pv), vg->name); + ret = 0; ++ continue; ++ } ++ ++ /* Remove pvid files */ ++ if (!remove_pvid_file(pv)) { ++ log_error("Failed to remove pvid files \"%s\"" ++ " from volume group \"%s\"", ++ _pvs_online_dir, vg->name); ++ ret = 0; + } + } + +-- +2.33.0 + diff --git a/lvm2.spec b/lvm2.spec index 5893578ee24b2d4a89630c3e2430186ecaa36d33..5605ae8bb2893c6eb95940fcc7589b92a2478431 100644 --- a/lvm2.spec +++ b/lvm2.spec @@ -43,7 +43,7 @@ Name: lvm2 Version: 2.03.18 -Release: 2 +Release: 3 Epoch: 8 Summary: Tools for logical volume management License: GPLv2+ and LGPLv2.1 and BSD @@ -61,6 +61,9 @@ Patch9: 0009-enhancement-log-it-when-disk-slow.patch Patch10: 0010-bugfix-lvm2-fix-the-reuse-of-va_list.patch Patch11: 0011-13-dm-disk.rules-check-DM_NAME-before-create-symlink.patch Patch12: 0012-lvm-code-reduce-cyclomatic-complexity.patch +Patch13: 0013-udev-repeat.patch +Patch14: 0014-use-sync-io-read-bcache-by-defaults.patch +Patch15: 0015-vgremove-PVID-file-leakage-in-run-lvm-pvs_online.patch BuildRequires: gcc BuildRequires: gcc-c++ @@ -487,6 +490,9 @@ fi %changelog +* Thu Jun 8 2023 wangzhiqiang - 8:2.03.18-3 +- fix fail to create lv and pvid file leakage + * Fri Feb 10 2023 qiaobaoli1 - 8:2.03.18-2 - remove configure duplicate flag --with-thin