Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package s390-tools for openSUSE:Factory checked in at 2022-02-23 16:26:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/s390-tools (Old) and /work/SRC/openSUSE:Factory/.s390-tools.new.1958 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "s390-tools" Wed Feb 23 16:26:01 2022 rev:43 rq:956862 version:2.19.0 Changes: -------- --- /work/SRC/openSUSE:Factory/s390-tools/s390-tools.changes 2022-01-21 01:25:13.338668576 +0100 +++ /work/SRC/openSUSE:Factory/.s390-tools.new.1958/s390-tools.changes 2022-02-23 16:26:45.347509487 +0100 @@ -1,0 +2,12 @@ +Tue Feb 22 19:37:07 UTC 2022 - Mark Post <mp...@suse.com> + +- Added s390-tools-sles15sp4-zdev-modify-the-lsblk-output-parser-in-lszdev.patch + for bsc#1196255. Version 2.37+ of util-linux modified the output + characters of lsblk,which breaks the parser function. +- Added s390-tools-sles15sp4-zdev-Fix-path-resolution-for-multi-mount-point-file-.patch + for bsc#1196254. Path resolution fails when a device provides + multiple mount points such as, for example, when using btrfs + subvolumes, or when mounting the same file system at multiple + mount points. + +------------------------------------------------------------------- New: ---- s390-tools-sles15sp4-zdev-Fix-path-resolution-for-multi-mount-point-file-.patch s390-tools-sles15sp4-zdev-modify-the-lsblk-output-parser-in-lszdev.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ s390-tools.spec ++++++ --- /var/tmp/diff_new_pack.ziW0AS/_old 2022-02-23 16:26:46.323509521 +0100 +++ /var/tmp/diff_new_pack.ziW0AS/_new 2022-02-23 16:26:46.327509522 +0100 @@ -1,7 +1,7 @@ # # spec file for package s390-tools # -# Copyright (c) 2001-2021 SUSE LLC +# Copyright (c) 2001-2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -90,6 +90,8 @@ # IBM patches Patch001: s390-tools-sles15sp4-chreipl-fcp-mpath-don-t-compress-the-manpage-before-.patch Patch002: s390-tools-sles15sp4-chreipl-fcp-mpath-remove-shebang-from-chreipl-fcp-mp.patch +Patch003: s390-tools-sles15sp4-zdev-modify-the-lsblk-output-parser-in-lszdev.patch +Patch004: s390-tools-sles15sp4-zdev-Fix-path-resolution-for-multi-mount-point-file-.patch # SUSE patches Patch900: s390-tools-sles12-zipl_boot_msg.patch ++++++ s390-tools-sles15sp4-zdev-Fix-path-resolution-for-multi-mount-point-file-.patch ++++++ Subject: [PATCH] [BZ 196440] zdev: Fix path resolution for multi-mount point file systems From: Peter Oberparleiter <ober...@linux.ibm.com> Description: zdev: Fix path resolution for multi-mount point file systems Symptom: Path resolution fails when a device provides multiple mount points such as, for example, when using btrfs subvolumes, or when mounting the same file system at multiple mount points. Problem: The failure is caused by zdev relying on the MOUNTPOINT attribute of lsblk's output which only contains a single mount point. Solution: Fix this by making use of lsblk's MOUNTPOINTS attribute that contains the full list of mount points. Reproduction: chzdev -f -e <dev_id_a> <dev_id_b> <dev_id_c>: In this case, if the rootfs is soread across multiple devices, zdev adds only the first device in to the initrd and the system does not boot. Upstream-ID: 1faa5d2957eb82ab235778959d70a38062b7aa7d Problem-ID: 196440 Upstream-Description: zdev: Fix path resolution for multi-mount point file systems zdev provides path resolution logic to determine which z-specific devices contribute to the file system mounted at a specific mount point. This logic is used by command-line option --by-path, but also to determine the list of devices needed to enable the root file system. Path resolution fails when a device provides multiple mount points such as, for example, when using btrfs subvolumes, or when mounting the same file system at multiple mount points. The failure is caused by zdev relying on the MOUNTPOINT attribute of lsblk's output which only contains a single mount point. Fix this by making use of lsblk's MOUNTPOINTS attribute that contains the full list of mount points. Note that MOUNTPOINTS was only introduced with util-linux v2.37, therefore a fall-back to the old format is needed. Fixes: https://github.com/ibm-s390-linux/s390-tools/issues/129 Signed-off-by: Peter Oberparleiter <ober...@linux.ibm.com> Reviewed-by: Jan Hoeppner <hoepp...@linux.ibm.com> Reviewed-by: Vineeth Vijayan <vnee...@linux.ibm.com> Reviewed-by: Eduard Shishkin <edwa...@linux.ibm.com> Reported-by: Dan Horak <d...@danny.cz> Signed-off-by: Jan Hoeppner <hoepp...@linux.ibm.com> Signed-off-by: Peter Oberparleiter <ober...@linux.ibm.com> Index: s390-tools-service/zdev/src/blkinfo.c =================================================================== --- s390-tools-service.orig/zdev/src/blkinfo.c +++ s390-tools-service/zdev/src/blkinfo.c @@ -7,6 +7,7 @@ * it under the terms of the MIT license. See LICENSE for details. */ +#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -16,6 +17,7 @@ #include "misc.h" #define LSBLK_CMDLINE "lsblk -P -o NAME,MAJ:MIN,FSTYPE,UUID,MOUNTPOINT,PKNAME 2>/dev/null" +#define LSBLK_CMDLINE2 "lsblk -P -o NAME,MAJ:MIN,FSTYPE,UUID,MOUNTPOINTS,PKNAME 2>/dev/null" struct blkinfo { struct devnode *devnode; @@ -82,6 +84,26 @@ void blkinfo_print(struct blkinfo *blkin printf("%*sparent=%s\n", level, "", blkinfo->parent); } +/* Convert each occurrence of '\xnn' in @str to character with hex code <nn>. */ +static void hex_unescape(char *str) +{ + unsigned int c; + + while ((str = strstr(str, "\\x"))) { + if (isxdigit(str[2]) && isxdigit(str[3]) && + sscanf(str + 2, "%2x", &c) == 1) { + str[0] = (char)c; + + /* Move remainder of str including nul behind <c>. */ + memmove(str + /* <c> */ 1, + str + /* '\xnn' */ 4, + strlen(str + 4) + /* <nul> */ 1); + } + + str++; + } +} + static char *isolate_keyword(char **line_ptr, const char *keyword) { char *start, *end; @@ -102,9 +124,11 @@ static char *isolate_keyword(char **line return start; } -static struct blkinfo *blkinfo_from_line(char *line) +static void add_blkinfos_from_line(struct util_list *blkinfos, + char *line) { - char *name, *majmin, *fstype, *uuid, *mountpoint, *parent; + char *name, *majmin, *fstype, *uuid, *mountpoint, *mountpoints, *parent; + struct blkinfo *blkinfo; name = isolate_keyword(&line, "NAME=\""); majmin = isolate_keyword(&line, "MAJ:MIN=\""); @@ -113,21 +137,45 @@ static struct blkinfo *blkinfo_from_line fstype = isolate_keyword(&line, "FSTYPE=\""); uuid = isolate_keyword(&line, "UUID=\""); mountpoint = isolate_keyword(&line, "MOUNTPOINT=\""); + mountpoints = isolate_keyword(&line, "MOUNTPOINTS=\""); parent = isolate_keyword(&line, "PKNAME=\""); - return blkinfo_new(name, majmin, fstype, uuid, mountpoint, parent); + if (!mountpoints) { + /* Handle old lsblk output format. */ + blkinfo = blkinfo_new(name, majmin, fstype, uuid, mountpoint, + parent); + ptrlist_add(blkinfos, blkinfo); + return; + } + + /* Restore newline mount point separator encoded as hex. */ + hex_unescape(mountpoints); + + /* Represent each mount point as a separate blkinfo to support + * resolution of multi-mount point file systems like btrfs + * subvolumes. */ + while ((mountpoint = strsep(&mountpoints, "\n"))) { + blkinfo = blkinfo_new(name, majmin, fstype, uuid, mountpoint, + parent); + ptrlist_add(blkinfos, blkinfo); + } } static struct util_list *blkinfos_read(void) { char *output, *curr, *next; struct util_list *blkinfos; - struct blkinfo *blkinfo; if (cached_blkinfos) return cached_blkinfos; - output = misc_read_cmd_output(LSBLK_CMDLINE, 0, 1); + output = misc_read_cmd_output(LSBLK_CMDLINE2, 0, 1); + if (output && !*output) { + /* No output might indicate no support for new lsblk command- + * line format - fall back to old format. */ + free(output); + output = misc_read_cmd_output(LSBLK_CMDLINE, 0, 1); + } if (!output) return NULL; @@ -136,9 +184,7 @@ static struct util_list *blkinfos_read(v /* Iterate over each line. */ next = output; while ((curr = strsep(&next, "\n"))) { - blkinfo = blkinfo_from_line(curr); - if (blkinfo) - ptrlist_add(blkinfos, blkinfo); + add_blkinfos_from_line(blkinfos, curr); } free(output); ++++++ s390-tools-sles15sp4-zdev-modify-the-lsblk-output-parser-in-lszdev.patch ++++++ Subject: [PATCH] [BZ 196072] zdev: modify the lsblk output parser in lszdev From: Vineeth Vijayan <vnee...@linux.ibm.com> Description: zdev: modify the lsblk output parser in lszdev Symptom: lsblk parser function in lszdev not working Problem: Version 2.37+ of util-linux modified the output characters of lsblk,which breaks the parser function. Solution: Align the parser function to support latest changes Reproduction: execute lszdev --by-path / command Upstream-ID: ad024c06e16ec4bba31d19fb848b42c67113143d Problem-ID: 196072 Upstream-Description: zdev: modify the lsblk output parser in lszdev Since version 2.37.x, with the commit 58b510e58 ("libsmartcols: sanitize variable names on export output"), util-linux changes the output characters of lsblk, where the ":" is replaced with an "_". Align the lsblk output parser function in lszdev as per this change. Signed-off-by: Vineeth Vijayan <vnee...@linux.ibm.com> Suggested-by: Peter Oberparleiter <ober...@linux.ibm.com> Reported-by: Boris Fiuczynski <fiu...@linux.ibm.com> Reviewed-by: Peter Oberparleiter <ober...@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiu...@linux.ibm.com> Tested-by: Boris Fiuczynski <fiu...@linux.ibm.com> Signed-off-by: Jan Hoeppner <hoepp...@linux.ibm.com> Signed-off-by: Vineeth Vijayan <vnee...@linux.ibm.com> Index: s390-tools-service/zdev/src/blkinfo.c =================================================================== --- s390-tools-service.orig/zdev/src/blkinfo.c +++ s390-tools-service/zdev/src/blkinfo.c @@ -108,6 +108,8 @@ static struct blkinfo *blkinfo_from_line name = isolate_keyword(&line, "NAME=\""); majmin = isolate_keyword(&line, "MAJ:MIN=\""); + if (!majmin) + majmin = isolate_keyword(&line, "MAJ_MIN=\""); fstype = isolate_keyword(&line, "FSTYPE=\""); uuid = isolate_keyword(&line, "UUID=\""); mountpoint = isolate_keyword(&line, "MOUNTPOINT=\"");