Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qclib for openSUSE:Factory checked in at 2026-07-12 16:20:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qclib (Old) and /work/SRC/openSUSE:Factory/.qclib.new.1991 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qclib" Sun Jul 12 16:20:29 2026 rev:21 rq:1364828 version:2.5.2 Changes: -------- --- /work/SRC/openSUSE:Factory/qclib/qclib.changes 2026-06-30 15:11:53.636914773 +0200 +++ /work/SRC/openSUSE:Factory/.qclib.new.1991/qclib.changes 2026-07-12 16:20:52.503423613 +0200 @@ -1,0 +2,9 @@ +Fri Jul 10 05:35:32 UTC 2026 - Nikolay Gueorguiev <[email protected]> + +- Upgrade qclib to version v2.5.2 + * Changes: + - Recognize IBM z17 single frame and LinuxONE Rockhopper models + * Bug fixes: + - Fix duplicate LPAR group entries + +------------------------------------------------------------------- Old: ---- qclib-2.5.1.tar.gz New: ---- qclib-2.5.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qclib.spec ++++++ --- /var/tmp/diff_new_pack.a04hXu/_old 2026-07-12 16:20:54.487491476 +0200 +++ /var/tmp/diff_new_pack.a04hXu/_new 2026-07-12 16:20:54.511492297 +0200 @@ -19,7 +19,7 @@ %global _lto_cflags %{?_lto_cflags} -ffat-lto-objects Name: qclib -Version: 2.5.1 +Version: 2.5.2 Release: 0 Summary: Query Capacity library License: BSD-3-Clause ++++++ qclib-2.5.1.tar.gz -> qclib-2.5.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qclib-2.5.1/Makefile new/qclib-2.5.2/Makefile --- old/qclib-2.5.1/Makefile 2025-05-11 09:25:37.000000000 +0200 +++ new/qclib-2.5.2/Makefile 2026-07-06 09:31:02.000000000 +0200 @@ -4,7 +4,7 @@ # major : Backwards compatible changes to the API # minor : Additions leaving the API unmodified # bugfix: Bugfixes only -VERSION = 2.5.1 +VERSION = 2.5.2 VERM = $(shell echo $(VERSION) | cut -d '.' -f 1) CFLAGS ?= -g -Wall -O2 LDFLAGS ?= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qclib-2.5.1/README.md new/qclib-2.5.2/README.md --- old/qclib-2.5.1/README.md 2025-05-11 09:25:37.000000000 +0200 +++ new/qclib-2.5.2/README.md 2026-07-06 09:31:02.000000000 +0200 @@ -87,6 +87,14 @@ Release History --------------- +* __v2.5.2 (2026-07-06)__ + + _Changes_: + - Recognize IBM z17 single frame and LinuxONE Rockhopper models + + _Bug fixes_: + - Fix duplicate LPAR group entries + * __v2.5.1 (2025-05-10)__ _Changes_: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qclib-2.5.1/query_capacity.c new/qclib-2.5.2/query_capacity.c --- old/qclib-2.5.1/query_capacity.c 2025-05-11 09:25:37.000000000 +0200 +++ new/qclib-2.5.2/query_capacity.c 2026-07-06 09:31:02.000000000 +0200 @@ -239,17 +239,22 @@ void qc_mark_dump_incomplete(struct qc_handle *hdl, char *missing_component) { int rc; - char *cmd; + FILE *fp = NULL; + char *fname = NULL; - if (asprintf(&cmd, "/bin/echo %s >> %s/%s", missing_component, qc_dbg_dump_dir, - QC_DUMP_INCOMPLETE) == -1) { - qc_debug(hdl, "Error: Failed to alloc mem to indicate dump as incomplete\n"); + rc = asprintf(&fname, "%s/%s", qc_dbg_dump_dir, QC_DUMP_INCOMPLETE); + if (rc) { + qc_debug(hdl, "Error: Failed to alloc memory in qc_mark_dump_incomplete()\n"); return; } - if ((rc = system(cmd)) != 0) - qc_debug(hdl, "Error: Failed to exec command to indicate dump as incomplete, " - "rc=%d\n", rc); - free(cmd); + fp = fopen(fname, "w"); + if (fp) { + fprintf(fp, "Failed to alloc memory in qc_mark_dump_incomplete()\n"); + fclose(fp); + } else + qc_debug(hdl, "Error: Failed to open %s/%s in qc_mark_dump_incomplete()\n", + qc_dbg_dump_dir, QC_DUMP_INCOMPLETE); + free(fname); } /* Convert EBCDIC input to ASCII in place, removing trailing whitespace */ @@ -532,9 +537,10 @@ struct qc_mtype { int type; + char *ztype; // currently unused char *zname; // IBM Z - char *lname; // LinuxONE char *ltype; + char *lname; // LinuxONE char *zrack_type; // IBM Z rack mount model type char *zrack_name; char *lrack_type; // LinuxONE rack mount model type @@ -542,36 +548,38 @@ }; static struct qc_mtype mtypes[] = { - // IBM Z LinuxONE - {4381, "IBM 4381", NULL, NULL, NULL, NULL, NULL, NULL}, - {3090, "IBM 3090", NULL, NULL, NULL, NULL, NULL, NULL}, - {9221, "IBM S/390 9221", NULL, NULL, NULL, NULL, NULL, NULL}, - {9021, "IBM ES/9000 9021", NULL, NULL, NULL, NULL, NULL, NULL}, - {2003, "IBM S/390 Multiprise 2000", NULL, NULL, NULL, NULL, NULL, NULL}, - {3000, "IBM S/390 StarterPak 3000", NULL, NULL, NULL, NULL, NULL, NULL}, - {9672, "IBM S/390 9672", NULL, NULL, NULL, NULL, NULL, NULL}, - {2066, "IBM zSeries 800", NULL, NULL, NULL, NULL, NULL, NULL}, - {2064, "IBM zSeries 900", NULL, NULL, NULL, NULL, NULL, NULL}, - {2086, "IBM zSeries 890", NULL, NULL, NULL, NULL, NULL, NULL}, - {2084, "IBM zSeries 990", NULL, NULL, NULL, NULL, NULL, NULL}, - {2096, "IBM System z9 BC", NULL, NULL, NULL, NULL, NULL, NULL}, - {2094, "IBM System z9 EC", NULL, NULL, NULL, NULL, NULL, NULL}, - {2098, "IBM System z10 BC", NULL, NULL, NULL, NULL, NULL, NULL}, - {2097, "IBM System z10 EC", NULL, NULL, NULL, NULL, NULL, NULL}, - {2818, "IBM zEnterprise 114", NULL, NULL, NULL, NULL, NULL, NULL}, - {2817, "IBM zEnterprise 196", NULL, NULL, NULL, NULL, NULL, NULL}, - {2827, "IBM zEnterprise EC12", NULL, NULL, NULL, NULL, NULL, NULL}, - {2828, "IBM zEnterprise BC12", NULL, NULL, NULL, NULL, NULL, NULL}, - {2964, "IBM z13", "IBM LinuxONE Emperor", NULL, NULL, NULL, NULL, NULL}, - {2965, "IBM z13s", "IBM LinuxONE Rockhopper", NULL, NULL, NULL, NULL, NULL}, - {3906, "IBM z14", "IBM LinuxONE Emperor II", NULL, NULL, NULL, NULL, NULL}, - {3907, "IBM z14 ZR1", "IBM LinuxONE Rockhopper II", NULL, NULL, NULL, NULL, NULL}, - {8561, "IBM z15", "IBM LinuxONE III", NULL, NULL, NULL, NULL, NULL}, - {8562, "IBM z15 Model T02", "IBM LinuxONE III Model LT2", NULL, NULL, NULL, NULL, NULL}, - {3931, "IBM z16", "IBM LinuxONE Emperor 4", NULL, NULL, NULL, NULL, NULL}, - {3932, "IBM z16 A02", "IBM LinuxONE Rockhopper 4", NULL, "AGZ", "IBM z16 AGZ", "AGL", "IBM LinuxONE Rockhopper 4"}, - {9175, "IBM z17", "IBM LinuxONE Emperor 5", "ML1", NULL, NULL, NULL, NULL}, - {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL} + // IBM Z LinuxONE Z rack mount LinuxONE rack mount + {4381, NULL, "IBM 4381", NULL, NULL, NULL, NULL, NULL, NULL}, + {3090, NULL, "IBM 3090", NULL, NULL, NULL, NULL, NULL, NULL}, + {9221, NULL, "IBM S/390 9221", NULL, NULL, NULL, NULL, NULL, NULL}, + {9021, NULL, "IBM ES/9000 9021", NULL, NULL, NULL, NULL, NULL, NULL}, + {2003, NULL, "IBM S/390 Multiprise 2000", NULL, NULL, NULL, NULL, NULL, NULL}, + {3000, NULL, "IBM S/390 StarterPak 3000", NULL, NULL, NULL, NULL, NULL, NULL}, + {9672, NULL, "IBM S/390 9672", NULL, NULL, NULL, NULL, NULL, NULL}, + {2066, NULL, "IBM zSeries 800", NULL, NULL, NULL, NULL, NULL, NULL}, + {2064, NULL, "IBM zSeries 900", NULL, NULL, NULL, NULL, NULL, NULL}, + {2086, NULL, "IBM zSeries 890", NULL, NULL, NULL, NULL, NULL, NULL}, + {2084, NULL, "IBM zSeries 990", NULL, NULL, NULL, NULL, NULL, NULL}, + {2096, NULL, "IBM System z9 BC", NULL, NULL, NULL, NULL, NULL, NULL}, + {2094, NULL, "IBM System z9 EC", NULL, NULL, NULL, NULL, NULL, NULL}, + {2098, NULL, "IBM System z10 BC", NULL, NULL, NULL, NULL, NULL, NULL}, + {2097, NULL, "IBM System z10 EC", NULL, NULL, NULL, NULL, NULL, NULL}, + {2818, NULL, "IBM zEnterprise 114", NULL, NULL, NULL, NULL, NULL, NULL}, + {2817, NULL, "IBM zEnterprise 196", NULL, NULL, NULL, NULL, NULL, NULL}, + {2827, NULL, "IBM zEnterprise EC12", NULL, NULL, NULL, NULL, NULL, NULL}, + {2828, NULL, "IBM zEnterprise BC12", NULL, NULL, NULL, NULL, NULL, NULL}, + // z13 and z14 generations have multiple model types per brand - hence we cannot use + {2964, NULL, "IBM z13", NULL, "IBM LinuxONE Emperor", NULL, NULL, NULL, NULL}, + {2965, NULL, "IBM z13s", NULL, "IBM LinuxONE Rockhopper", NULL, NULL, NULL, NULL}, + {3906, NULL, "IBM z14", NULL, "IBM LinuxONE Emperor II", NULL, NULL, NULL, NULL}, + {3907, NULL, "IBM z14 ZR1", NULL, "IBM LinuxONE Rockhopper II", NULL, NULL, NULL, NULL}, + {8561, "T01", "IBM z15", "LT1", "IBM LinuxONE III", NULL, NULL, NULL, NULL}, + {8562, "T02", "IBM z15 Model T02", "LT2", "IBM LinuxONE III Model LT2", NULL, NULL, NULL, NULL}, + {3931, "A01", "IBM z16", "LA1", "IBM LinuxONE Emperor 4", NULL, NULL, NULL, NULL}, + {3932, "A02", "IBM z16 A02", "LA2", "IBM LinuxONE Rockhopper 4", "AGZ", "IBM z16 AGZ", "AGL", "IBM LinuxONE Rockhopper 4"}, + {9175, "ME1", "IBM z17", "ML1", "IBM LinuxONE Emperor 5", NULL, NULL, NULL, NULL}, + {9176, "ME2", "IBM z17 ME2", "ML2", "IBM LinuxONE Rockhopper 5", "MER", "IBM z17 MER", "MLR", "IBM LinuxONE Rockhopper 5"}, + {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} }; static int qc_post_process_ziip_thrds(struct qc_handle *hdl) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qclib-2.5.1/query_capacity.h new/qclib-2.5.2/query_capacity.h --- old/qclib-2.5.1/query_capacity.h 2025-05-11 09:25:37.000000000 +0200 +++ new/qclib-2.5.2/query_capacity.h 2026-07-06 09:31:02.000000000 +0200 @@ -5,7 +5,7 @@ #ifndef QUERY_CAPACITY #define QUERY_CAPACITY -#define QC_VERSION "2.5.1" +#define QC_VERSION "2.5.2" /* Build Customization */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qclib-2.5.1/query_capacity_data.c new/qclib-2.5.2/query_capacity_data.c --- old/qclib-2.5.1/query_capacity_data.c 2025-05-11 09:25:37.000000000 +0200 +++ new/qclib-2.5.2/query_capacity_data.c 2026-07-06 09:31:02.000000000 +0200 @@ -742,6 +742,12 @@ return hdl; } +static struct qc_handle *qc_hdl_get_lpar_group(struct qc_handle *hdl) { + for (hdl = hdl->root; hdl != NULL && *(int *)(hdl->layer) != QC_LAYER_TYPE_LPAR_GROUP; hdl = hdl->next); + + return hdl; +} + // 'hdl' is for error reporting, as 'tgthdl' might not be part of the pointer lists yet int qc_hdl_new(struct qc_handle *hdl, struct qc_handle **tgthdl, int layer_no, int layer_type_num) { @@ -900,6 +906,20 @@ return 0; } +/* LPAR groups are reflected in both, STHYI and binary hypfs, so we have to skip + * creation in case either one has already added it */ +int qc_hdl_insert_lpar_group(struct qc_handle *hdl, struct qc_handle **inserted_hdl) { + int rc = 0; + + *inserted_hdl = qc_hdl_get_lpar_group(hdl); + if (*inserted_hdl == NULL) { + qc_debug(hdl, "Insert LPAR group layer\n"); + rc = qc_hdl_insert(hdl, inserted_hdl, QC_LAYER_TYPE_LPAR_GROUP); + } + + return rc; +} + void qc_hdl_prune(struct qc_handle *hdl) { struct qc_handle *ptr = hdl, *skip = NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qclib-2.5.1/query_capacity_hypfs.c new/qclib-2.5.2/query_capacity_hypfs.c --- old/qclib-2.5.1/query_capacity_hypfs.c 2025-05-11 09:25:37.000000000 +0200 +++ new/qclib-2.5.2/query_capacity_hypfs.c 2026-07-06 09:31:02.000000000 +0200 @@ -121,7 +121,8 @@ } static void qc_dump_hypfs_bin(struct qc_handle *hdl, const char *diag, __u8 *data, ssize_t len) { - char *fname = NULL, *cmd; + FILE *fp = NULL; + char *fname = NULL; int fd, rc, success = 0; /* We re-create the same directory/file structure that we read from */ @@ -160,20 +161,21 @@ if (strcmp(diag, QC_HYPFS_ZVM) == 0) { // if we're on z/VM, we need to make sure that the LPAR file exists, as logic // uses it as a flag to indicate presence of the binary hypfs API - if (asprintf(&cmd, "/bin/touch %s/%s > /dev/null 2>&1", qc_dbg_dump_dir, - QC_HYPFS_LPAR) == -1) { + free(fname); + if (asprintf(&fname, "%s/%s", qc_dbg_dump_dir, QC_HYPFS_LPAR) == -1) { qc_debug(hdl, "Error: Mem alloc failure, could not touch '%s'. " - "Dump will not work without, fix by adding it manually later on.\n", - QC_HYPFS_LPAR); + "Dump will not work without, fix by adding it manually later on.\n", + QC_HYPFS_LPAR); qc_mark_dump_incomplete(hdl, QC_HYPFS_LPAR); goto out; } - if ((rc = system(cmd)) != 0) { - qc_debug(hdl, "Error: Command '%s' failed, rc=%d. Dump will not work " - "without, fix by adding it manually later on.\n", cmd, rc); + fp = fopen(fname, "a"); + if (!fp) { + qc_debug(hdl, "Error: Failed to touch file %s. Dump will not work " + "without, fix by adding it manually later on.\n", fname); qc_mark_dump_incomplete(hdl, QC_HYPFS_LPAR); - } - free(cmd); + } else + fclose(fp); } out: @@ -309,11 +311,11 @@ } if (qc_is_nonempty_ebcdic((__u64*)tgt_lpar->grp_name)) { /* LPAR group is only defined in case group name is not binary zero */ - qc_debug(hdl, "Insert LPAR group layer\n"); - if (qc_hdl_insert(hdl, &group, QC_LAYER_TYPE_LPAR_GROUP)) { + if (qc_hdl_insert_lpar_group(hdl, &group)) { qc_debug(hdl, "Error: Failed to insert LPAR group layer\n"); goto out_err; } + qc_debug(group, "Add LPAR group information\n"); rc = qc_set_attr_ebcdic_string(group, qc_layer_name, (unsigned char *)tgt_lpar->grp_name, sizeof(tgt_lpar->grp_name), ATTR_SRC_STHYI); if (cp_cap) rc |= qc_set_attr_int(group, qc_cp_absolute_capping, cp_cap * 0x10000 / 100, ATTR_SRC_STHYI); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qclib-2.5.1/query_capacity_int.h new/qclib-2.5.2/query_capacity_int.h --- old/qclib-2.5.1/query_capacity_int.h 2025-05-11 09:25:37.000000000 +0200 +++ new/qclib-2.5.2/query_capacity_int.h 2026-07-06 09:31:02.000000000 +0200 @@ -68,6 +68,8 @@ int qc_hdl_new(struct qc_handle *hdl, struct qc_handle **tgthdl, int layer_no, int layer_type); // Insert new layer 'inserted_hdl' of type 'type' before 'hdl'. Won't support inserting a new root int qc_hdl_insert(struct qc_handle *hdl, struct qc_handle **inserted_hdl, int type); +// Insert a new layer for an LPAR group if it doesn't exist yet +int qc_hdl_insert_lpar_group(struct qc_handle *hdl, struct qc_handle **inserted_hdl); // Insert new layer 'appended_hdl' of type 'type' after 'hdl' int qc_hdl_append(struct qc_handle *hdl, struct qc_handle **appended_hdl, int type); // Remove the layer pointed to by the handle and all layers on top diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qclib-2.5.1/query_capacity_sthyi.c new/qclib-2.5.2/query_capacity_sthyi.c --- old/qclib-2.5.1/query_capacity_sthyi.c 2025-05-11 09:25:37.000000000 +0200 +++ new/qclib-2.5.2/query_capacity_sthyi.c 2026-07-06 09:31:02.000000000 +0200 @@ -231,11 +231,11 @@ if (partition->infpval1 & infplgvl && (rc = qc_is_nonempty_ebcdic((__u64*)partition->infplgnm)) > 0) { /* LPAR group is only defined in case group name is not empty */ - qc_debug(lpar, "Insert LPAR group layer\n"); - if (qc_hdl_insert(lpar, &group, QC_LAYER_TYPE_LPAR_GROUP)) { + if (qc_hdl_insert_lpar_group(lpar, &group)) { qc_debug(lpar, "Error: Failed to insert LPAR group layer\n"); goto out_err; } + qc_debug(lpar, "Add LPAR group information\n"); rc = qc_set_attr_ebcdic_string(group, qc_layer_name, partition->infplgnm, sizeof(partition->infplgnm), ATTR_SRC_STHYI); if (htobe32(partition->infplgcp)) rc |= qc_set_attr_int(group, qc_cp_absolute_capping, htobe32(partition->infplgcp), ATTR_SRC_STHYI);
