Merge ~fheimes/ubuntu/+source/s390-tools:s390-tools-sru-lp1903984-groovy into ubuntu/+source/s390-tools:ubuntu/groovy-devel

Proposed by Frank Heimes
Status: Merged
Merge reported by: Frank Heimes
Merged at revision: 6ef63ec921307dd29cbcdb86f72adbb983b5f26b
Proposed branch: ~fheimes/ubuntu/+source/s390-tools:s390-tools-sru-lp1903984-groovy
Merge into: ubuntu/+source/s390-tools:ubuntu/groovy-devel
Diff against target: 578 lines (+544/-0)
5 files modified
debian/changelog (+18/-0)
debian/patches/s390-tools-sru-lp1898935-groovy.patch (+72/-0)
debian/patches/s390-tools-sru-lp1903984-groovy.patch (+49/-0)
debian/patches/s390-tools-sru-lp1908371-groovy.patch (+402/-0)
debian/patches/series (+3/-0)
Reviewer Review Type Date Requested Status
Lukas Märdian (community) Approve
Review via email: mp+396729@code.launchpad.net

Description of the change

debian/patches/s390-tools-lp1903984-hirsute.patch
  zcryptstats: Fix handling of partial results with many domains
  - zconf/zcrypt/zcryptstats.c: code fix to pass the correct next-domain
    to the subsequent CHSC call of a partial response
Test build is available here:
https://launchpad.net/~fheimes/+archive/ubuntu/lp1903984

debian/patches/s390-tools-sru-lp1898935-groovy.patch:
  chcpumf installed with s390-tools version 2.14.0
  no longer provides version or help information
  backport, actually cherry-pick, from s390-tools v2.15.1 to v2.14
Test build is available here:
https://launchpad.net/~fheimes/+archive/ubuntu/lp1898935

debian/patches/s390-tools-sru-lp1908371-groovy.patch:
  zipl command isn't working correctly in combination with the -M
  (respectively --mvdump) option.
Test build is available here:
https://launchpad.net/~fheimes/+archive/ubuntu/lp1908371

To post a comment you must log in.
Revision history for this message
Lukas Märdian (slyon) wrote :

Thank you Frank, very nice patch headers! I verified the upstream patches and double-checked that the package builds correctly with all patches applied in Groovy.

LGTM, uploaded!

review: Approve
Revision history for this message
Frank Heimes (fheimes) wrote :

Thx for reviewing/double-checking, uploading and sponsoring in general!

Revision history for this message
Lukas Märdian (slyon) wrote :

