From 075bd55c91ad2baf774b1257e3c9b32f0639f4f1 Mon Sep 17 00:00:00 2001 From: Marian Csontos Date: Tue, 21 Mar 2023 18:30:28 +0100 Subject: [PATCH] Update lvm2 to upstream version 2.03.20 Resolves: #2171839 --- ...ck-for-mounted-and-renamed-LV-to-han.patch | 144 ------------------ ...ault-if-using-S-select-with-log-repo.patch | 70 --------- LVM2.2.03.20.tgz.asc | 16 ++ lvm2.spec | 13 +- sources | 2 +- upstream | 2 +- 6 files changed, 25 insertions(+), 222 deletions(-) delete mode 100644 0001-lvresize-fix-check-for-mounted-and-renamed-LV-to-han.patch delete mode 100644 0002-toollib-fix-segfault-if-using-S-select-with-log-repo.patch create mode 100644 LVM2.2.03.20.tgz.asc diff --git a/0001-lvresize-fix-check-for-mounted-and-renamed-LV-to-han.patch b/0001-lvresize-fix-check-for-mounted-and-renamed-LV-to-han.patch deleted file mode 100644 index 31bfcd3..0000000 --- a/0001-lvresize-fix-check-for-mounted-and-renamed-LV-to-han.patch +++ /dev/null @@ -1,144 +0,0 @@ -From 772605c8b4c84b970d5b2a73672686e0f90ce59f Mon Sep 17 00:00:00 2001 -From: David Teigland -Date: Thu, 23 Feb 2023 16:32:37 -0600 -Subject: [PATCH] lvresize: fix check for mounted and renamed LV to handle - spaces - -Replace spaces with \040 in directory paths from getmntent (mtab). - -The recent commit 5374a44c5712 compares mount point directory paths -from /etc/mtab and /proc/mounts, in order to detect when a mounted -LV has been renamed. The directory path comparison does not work -correctly when the path contains spaces because getmntent uses -ascii space chars and proc replaces spaces with \040. - -(cherry picked from commit 1857eb9fe08924c2e4e5adfc322ee4a2ae5a2e67) ---- - lib/device/filesystem.c | 41 ++++++++++++++++++++++++++++++--------- - test/shell/lvresize-fs.sh | 14 +++++++++++++ - 2 files changed, 46 insertions(+), 9 deletions(-) - -diff --git a/lib/device/filesystem.c b/lib/device/filesystem.c -index 9b086d8c1..2163276ed 100644 ---- a/lib/device/filesystem.c -+++ b/lib/device/filesystem.c -@@ -234,8 +234,9 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l - char proc_fstype[FSTYPE_MAX]; - char proc_devpath[PATH_MAX]; - char proc_mntpath[PATH_MAX]; -- char lv_mapper_path[PATH_MAX]; -- char mntent_mount_dir[PATH_MAX]; -+ char mtab_mntpath[PATH_MAX]; -+ char dm_devpath[PATH_MAX]; -+ char tmp_path[PATH_MAX]; - char *dm_name; - struct stat st_lv; - struct stat stme; -@@ -275,14 +276,36 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l - continue; - if (stme.st_dev != st_lv.st_rdev) - continue; -- dm_strncpy(mntent_mount_dir, me->mnt_dir, sizeof(mntent_mount_dir)); -+ dm_strncpy(mtab_mntpath, me->mnt_dir, sizeof(mtab_mntpath)); -+ break; - } - endmntent(fme); - -+ /* -+ * In mtab dir path, replace each ascii space character with the -+ * four characters \040 which is how /proc/mounts represents spaces. -+ * The mnt dir from /etc/mtab and /proc/mounts are compared below. -+ */ -+ if (strchr(mtab_mntpath, ' ')) { -+ int i, j = 0; -+ memcpy(tmp_path, mtab_mntpath, sizeof(tmp_path)); -+ memset(mtab_mntpath, 0, sizeof(mtab_mntpath)); -+ for (i = 0; i < sizeof(tmp_path); i++) { -+ if (tmp_path[i] == ' ') { -+ mtab_mntpath[j++] = '\\'; -+ mtab_mntpath[j++] = '0'; -+ mtab_mntpath[j++] = '4'; -+ mtab_mntpath[j++] = '0'; -+ continue; -+ } -+ mtab_mntpath[j++] = tmp_path[i]; -+ } -+ } -+ - if (!(dm_name = dm_build_dm_name(cmd->mem, lv->vg->name, lv->name, NULL))) - return_0; - -- if ((dm_snprintf(lv_mapper_path, sizeof(lv_mapper_path), "%s/%s", dm_dir(), dm_name) < 0)) -+ if ((dm_snprintf(dm_devpath, sizeof(dm_devpath), "%s/%s", dm_dir(), dm_name) < 0)) - return_0; - - if (!(fp = fopen("/proc/mounts", "r"))) -@@ -296,8 +319,8 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l - if (strcmp(fstype, proc_fstype)) - continue; - -- dir_match = !strcmp(mntent_mount_dir, proc_mntpath); -- dev_match = !strcmp(lv_mapper_path, proc_devpath); -+ dir_match = !strcmp(mtab_mntpath, proc_mntpath); -+ dev_match = !strcmp(dm_devpath, proc_devpath); - - if (dir_match) - found_dir++; -@@ -306,7 +329,7 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l - - if (dir_match != dev_match) { - log_error("LV %s mounted at %s may have been renamed (from %s).", -- lv_mapper_path, proc_mntpath, proc_devpath); -+ dm_devpath, proc_mntpath, proc_devpath); - renamed = 1; - } - } -@@ -327,11 +350,11 @@ int fs_mount_state_is_misnamed(struct cmd_context *cmd, struct logical_volume *l - } - /* 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.", mntent_mount_dir); -+ 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.", lv_mapper_path); -+ log_error("File system resizing not supported: %s appears more than once in /proc/mounts.", dm_devpath); - return 1; - } - return 0; -diff --git a/test/shell/lvresize-fs.sh b/test/shell/lvresize-fs.sh -index f437652d6..de234aad5 100644 ---- a/test/shell/lvresize-fs.sh -+++ b/test/shell/lvresize-fs.sh -@@ -30,6 +30,9 @@ which mkfs.xfs || skip - mount_dir="mnt_lvresize_fs" - mkdir -p "$mount_dir" - -+mount_dir_space="other mnt dir" -+mkdir -p "$mount_dir_space" -+ - # Tests require a libblkid version that shows FSLASTBLOCK - lvcreate -n $lv1 -L 300 $vg - mkfs.xfs -f "$DM_DEV_DIR/$vg/$lv1" -@@ -273,6 +276,17 @@ umount "$mount_dir" - lvchange -an $vg/$lv2 - lvremove $vg/$lv2 - -+# lvextend|lvreduce, ext4, active, mounted, mount dir with space, --fs resize, renamed LV -+lvcreate -n $lv -L 256M $vg -+mkfs.ext4 "$DM_DEV_DIR/$vg/$lv" -+mount "$DM_DEV_DIR/$vg/$lv" "$mount_dir_space" -+lvrename $vg/$lv $vg/$lv2 -+not lvextend --fs resize -L+32M $vg/$lv2 -+not lvreduce --fs resize -L-32M $vg/$lv2 -+umount "$mount_dir_space" -+lvchange -an $vg/$lv2 -+lvremove $vg/$lv2 -+ - - # - # lvextend, xfs --- -2.39.2 - diff --git a/0002-toollib-fix-segfault-if-using-S-select-with-log-repo.patch b/0002-toollib-fix-segfault-if-using-S-select-with-log-repo.patch deleted file mode 100644 index 40608aa..0000000 --- a/0002-toollib-fix-segfault-if-using-S-select-with-log-repo.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 268e4ee30305a73e262a7fa35f850df2728cc696 Mon Sep 17 00:00:00 2001 -From: Peter Rajnoha -Date: Tue, 7 Mar 2023 14:45:06 +0100 -Subject: [PATCH 2/2] toollib: fix segfault if using -S|--select with - log/report_command_log=1 setting - -When we are using -S|--select for non-reporting tools while using command log -reporting (log/report_command_log=1 setting), we need to create an internal -processing handle to handle the selection itself. In this case, the internal -processing handle to execute the selection (to process the -S|--select) has -a parent handle (that is processing the actual non-reporting command). - -When this parent handle exists, we can't destroy the command log report -in destroy_processing_handle as there's still the parent processing to -finish. The parent processing may still generate logs which need to be -reported in the command log report. If the command log report was -destroyed prematurely together with destroying the internal processing -handle for -S|--select, then any subsequent log request from processing -the actual command (and hence an attermpt to access the command log report) -ended up with a segfault. - -See also: https://bugzilla.redhat.com/show_bug.cgi?id=2175220 - -(cherry picked from commit cd14d3fcc0e03136d0cea1ab1a9edff3b8b9dbeb) ---- - WHATS_NEW | 4 ++++ - tools/toollib.c | 15 ++++++++++++++- - 2 files changed, 18 insertions(+), 1 deletion(-) - -diff --git a/WHATS_NEW b/WHATS_NEW -index b54a092d8..33998be7d 100644 ---- a/WHATS_NEW -+++ b/WHATS_NEW -@@ -1,3 +1,7 @@ -+version 2.03.20 - -+==================================== -+ Fix segfault if using -S|--select with log/report_command_log=1 setting. -+ - version 2.03.19 - 21st February 2023 - ==================================== - Configure supports --with-systemd-run executed from udev rules. -diff --git a/tools/toollib.c b/tools/toollib.c -index 194088ea6..43e628abf 100644 ---- a/tools/toollib.c -+++ b/tools/toollib.c -@@ -2050,7 +2050,20 @@ void destroy_processing_handle(struct cmd_context *cmd, struct processing_handle - - log_restore_report_state(cmd->cmd_report.saved_log_report_state); - -- if (!cmd->is_interactive) { -+ /* -+ * Do not destroy current cmd->report_group and cmd->log_rh -+ * (the log report) yet if we're running interactively -+ * (== running in lvm shell) or if there's a parent handle -+ * (== we're executing nested processing, like it is when -+ * doing selection for parent's process_each_* processing). -+ * -+ * In both cases, there's still possible further processing -+ * to do outside the processing covered by the handle we are -+ * destroying here and for which we may still need to access -+ * the log report to cover the rest of the processing. -+ * -+ */ -+ if (!cmd->is_interactive && !handle->parent) { - if (!dm_report_group_destroy(cmd->cmd_report.report_group)) - stack; - cmd->cmd_report.report_group = NULL; --- -2.39.2 - diff --git a/LVM2.2.03.20.tgz.asc b/LVM2.2.03.20.tgz.asc new file mode 100644 index 0000000..c537d94 --- /dev/null +++ b/LVM2.2.03.20.tgz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEE1QGkeEQK4v0TChvouREkMeUJA58FAmQZpUwACgkQuREkMeUJ +A59piw//TRzaglBpTiwuTDzmmLtIKOvMEx3xEu9aYtxV6QQVYnI7IaA52TMI+9LJ +nNA5sfsF3XJtJ6/8ycRqS9+8KC3tRBSlWfFUpGP68RGA8Y45mBFyQKDvDk7fBK0R +lruZOcLyfh1q6sjKm2B12UFcfYRNjsoupkJSf447sGJO4CsZQPUUyJsXolpFQ1Gz +KhCTDlhyJ4vQA4U7BgrNRuqqrfqFq8ydlmdS3BfEkJgU9n8bNjB8UsWrVlJNac99 +ugUNY4Becs4khwcI5NTIDveVD6BO0WLz6gneMbh2IABSe+Qulk2mJHboNtl3t6p5 +TFRS9awfWeQyKi3yHm0jvpSreUhUD7Ix/jRzYr3+auIIrj1BAk7ZivmFhzmmsHxm +P2wbTtMI1tI8a29UIRxlsMrxUUNhj2D/cdFPLT8cady0iqaJyYTEHtE87uHjjMTv +WWUnFMK87xmBVMoY6NUVDt80FJW2VCO2oWHDPisizO+dZBr4mFghwv2v0nmNn1F7 +oEnrfHEDtUxnzv8owRGC70wRE5Pr+W0KqDHMa4gfwZLuWN0XxT4a/y94m4j2tv12 +VGyoxCnT7O2Yb3CkgAAj/PavUpQknGLCzAJhVmqA2jv/yk2m+wqMUP0ue+sIrw0E +X4ajZadguDKBZHLjrj5zNe/9iFdwMGluaR7MWUVTJ++M3ltK6Ys= +=6cDj +-----END PGP SIGNATURE----- diff --git a/lvm2.spec b/lvm2.spec index 111e994..7eff186 100644 --- a/lvm2.spec +++ b/lvm2.spec @@ -1,4 +1,4 @@ -%global device_mapper_version 1.02.191 +%global device_mapper_version 1.02.193 %global enable_cache 1 %global enable_cluster 1 @@ -58,7 +58,7 @@ Name: lvm2 %if 0%{?rhel} Epoch: %{rhel} %endif -Version: 2.03.19 +Version: 2.03.20 %if 0%{?from_snapshot} #Release: 0.1.20211115git%{shortcommit}%{?dist}%{?rel_suffix} Release: 4%{?dist}%{?rel_suffix} @@ -72,8 +72,7 @@ Source0: lvm2-%{shortcommit}.tgz %else Source0: ftp://sourceware.org/pub/lvm2/releases/LVM2.%{version}.tgz %endif -Patch1: 0001-lvresize-fix-check-for-mounted-and-renamed-LV-to-han.patch -Patch2: 0002-toollib-fix-segfault-if-using-S-select-with-log-repo.patch +#Patch1: 0001-* BuildRequires: make BuildRequires: gcc @@ -134,8 +133,7 @@ or more physical volumes and creating one or more logical volumes %else %setup -q -n LVM2.%{version} %endif -%patch1 -p1 -b .backup1 -%patch2 -p1 -b .backup2 +#%%patch1 -p1 -b .backup1 %build %global _default_pid_dir /run @@ -707,6 +705,9 @@ An extensive functional testsuite for LVM2. %endif %changelog +* Tue Mar 21 2023 Marian Csontos - 2.03.20-1 +- Update to upstream version 2.03.20. + * Tue Mar 07 2023 Marian Csontos - 2.03.19-1 - Update to upstream version 2.03.19. - See WHATS_NEW and WHATS_NEW_DM for more information. diff --git a/sources b/sources index 7c7597a..c80c581 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (LVM2.2.03.19.tgz) = a40691f6f4c9300c95784be0fcb055a2b8e07bfdc87f000f2357ccb54fdb814a679fb79f5c9790a7440ef538e9997e46d56e539814bfdf138b4e76603aeb2994 +SHA512 (LVM2.2.03.20.tgz) = 202ff19f6ab1e1ecdf448beec6c7db1a80885efda1a6eeabf44cd2cea40577405c388eabd86f59f34c6e9e400188050bc6d1a5d5daf02f2beda87eee73cd1a2d diff --git a/upstream b/upstream index 0cd8332..87b9a2c 100644 --- a/upstream +++ b/upstream @@ -1 +1 @@ -LVM2.2.03.19.tgz +LVM2.2.03.20.tgz