From aa1cb9fad6f20ba0458c0937948710b7952cdfcf Mon Sep 17 00:00:00 2001 From: shuaihaowei Date: Thu, 9 Oct 2025 16:03:22 +0800 Subject: [PATCH] fix multiple mounts in lvextend --- 0025-fix-multiple-mounts-in-lvextend.patch | 97 ++++++++++++++++++++++ lvm2.spec | 9 +- 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 0025-fix-multiple-mounts-in-lvextend.patch diff --git a/0025-fix-multiple-mounts-in-lvextend.patch b/0025-fix-multiple-mounts-in-lvextend.patch new file mode 100644 index 0000000..888d318 --- /dev/null +++ b/0025-fix-multiple-mounts-in-lvextend.patch @@ -0,0 +1,97 @@ +From 7c3eca833ff7878d6d32198ed76380c91fdc15fc Mon Sep 17 00:00:00 2001 +From: David Teigland +Date: Fri, 16 Jun 2023 12:06:40 -0500 +Subject: [PATCH] lvresize: fix multiple mounts + +which was mistaken as a mounted LV that had been renamed. +--- + lib/device/filesystem.c | 47 +++++++++++++++++++++-------------------- + 1 file changed, 24 insertions(+), 23 deletions(-) + +diff --git a/lib/device/filesystem.c b/lib/device/filesystem.c +index 2572bca69..39e563117 100644 +--- a/lib/device/filesystem.c ++++ b/lib/device/filesystem.c +@@ -243,8 +243,6 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l + FILE *fme = NULL; + struct mntent *me; + int renamed = 0; +- int found_dir = 0; +- int found_dev = 0; + int dev_match, dir_match; + + if (stat(lv_path, &st_lv) < 0) { +@@ -281,6 +279,9 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l + } + endmntent(fme); + ++ if (mtab_mntpath[0]) ++ log_debug("%s mtab mntpath %s", display_lvname(lv), mtab_mntpath); ++ + /* + * In mtab dir path, replace each ascii space character with the + * four characters \040 which is how /proc/mounts represents spaces. +@@ -319,15 +320,31 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l + if (strcmp(fstype, proc_fstype)) + continue; + ++ /* ++ * When an LV is mounted on two dirs, it appears in /proc/mounts twice as ++ * /dev/mapper/vg-lvol0 on /foo type xfs ... ++ * /dev/mapper/vg-lvol0 on /bar type xfs ... ++ * All entries match dm_devpath, one entry matches mntpath, ++ * and other entries don't match mntpath. ++ * ++ * When an LV is mounted on one dir, and is renamed from lvol0 to lvol1, ++ * it appears in /proc/mounts once as ++ * /dev/mapper/vg-lvol0 on /foo type xfs ... ++ */ ++ + dir_match = !strcmp(mtab_mntpath, proc_mntpath); + dev_match = !strcmp(dm_devpath, proc_devpath); + +- if (dir_match) +- found_dir++; +- if (dev_match) +- found_dev++; ++ if (!dir_match && !dev_match) ++ continue; ++ ++ if (dev_match && !dir_match) { ++ log_debug("LV %s mounted at %s also mounted at %s.", ++ dm_devpath, mtab_mntpath, proc_mntpath); ++ continue; ++ } + +- if (dir_match != dev_match) { ++ if (!dev_match && dir_match) { + log_error("LV %s mounted at %s may have been renamed (from %s).", + dm_devpath, proc_mntpath, proc_devpath); + renamed = 1; +@@ -337,26 +354,10 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l + if (fclose(fp)) + stack; + +- /* +- * Don't try resizing if: +- * - different device names apppear for the mount point +- * (LVs probably renamed while mounted), or +- * - the mount point for the LV appears multiple times, or +- * - the LV device is listed for multiple mounts. +- */ + if (renamed) { + log_error("File system resizing not supported: fs utilities do not support renamed devices."); + return 1; + } +- /* These two are likely detected as renamed, but include checks in case. */ +- if (found_dir > 1) { +- log_error("File system resizing not supported: %s appears more than once in /proc/mounts.", mtab_mntpath); +- return 1; +- } +- if (found_dev > 1) { +- log_error("File system resizing not supported: %s appears more than once in /proc/mounts.", dm_devpath); +- return 1; +- } + return 0; + } + diff --git a/lvm2.spec b/lvm2.spec index 54937c2..9646c97 100644 --- a/lvm2.spec +++ b/lvm2.spec @@ -43,7 +43,7 @@ Name: lvm2 Version: 2.03.21 -Release: 15 +Release: 16 Epoch: 8 Summary: Tools for logical volume management License: GPLv2+ and LGPLv2.1 and BSD @@ -73,6 +73,7 @@ Patch21: 0021-lvmcache-fix-memleaks-on-list-removal.patch Patch22: 0022-dmstats-Fix-memory-leak-on-error-path.patch Patch23: 0023-fix-function-undeclared-in-libdm-common.c-and-dev-cache.c.patch Patch24: 0024-config-check-for-0-from-read.patch +Patch25: 0025-fix-multiple-mounts-in-lvextend.patch BuildRequires: gcc BuildRequires: gcc-c++ @@ -499,6 +500,12 @@ fi %changelog +* Thu Oct 09 2025 weishuaihao - 8:2.03.21-16 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC: fix multiple mounts in lvextend + * Thu Apr 03 2025 chenrenhui - 8:2.03.21-15 - Type:bugfix - ID:NA -- Gitee