Uploaded no-change rebuild of s390-tools-signed_2.14.0-1ubuntu1.1 as well.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/debian/changelog b/debian/changelog
2index f570024..62d56e9 100644
3--- a/debian/changelog
4+++ b/debian/changelog
5@@ -1,3 +1,21 @@
6+s390-tools (2.14.0-1ubuntu1.1) groovy; urgency=medium
7+
8+ * debian/patches/s390-tools-sru-lp1903984-groovy.patch
9+ zcryptstats: Fix handling of partial results with many domains
10+ Thanks to Ingo Franzki (LP: #1903984)
11+ * debian/patches/s390-tools-sru-lp1898935-groovy.patch:
12+ chcpumf installed with s390-tools version 2.14.0
13+ no longer provides version or help information
14+ backport, actually cherry-pick, from s390-tools v2.15.1 to v2.14
15+ Thanks to Thomas Richter (LP: #1898935)
16+ * debian/patches/s390-tools-sru-lp1908371-groovy.patch:
17+ zipl command isn't working correctly in combination with the -M
18+ (respectively --mvdump) option.
19+ cherry-picking 4 commits from s390-tools v2.15.1 to v2.14
20+ Thanks to Stefan Haberland and Sven Schnelle (LP: #1908371)
21+
22+ -- Frank Heimes <frank.heimes@canonical.com> Tue, 19 Jan 2021 19:23:32 +0100
23+
24 s390-tools (2.14.0-1ubuntu1) groovy; urgency=medium
25
26 * Merge from Debian, remaining changes:
27diff --git a/debian/patches/s390-tools-sru-lp1898935-groovy.patch b/debian/patches/s390-tools-sru-lp1898935-groovy.patch
28new file mode 100644
29index 0000000..3999dc7
30--- /dev/null
31+++ b/debian/patches/s390-tools-sru-lp1898935-groovy.patch
32@@ -0,0 +1,72 @@
33+Description: chcpumf installed with s390-tools version 2.14.0 no longer provides version or help information
34+ With s390-tools version 2.14.0 installed with Ubuntu 20.10 the -v and -h
35+ options to chcpumf no longer report the version or display help information.
36+ Rather the message "No CPU-measurement sampling facility detected" is
37+ displayed. This behavior diverges from previous versions and is not consistent
38+ with other binaries provided by the s390-tools package.
39+ This regression was introduced with 2.14 and got fixed in 2.15.1.
40+ - cpumf/chcpumf.c: Fix version and help printout when CPUMF not installed
41+Author: Thomas Richter <tmricht@linux.ibm.com>
42+Origin: https://github.com/ibm-s390-tools/s390-tools/commit/ea10995f4d62e6f6adbbc9ec16dd84bb6386618b
43+Bug-IBM: IBM Bugzilla 188540
44+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1898935
45+Forwarded: not-needed
46+Applied-Upstream: >= v2.15.1
47+Reviewed-by: Frank Heimes <frank.heimes@canonical.com>
48+Last-Update: 2020-12-21
49+---
50+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
51+--- a/cpumf/chcpumf.c
52++++ b/cpumf/chcpumf.c
53+@@ -60,10 +60,6 @@
54+ }
55+ };
56+
57+-/* Parse tool parameters. Fill in global variables keep_case, buffersize and
58+- * command according to parameters. Return VMCP_OK on success, VMCP_OPT
59+- * in case of parameter errors. In case of --help or --version, print
60+- * respective text to stdout and exit. */
61+ static long parse_buffersize(char *string)
62+ {
63+ char *suffix;
64+@@ -91,6 +87,7 @@
65+
66+ static int read_sfb(unsigned long *min, unsigned long *max)
67+ {
68++ unsigned long cur_min_sdb, cur_max_sdb;
69+ int rc = EXIT_SUCCESS;
70+ FILE *fp;
71+
72+@@ -99,9 +96,14 @@
73+ linux_error(PERF_SFB_SIZE);
74+ return EXIT_FAILURE;
75+ }
76+- if (fscanf(fp, "%ld,%ld", min, max) != 2) {
77++ if (fscanf(fp, "%ld,%ld", &cur_min_sdb, &cur_max_sdb) != 2) {
78+ fprintf(stderr, "Error: Can not parse file " PERF_SFB_SIZE);
79+ rc = EXIT_FAILURE;
80++ } else {
81++ if (*min == 0)
82++ *min = cur_min_sdb;
83++ if (*max == 0)
84++ *max = cur_max_sdb;
85+ }
86+ fclose(fp);
87+ return rc;
88+@@ -196,6 +198,7 @@
89+ util_prg_init(&prg);
90+ util_opt_init(opt_vec, NULL);
91+
92++ parse_args(argc, argv);
93+ if (stat(PERF_PATH PERF_SF, &sbuf) != 0) {
94+ fprintf(stderr,
95+ "No CPU-measurement sampling facility detected\n");
96+@@ -203,8 +206,6 @@
97+ }
98+ if (read_sfb(&min_sdb, &max_sdb))
99+ return ret;
100+- /* Overwrite min_sdb and/or max_sdb */
101+- parse_args(argc, argv);
102+ if (min_sdb >= max_sdb) {
103+ fprintf(stderr, "The specified maximum must be greater "
104+ "than the minimum\n");
105diff --git a/debian/patches/s390-tools-sru-lp1903984-groovy.patch b/debian/patches/s390-tools-sru-lp1903984-groovy.patch
106new file mode 100644
107index 0000000..fc4952f
108--- /dev/null
109+++ b/debian/patches/s390-tools-sru-lp1903984-groovy.patch
110@@ -0,0 +1,49 @@
111+Description: zcryptstats fails
112+ The zcryptstats tool reports data for only the last two domain IDs.
113+ Further, it hangs if one collect data for a complete crypto card,
114+ and then one has to kill the ssh session to get back.
115+ Patch/commit is:
116+ cf2311f cf2311f1f1de17435b49ba8c8697be91705ba031
117+ "zcryptstats: Fix handling of partial results with many domains"
118+ - zconf/zcrypt/zcryptstats.c: code fix to pass the correct next-domain
119+ to the subsequent CHSC call of a partial response
120+Author: Ingo Franzki <ifranzki@linux.ibm.com>
121+Origin: https://github.com/ibm-s390-tools/s390-tools/commit/cf2311f1f1de17435b49ba8c8697be91705ba031
122+Bug-IBM: IBM Bugzilla 189183
123+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1903984
124+Forwarded: not-needed
125+Applied-Upstream: upstream accepted with > v2.15.1
126+Reviewed-by: Frank Heimes <frank.heimes@canonical.com>
127+Last-Update: 2021-01-19
128+---
129+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
130+--- a/zconf/zcrypt/zcryptstats.c
131++++ b/zconf/zcrypt/zcryptstats.c
132+@@ -1178,8 +1178,14 @@
133+ scdmd_area.request.header.code = 0x102d;
134+ scdmd_area.request.header.length =
135+ sizeof(struct chsc_scdmd_request);
136+- scdmd_area.request.first_drid.ap_index = card;
137+- scdmd_area.request.first_drid.domain_index = g.min_domain;
138++ if (scdmd_area.response.p) {
139++ scdmd_area.request.first_drid =
140++ scdmd_area.response.crid;
141++ } else {
142++ scdmd_area.request.first_drid.ap_index = card;
143++ scdmd_area.request.first_drid.domain_index =
144++ g.min_domain;
145++ }
146+ scdmd_area.request.last_drid.ap_index = card;
147+ scdmd_area.request.last_drid.domain_index = g.max_domain;
148+ scdmd_area.request.s = 1;
149+@@ -1217,10 +1223,6 @@
150+ rc = process_apqn_measurement_data(&scdmd_area);
151+ if (rc != 0)
152+ break;
153+-
154+- if (scdmd_area.response.p)
155+- scdmd_area.request.first_drid =
156+- scdmd_area.response.crid;
157+ } while (scdmd_area.response.p);
158+
159+ return rc;
160diff --git a/debian/patches/s390-tools-sru-lp1908371-groovy.patch b/debian/patches/s390-tools-sru-lp1908371-groovy.patch
161new file mode 100644
162index 0000000..7ba3725
163--- /dev/null
164+++ b/debian/patches/s390-tools-sru-lp1908371-groovy.patch
165@@ -0,0 +1,402 @@
166+Description: The zipl command doesn't work correctly in combination with the -M
167+ (respectively --mvdump) option. There is an error with the preparation of
168+ multi-volume dumps, since the bus-ID for the first disk partition that is
169+ listed in file dump_conf (DEVLIST) isn't found.
170+ - include/lib/util_sys.h: declaration of new util_sys_* functions
171+ - include/lib/util_file.h: declaration of two new util_file_read_* functions
172+ - libutil/util_sys.c: implementation of new util_sys_* functions;
173+ getting minor and major device number now based on base device
174+ and prechecking if base device available util_file_read_* functions
175+ - libutil/util_file.c: implementation of two new
176+ - zipl/src/disk.c: removing blkext_* function set and changing code to
177+ use the new util_sys_* functions
178+Author: Stefan Haberland <sth@linux.ibm.com>, Sven Schnelle <svens@linux.ibm.com>
179+Origin: https://github.com/ibm-s390-tools/s390-tools/commit/fa7a4dafa3d89b2e8787de102e4362e895d44b05
180+ https://github.com/ibm-s390-tools/s390-tools/commit/aa8c2945cc7b047c626e75817c6a3e3924413023
181+ https://github.com/ibm-s390-tools/s390-tools/commit/6802b86414b48c4f118da09c7bf7ee142a459fa0
182+ https://github.com/ibm-s390-tools/s390-tools/commit/37348ef662a7052dae798e500ca8c9b769fff3e6
183+Bug-IBM: IBM Bugzilla 187221
184+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1908371
185+Forwarded: not-needed
186+Applied-Upstream: >= v2.15.1
187+Reviewed-by: Frank Heimes <frank.heimes@canonical.com>
188+Last-Update: 2020-12-22
189+---
190+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
191+--- a/include/lib/util_file.h
192++++ b/include/lib/util_file.h
193+@@ -12,8 +12,10 @@
194+ #define LIB_UTIL_FILE_H
195+
196+ int util_file_read_line(char *str, size_t size, const char *fmt, ...);
197++int util_file_read_i(int *val, int base, const char *fmt, ...);
198+ int util_file_read_l(long *val, int base, const char *fmt, ...);
199+ int util_file_read_ll(long long *val, int base, const char *fmt, ...);
200++int util_file_read_ui(unsigned int *val, int base, const char *fmt, ...);
201+ int util_file_read_ul(unsigned long *val, int base, const char *fmt, ...);
202+ int util_file_read_ull(unsigned long long *val, int base, const char *fmt, ...);
203+
204+--- a/include/lib/util_sys.h
205++++ b/include/lib/util_sys.h
206+@@ -12,6 +12,11 @@
207+ #ifndef LIB_UTIL_SYS_H
208+ #define LIB_UTIL_SYS_H
209+
210++#include <stdbool.h>
211++
212+ int util_sys_get_dev_addr(const char *dev, char *addr);
213++bool util_sys_dev_is_partition(dev_t dev);
214++int util_sys_get_partnum(dev_t dev);
215++int util_sys_get_base_dev(dev_t dev, dev_t *base_dev);
216+
217+ #endif /** LIB_UTIL_SYS_H @} */
218+--- a/libutil/util_file.c
219++++ b/libutil/util_file.c
220+@@ -282,6 +282,44 @@
221+ }
222+
223+ /**
224++ * Read a file and convert it to signed int according to given base
225++ *
226++ * @param[out] val Buffer for value
227++ * @param[in] base Base for conversion, either 8, 10, or 16
228++ * @param[in] fmt Format string for generation of the path name
229++ * @param[in] ... Parameters for format string
230++ *
231++ * @retval 0 Integer has been read correctly
232++ * @retval -1 Error while reading file
233++ */
234++int util_file_read_i(int *val, int base, const char *fmt, ...)
235++{
236++ char path[PATH_MAX], buf[512];
237++ va_list ap;
238++ int count;
239++
240++ /* Construct the file name */
241++ UTIL_VSPRINTF(path, fmt, ap);
242++
243++ if (file_gets(buf, sizeof(buf), path))
244++ return -1;
245++ switch (base) {
246++ case 8:
247++ count = sscanf(buf, "%do", val);
248++ break;
249++ case 10:
250++ count = sscanf(buf, "%dd", val);
251++ break;
252++ case 16:
253++ count = sscanf(buf, "%dx", val);
254++ break;
255++ default:
256++ util_panic("Invalid base: %d\n", base);
257++ }
258++ return (count == 1) ? 0 : -1;
259++}
260++
261++/**
262+ * Read a file and convert it to signed long according to given base
263+ *
264+ * @param[out] val Buffer for value
265+@@ -353,6 +391,44 @@
266+ break;
267+ default:
268+ util_panic("Invalid base: %d\n", base);
269++ }
270++ return (count == 1) ? 0 : -1;
271++}
272++
273++/**
274++ * Read a file and convert it to unsigned int according to given base
275++ *
276++ * @param[out] val Buffer for value
277++ * @param[in] base Base for conversion, either 8, 10, or 16
278++ * @param[in] fmt Format string for generation of the path name
279++ * @param[in] ... Parameters for format string
280++ *
281++ * @retval 0 Integer has been read correctly
282++ * @retval -1 Error while reading file
283++ */
284++int util_file_read_ui(unsigned int *val, int base, const char *fmt, ...)
285++{
286++ char path[PATH_MAX], buf[512];
287++ va_list ap;
288++ int count;
289++
290++ /* Construct the file name */
291++ UTIL_VSPRINTF(path, fmt, ap);
292++
293++ if (file_gets(buf, sizeof(buf), path))
294++ return -1;
295++ switch (base) {
296++ case 8:
297++ count = sscanf(buf, "%uo", val);
298++ break;
299++ case 10:
300++ count = sscanf(buf, "%uu", val);
301++ break;
302++ case 16:
303++ count = sscanf(buf, "%ux", val);
304++ break;
305++ default:
306++ util_panic("Invalid base: %d\n", base);
307+ }
308+ return (count == 1) ? 0 : -1;
309+ }
310+--- a/libutil/util_sys.c
311++++ b/libutil/util_sys.c
312+@@ -11,17 +11,114 @@
313+
314+ #include <err.h>
315+ #include <errno.h>
316++#include <linux/fs.h>
317+ #include <stdlib.h>
318++#include <stdio.h>
319+ #include <string.h>
320+ #include <sys/stat.h>
321+ #include <sys/sysmacros.h>
322+ #include <unistd.h>
323+
324++#include "lib/util_file.h"
325++#include "lib/util_libc.h"
326+ #include "lib/util_path.h"
327+ #include "lib/util_sys.h"
328+
329+ /* lstat() doesn't work for sysfs files, a fixed size is therefore inevitable */
330+ #define READLINK_SIZE 256
331++#define PAGE_SIZE 4096
332++
333++/**
334++ * Return the partition number of a given partition.
335++ *
336++ * @param[in] dev Device node of interest
337++ *
338++ * @retval int Partition number of the device
339++ * @retval -1 Error when trying to read the partition number.
340++ */
341++int util_sys_get_partnum(dev_t dev)
342++{
343++ int partnum = -1;
344++ char *path;
345++
346++ path = util_path_sysfs("dev/block/%u:%u/partition",
347++ major(dev), minor(dev));
348++ if (util_file_read_i(&partnum, 10, path)) {
349++ warnx("Could not read from path '%s'", path);
350++ goto out;
351++ }
352++ if (partnum <= 0) {
353++ warnx("Bad partition number in '%s'", path);
354++ partnum = -1;
355++ goto out;
356++ }
357++
358++out:
359++ free(path);
360++ return partnum;
361++}
362++
363++/**
364++ * Determine if the given device is a partition.
365++ *
366++ * @param[in] dev Device node of interest
367++ *
368++ * @retval true Device is partition
369++ * @retval false Device is not a partition
370++ */
371++bool util_sys_dev_is_partition(dev_t dev)
372++{
373++ bool is_part;
374++ char *path;
375++
376++ path = util_path_sysfs("dev/block/%u:%u/partition",
377++ major(dev), minor(dev));
378++ is_part = util_path_exists(path);
379++ free(path);
380++
381++ return is_part;
382++}
383++
384++/**
385++ * Determine base device
386++ *
387++ * This function determines the base device \p base_dev of a given
388++ * device \p dev. If \p dev is a base device, \p base_dev becomes \p dev.
389++ *
390++ * @param[in] dev Device node of interest
391++ * @param[out] base_dev Identified base device
392++ *
393++ * @retval 0 Success
394++ * @retval -1 Error while reading device information or
395++ * constructed path
396++ */
397++int util_sys_get_base_dev(dev_t dev, dev_t *base_dev)
398++{
399++ int base_major, base_minor;
400++ char buf[PAGE_SIZE];
401++ char *path;
402++
403++ /* check if the device already is a base device */
404++ if (!util_sys_dev_is_partition(dev)) {
405++ *base_dev = makedev(major(dev), minor(dev));
406++ return 0;
407++ }
408++ path = util_path_sysfs("dev/block/%d:%d/../dev",
409++ major(dev), minor(dev));
410++ if (util_file_read_line(buf, sizeof(buf), path)) {
411++ warnx("Could not read from path '%s'", path);
412++ free(path);
413++ return -1;
414++ }
415++ free(path);
416++ if (sscanf(buf, "%i:%i", &base_major, &base_minor) != 2) {
417++ warn("Could not parse major:minor from string '%s'", buf);
418++ return -1;
419++ }
420++ *base_dev = makedev(base_major, base_minor);
421++
422++ return 0;
423++}
424+
425+ /**
426+ * Identify device address
427+@@ -44,13 +141,17 @@
428+ unsigned int maj, min;
429+ struct stat s;
430+ ssize_t len;
431++ dev_t base;
432+ char *path;
433+
434+ if (stat(dev, &s) != 0)
435+ return -1;
436+
437+- maj = major(s.st_rdev);
438+- min = minor(s.st_rdev);
439++ if (util_sys_get_base_dev(s.st_rdev, &base))
440++ return -1;
441++
442++ maj = major(base);
443++ min = minor(base);
444+
445+ if (S_ISBLK(s.st_mode))
446+ path = util_path_sysfs("dev/block/%u:%u/device", maj, min);
447+--- a/zipl/src/disk.c
448++++ b/zipl/src/disk.c
449+@@ -25,6 +25,7 @@
450+ #include <linux/fiemap.h>
451+
452+ #include "lib/util_proc.h"
453++#include "lib/util_sys.h"
454+
455+ #include "disk.h"
456+ #include "error.h"
457+@@ -89,88 +90,6 @@
458+ return 0;
459+ }
460+
461+-static int blkext_get_partnum(dev_t dev)
462+-{
463+- char path[PATH_MAX], *buf;
464+- int dev_major, dev_minor, partnum = -1;
465+-
466+- dev_major = major(dev);
467+- dev_minor = minor(dev);
468+- snprintf(path, PATH_MAX, "/sys/dev/block/%d:%d/partition",
469+- dev_major, dev_minor);
470+-
471+- if (misc_read_special_file(path, &buf, NULL, 1)) {
472+- error_text("Could not read from path '%s'", path);
473+- return -1;
474+- }
475+-
476+- partnum = atoi(buf);
477+- free(buf);
478+- if (partnum < 0) {
479+- error_text("Bad partition number in '%s'", path);
480+- return -1;
481+- }
482+-
483+- return partnum;
484+-}
485+-
486+-static int blkext_is_base_device(dev_t dev)
487+-{
488+- int dev_major, dev_minor;
489+- char path[PATH_MAX];
490+- struct stat stats;
491+-
492+- dev_major = major(dev);
493+- dev_minor = minor(dev);
494+-
495+- snprintf(path, PATH_MAX, "/sys/dev/block/%d:%d/partition",
496+- dev_major, dev_minor);
497+- return (stat(path, &stats));
498+-}
499+-
500+-static int blkext_get_base_dev(dev_t dev, dev_t *base_dev)
501+-{
502+- int base_major, base_minor;
503+- char dev_path[PATH_MAX], base_path[PATH_MAX];
504+- char *temp_path, *buf;
505+-
506+- misc_asprintf(&temp_path, "/sys/dev/block/%d:%d", major(dev), minor(dev));
507+- if (!realpath(temp_path, dev_path)) {
508+- error_reason(strerror(errno));
509+- error_text("Could not resolve link %s", temp_path);
510+- free(temp_path);
511+- return -1;
512+- }
513+- free(temp_path);
514+-
515+- misc_asprintf(&temp_path, "%s/..", dev_path);
516+- if (!realpath(temp_path, base_path)) {
517+- error_reason(strerror(errno));
518+- error_text("Could not resolve path %s", temp_path);
519+- free(temp_path);
520+- return -1;
521+- }
522+- free(temp_path);
523+-
524+- misc_asprintf(&temp_path, "%s/dev", base_path);
525+- if (misc_read_special_file(temp_path, &buf, NULL, 1)) {
526+- error_text("Could not read from path '%s'", temp_path);
527+- free(temp_path);
528+- return -1;
529+- }
530+- free(temp_path);
531+-
532+- if (sscanf(buf, "%i:%i", &base_major, &base_minor) != 2) {
533+- error_text("Could not parse major:minor from string '%s'", buf);
534+- free(buf);
535+- return -1;
536+- }
537+-
538+- free(buf);
539+- *base_dev = makedev(base_major, base_minor);
540+- return 0;
541+-}
542+-
543+ /* Return non-zero for ECKD type. */
544+ int
545+ disk_is_eckd(disk_type_t type)
546+@@ -492,15 +411,15 @@
547+ data->devno = -1;
548+ data->type = disk_type_scsi;
549+
550+- if (blkext_is_base_device(stats.st_rdev)) {
551+- data->device = stats.st_rdev;
552+- data->partnum = 0;
553+- } else {
554+- if (blkext_get_base_dev(stats.st_rdev, &data->device))
555++ if (util_sys_dev_is_partition(stats.st_rdev)) {
556++ if (util_sys_get_base_dev(stats.st_rdev, &data->device))
557+ goto out_close;
558+- data->partnum = blkext_get_partnum(stats.st_rdev);
559++ data->partnum = util_sys_get_partnum(stats.st_rdev);
560+ if (data->partnum == -1)
561+ goto out_close;
562++ } else {
563++ data->device = stats.st_rdev;
564++ data->partnum = 0;
565+ }
566+ } else {
567+ /* Driver name is unknown */
568diff --git a/debian/patches/series b/debian/patches/series
569index 74ab653..6d4ff86 100644
570--- a/debian/patches/series
571+++ b/debian/patches/series
572@@ -6,3 +6,6 @@ sg3-utils.patch
573 0001-zkey-add-initramfs-hook.patch
574 0001-zkey-on-Ubuntu-use-default-benchmarked-Argon2i-with-.patch
575 0001-dumpconf-Don-t-run-the-service-in-LXC.patch
576+s390-tools-sru-lp1903984-groovy.patch
577+s390-tools-sru-lp1898935-groovy.patch
578+s390-tools-sru-lp1908371-groovy.patch

Subscribers

People subscribed via source and target branches