parent
74a9a67fe8
commit
b04575bb79
33
0012-fix-multipath-device-detection-in-ziomon.patch
Normal file
33
0012-fix-multipath-device-detection-in-ziomon.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From e9c5f5e15122b143f5f202e9782773321f8cf6b9 Mon Sep 17 00:00:00 2001
|
||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
||||
Date: Fri, 13 Nov 2009 10:46:57 +0100
|
||||
Subject: [PATCH 12/14] fix multipath device detection in ziomon
|
||||
|
||||
Description: ziomon: Fix multipath device detection
|
||||
Symptom: Running ziomon with a valid multipath device like
|
||||
/dev/mapper/36005076303ffc56200000000000010cc
|
||||
fails with "ziomon: The following devices do not seem
|
||||
to exist:".
|
||||
Problem: The output from multipath -l is not appended correctly to
|
||||
the mp_arr array.
|
||||
Solution: Properly initializing mp_arr to an empty array fixes this.
|
||||
---
|
||||
ziomon/ziomon | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/ziomon/ziomon b/ziomon/ziomon
|
||||
index 7449843..924c1dd 100755
|
||||
--- a/ziomon/ziomon
|
||||
+++ b/ziomon/ziomon
|
||||
@@ -471,7 +471,7 @@ function clean_devices() {
|
||||
function check_for_multipath_devices() {
|
||||
local i;
|
||||
local j;
|
||||
- local mp_arr;
|
||||
+ local mp_arr=();
|
||||
local line;
|
||||
local devices_basenames;
|
||||
local tmp;
|
||||
--
|
||||
1.6.3.3
|
||||
|
119
0013-zipl-handle-status-during-ipl.patch
Normal file
119
0013-zipl-handle-status-during-ipl.patch
Normal file
@ -0,0 +1,119 @@
|
||||
From 4770ba2827a5c582c6376139f1ec2d10519779e2 Mon Sep 17 00:00:00 2001
|
||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
||||
Date: Fri, 13 Nov 2009 10:48:17 +0100
|
||||
Subject: [PATCH 13/14] zipl - handle status during ipl
|
||||
|
||||
Description: zipl: handle status during ipl
|
||||
Symptom: You encounter an error during IPL with "disabled wait" message.
|
||||
Problem: During the IPL sequence the subchannel of the IPL device has
|
||||
to be enabled. If there is a status pending or busy condition
|
||||
on the subchannel the IPL code abborts the IPL and goes into
|
||||
disabled wait.
|
||||
Solution: To resolve the problem the IPL code accepts the status pending
|
||||
or busy condition on the subchannel and does up to 256 retries.
|
||||
---
|
||||
zipl/boot/common.S | 65 ++++++++++++++++++++++++++++++++++-----------------
|
||||
1 files changed, 43 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/zipl/boot/common.S b/zipl/boot/common.S
|
||||
index 620fed9..fa45e5a 100644
|
||||
--- a/zipl/boot/common.S
|
||||
+++ b/zipl/boot/common.S
|
||||
@@ -6,6 +6,7 @@
|
||||
#
|
||||
|
||||
# some definitions from kernel land
|
||||
+__LC_IRB = 0x0300
|
||||
__LC_IPLDEV = 0xC6C
|
||||
__LC_PANIC_MAGIC= 0xE00
|
||||
|
||||
@@ -186,23 +187,33 @@ _load_blocklist:
|
||||
_enable_device:
|
||||
stm %r6,%r15,24(%r15)
|
||||
basr %r13,0 # base register
|
||||
-0: s %r15,1f-0b(%r13)
|
||||
+0: s %r15,4f-0b(%r13)
|
||||
lr %r1,%r2
|
||||
- l %r2,4f-0b(%r13) # set panik code early
|
||||
- stsch 2f-0b(%r13)
|
||||
- oi 2f-0b+5(%r13),0x84 # enable ssch and multipath mode
|
||||
- msch 2f-0b(%r13)
|
||||
- bnz _panik-0b(%r13) # subchannel busy or in error ?
|
||||
- lctl %c6,%c6,3f-0b(%r13) # enable all interrupt classes
|
||||
+ l %r2,7f-0b(%r13) # set panik code early
|
||||
+ stsch 5f-0b(%r13)
|
||||
+ brc 1,3f # panic if not operational
|
||||
+ oi 5f-0b+5(%r13),0x80 # enable subchannel
|
||||
+ lhi %r6,256 # r6 retry counter
|
||||
+1: # modify subchannel
|
||||
+ msch 5f-0b(%r13)
|
||||
+ brc 6,2f # status pending or busy
|
||||
+ brc 1,3f # panic if not operational
|
||||
+ lctl %c6,%c6,6f-0b(%r13) # enable all interrupt classes
|
||||
sr %r2,%r2
|
||||
- ic %r2,10+2f-0b(%r13) # return lpum in r2
|
||||
+ ic %r2,10+5f-0b(%r13) # return lpum in r2
|
||||
lm %r6,%r15,120(%r15)
|
||||
br %r14
|
||||
-1: .long 96
|
||||
+2: # clear status and retry
|
||||
+ tsch __LC_IRB
|
||||
+ brc 1,3f # panic if not operational
|
||||
+ brct %r6,1b # retry
|
||||
+3: # panic
|
||||
+ b _panik-0b(%r13) # panic
|
||||
+4: .long 96
|
||||
.align 8
|
||||
-2: .fill 64,1,0
|
||||
-3: .long 0xff000000 # CR6 initial value
|
||||
-4: .long EENABLE_DEV
|
||||
+5: .fill 64,1,0
|
||||
+6: .long 0xff000000 # CR6 initial value
|
||||
+7: .long EENABLE_DEV
|
||||
|
||||
#
|
||||
# Disable I/O on the ipl device.
|
||||
@@ -211,20 +222,30 @@ _enable_device:
|
||||
_disable_device:
|
||||
stm %r6,%r15,24(%r15)
|
||||
basr %r13,0 # base register
|
||||
-0: s %r15,1f-0b(%r13)
|
||||
+0: s %r15,4f-0b(%r13)
|
||||
lr %r1,%r2
|
||||
- l %r2,3f-0b(%r13) # set panik code early
|
||||
- lctl %c6,%c6,2f-0b(%r13) # disable all interrupt classes
|
||||
- stsch 2f-0b(%r13)
|
||||
- ni 2f-0b+5(%r13),0x7B # disable ssch and multipath mode
|
||||
- msch 2f-0b(%r13)
|
||||
- bnz _panik-0b(%r13) # subchannel busy or in error ?
|
||||
+ l %r2,6f-0b(%r13) # set panik code early
|
||||
+ lctl %c6,%c6,5f-0b(%r13) # disable all interrupt classes
|
||||
+ stsch 5f-0b(%r13)
|
||||
+ brc 1,3f # panic if not operational
|
||||
+ ni 5f-0b+5(%r13),0x7F # disable subchannel
|
||||
+ lhi %r6,256 # r6 retry counter
|
||||
+1: # modify subchannel
|
||||
+ msch 5f-0b(%r13)
|
||||
+ brc 6,2f # status pending or busy
|
||||
+ brc 1,3f # panic if not operational
|
||||
lm %r6,%r15,120(%r15)
|
||||
br %r14
|
||||
-1: .long 96
|
||||
+2: # clear status and retry
|
||||
+ tsch __LC_IRB
|
||||
+ brc 1,3f # panic if not operational
|
||||
+ brct %r6,1b
|
||||
+3: # panic
|
||||
+ b _panik-0b(%r13) # panic
|
||||
+4: .long 96
|
||||
.align 8
|
||||
-2: .long 0x00000000 # CR6 (all interrupts classes disabled)
|
||||
-3: .long EDISABLE_DEV
|
||||
+5: .long 0x00000000 # CR6 (all interrupts classes disabled)
|
||||
+6: .long EDISABLE_DEV
|
||||
.endm
|
||||
|
||||
.macro io_subroutines
|
||||
--
|
||||
1.6.3.3
|
||||
|
285
0014-dasdview-fdasd-fix-floating-point-error-for-unformat.patch
Normal file
285
0014-dasdview-fdasd-fix-floating-point-error-for-unformat.patch
Normal file
@ -0,0 +1,285 @@
|
||||
From 72168f2269dac94d25112e0ad548bd3fcdf907d9 Mon Sep 17 00:00:00 2001
|
||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
||||
Date: Fri, 13 Nov 2009 10:49:37 +0100
|
||||
Subject: [PATCH 14/14] dasdview, fdasd: fix floating point error for unformatted devices
|
||||
|
||||
When executed on an unformatted device the tools dasdview and fdasd
|
||||
will end with an floating point exception error.
|
||||
The reason for the error lies in the fact that we cannot rely on the
|
||||
HDIO_GETGEO ioctl to report a correct number of cylinders and so we
|
||||
compute the number of cylinders from the device size. However,
|
||||
for unformatted devices the device size is zero and thus our
|
||||
computation ends with a floating point exception.
|
||||
To solve this issue read the correct number of cylinders from
|
||||
the DASD device characteristics, which can be found in the data
|
||||
returned by the BIODASDINFO ioctl.
|
||||
---
|
||||
dasdview/dasdview.c | 22 +++++++-------
|
||||
dasdview/dasdview.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
fdasd/fdasd.c | 18 ++++++------
|
||||
fdasd/fdasd.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 168 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/dasdview/dasdview.c b/dasdview/dasdview.c
|
||||
index a74ae33..2909b16 100644
|
||||
--- a/dasdview/dasdview.c
|
||||
+++ b/dasdview/dasdview.c
|
||||
@@ -169,7 +169,7 @@ static void
|
||||
dasdview_get_info(dasdview_info_t *info)
|
||||
{
|
||||
int fd;
|
||||
- u_int64_t device_size;
|
||||
+ struct dasd_eckd_characteristics *characteristics;
|
||||
|
||||
fd = open(info->device, O_RDONLY);
|
||||
if (fd == -1)
|
||||
@@ -201,16 +201,6 @@ dasdview_get_info(dasdview_info_t *info)
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
- if (ioctl(fd, BLKGETSIZE64, &device_size) != 0) {
|
||||
- close(fd);
|
||||
- zt_error_print("dasdview: ioctl error\n" \
|
||||
- "Could not retrieve device size information.\n");
|
||||
- exit(-1);
|
||||
- }
|
||||
-
|
||||
- info->hw_cylinders = ((device_size / info->blksize)
|
||||
- / info->geo.sectors) / info->geo.heads;
|
||||
-
|
||||
/* get disk information */
|
||||
if (ioctl(fd, BIODASDINFO2, &info->dasd_info) == 0) {
|
||||
info->dasd_info_version = 2;
|
||||
@@ -223,6 +213,16 @@ dasdview_get_info(dasdview_info_t *info)
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
+
|
||||
+ characteristics = (struct dasd_eckd_characteristics *)
|
||||
+ &info->dasd_info.characteristics;
|
||||
+ if (characteristics->no_cyl == LV_COMPAT_CYL &&
|
||||
+ characteristics->long_no_cyl)
|
||||
+ info->hw_cylinders = characteristics->long_no_cyl;
|
||||
+ else
|
||||
+ info->hw_cylinders = characteristics->no_cyl;
|
||||
+
|
||||
+
|
||||
close(fd);
|
||||
}
|
||||
|
||||
diff --git a/dasdview/dasdview.h b/dasdview/dasdview.h
|
||||
index 39e1228..5388592 100644
|
||||
--- a/dasdview/dasdview.h
|
||||
+++ b/dasdview/dasdview.h
|
||||
@@ -72,6 +72,80 @@ typedef struct dasd_information2_t {
|
||||
unsigned int reserved7; /* reserved for further use ,... */
|
||||
} dasd_information2_t;
|
||||
|
||||
+struct dasd_eckd_characteristics {
|
||||
+ unsigned short cu_type;
|
||||
+ struct {
|
||||
+ unsigned char support:2;
|
||||
+ unsigned char async:1;
|
||||
+ unsigned char reserved:1;
|
||||
+ unsigned char cache_info:1;
|
||||
+ unsigned char model:3;
|
||||
+ } __attribute__ ((packed)) cu_model;
|
||||
+ unsigned short dev_type;
|
||||
+ unsigned char dev_model;
|
||||
+ struct {
|
||||
+ unsigned char mult_burst:1;
|
||||
+ unsigned char RT_in_LR:1;
|
||||
+ unsigned char reserved1:1;
|
||||
+ unsigned char RD_IN_LR:1;
|
||||
+ unsigned char reserved2:4;
|
||||
+ unsigned char reserved3:8;
|
||||
+ unsigned char defect_wr:1;
|
||||
+ unsigned char XRC_supported:1;
|
||||
+ unsigned char reserved4:1;
|
||||
+ unsigned char striping:1;
|
||||
+ unsigned char reserved5:4;
|
||||
+ unsigned char cfw:1;
|
||||
+ unsigned char reserved6:2;
|
||||
+ unsigned char cache:1;
|
||||
+ unsigned char dual_copy:1;
|
||||
+ unsigned char dfw:1;
|
||||
+ unsigned char reset_alleg:1;
|
||||
+ unsigned char sense_down:1;
|
||||
+ } __attribute__ ((packed)) facilities;
|
||||
+ unsigned char dev_class;
|
||||
+ unsigned char unit_type;
|
||||
+ unsigned short no_cyl;
|
||||
+ unsigned short trk_per_cyl;
|
||||
+ unsigned char sec_per_trk;
|
||||
+ unsigned char byte_per_track[3];
|
||||
+ unsigned short home_bytes;
|
||||
+ unsigned char formula;
|
||||
+ union {
|
||||
+ struct {
|
||||
+ unsigned char f1;
|
||||
+ unsigned short f2;
|
||||
+ unsigned short f3;
|
||||
+ } __attribute__ ((packed)) f_0x01;
|
||||
+ struct {
|
||||
+ unsigned char f1;
|
||||
+ unsigned char f2;
|
||||
+ unsigned char f3;
|
||||
+ unsigned char f4;
|
||||
+ unsigned char f5;
|
||||
+ } __attribute__ ((packed)) f_0x02;
|
||||
+ } __attribute__ ((packed)) factors;
|
||||
+ unsigned short first_alt_trk;
|
||||
+ unsigned short no_alt_trk;
|
||||
+ unsigned short first_dia_trk;
|
||||
+ unsigned short no_dia_trk;
|
||||
+ unsigned short first_sup_trk;
|
||||
+ unsigned short no_sup_trk;
|
||||
+ unsigned char MDR_ID;
|
||||
+ unsigned char OBR_ID;
|
||||
+ unsigned char director;
|
||||
+ unsigned char rd_trk_set;
|
||||
+ unsigned short max_rec_zero;
|
||||
+ unsigned char reserved1;
|
||||
+ unsigned char RWANY_in_LR;
|
||||
+ unsigned char factor6;
|
||||
+ unsigned char factor7;
|
||||
+ unsigned char factor8;
|
||||
+ unsigned char reserved2[3];
|
||||
+ unsigned char reserved3[6];
|
||||
+ unsigned int long_no_cyl;
|
||||
+} __attribute__ ((packed));
|
||||
+
|
||||
/*
|
||||
* values to be used for dasd_information2_t.format
|
||||
* 0x00: NOT formatted
|
||||
diff --git a/fdasd/fdasd.c b/fdasd/fdasd.c
|
||||
index a526d7f..8f7f5aa 100644
|
||||
--- a/fdasd/fdasd.c
|
||||
+++ b/fdasd/fdasd.c
|
||||
@@ -2002,7 +2002,7 @@ fdasd_get_geometry (fdasd_anchor_t *anc)
|
||||
int fd, blksize = 0;
|
||||
dasd_information_t dasd_info;
|
||||
char err_str[ERROR_STRING_SIZE];
|
||||
- u_int64_t device_size;
|
||||
+ struct dasd_eckd_characteristics *characteristics;
|
||||
|
||||
if ((fd = open(options.device,O_RDONLY)) < 0) {
|
||||
snprintf(err_str, ERROR_STRING_SIZE,
|
||||
@@ -2023,14 +2023,6 @@ fdasd_get_geometry (fdasd_anchor_t *anc)
|
||||
"Could not retrieve blocksize information.");
|
||||
}
|
||||
|
||||
- if (ioctl(fd, BLKGETSIZE64, &device_size) != 0) {
|
||||
- close(fd);
|
||||
- fdasd_error(anc, unable_to_ioctl,
|
||||
- "Could not retrieve device size information.");
|
||||
- }
|
||||
-
|
||||
- anc->hw_cylinders = ((device_size / blksize) / geo.sectors) / geo.heads;
|
||||
-
|
||||
/* get disk type */
|
||||
if (ioctl(fd, BIODASDINFO, &dasd_info) != 0) {
|
||||
close(fd);
|
||||
@@ -2038,6 +2030,14 @@ fdasd_get_geometry (fdasd_anchor_t *anc)
|
||||
"Could not retrieve disk information.");
|
||||
}
|
||||
|
||||
+ characteristics =
|
||||
+ (struct dasd_eckd_characteristics *) &dasd_info.characteristics;
|
||||
+ if (characteristics->no_cyl == LV_COMPAT_CYL &&
|
||||
+ characteristics->long_no_cyl)
|
||||
+ anc->hw_cylinders = characteristics->long_no_cyl;
|
||||
+ else
|
||||
+ anc->hw_cylinders = characteristics->no_cyl;
|
||||
+
|
||||
close(fd);
|
||||
|
||||
if (strncmp(dasd_info.type, "ECKD", 4) != 0) {
|
||||
diff --git a/fdasd/fdasd.h b/fdasd/fdasd.h
|
||||
index 107e486..8a1bfd0 100644
|
||||
--- a/fdasd/fdasd.h
|
||||
+++ b/fdasd/fdasd.h
|
||||
@@ -43,6 +43,80 @@ typedef struct dasd_information_t {
|
||||
char configuration_data[256]; /* from read_configuration_data */
|
||||
} dasd_information_t;
|
||||
|
||||
+struct dasd_eckd_characteristics {
|
||||
+ unsigned short cu_type;
|
||||
+ struct {
|
||||
+ unsigned char support:2;
|
||||
+ unsigned char async:1;
|
||||
+ unsigned char reserved:1;
|
||||
+ unsigned char cache_info:1;
|
||||
+ unsigned char model:3;
|
||||
+ } __attribute__ ((packed)) cu_model;
|
||||
+ unsigned short dev_type;
|
||||
+ unsigned char dev_model;
|
||||
+ struct {
|
||||
+ unsigned char mult_burst:1;
|
||||
+ unsigned char RT_in_LR:1;
|
||||
+ unsigned char reserved1:1;
|
||||
+ unsigned char RD_IN_LR:1;
|
||||
+ unsigned char reserved2:4;
|
||||
+ unsigned char reserved3:8;
|
||||
+ unsigned char defect_wr:1;
|
||||
+ unsigned char XRC_supported:1;
|
||||
+ unsigned char reserved4:1;
|
||||
+ unsigned char striping:1;
|
||||
+ unsigned char reserved5:4;
|
||||
+ unsigned char cfw:1;
|
||||
+ unsigned char reserved6:2;
|
||||
+ unsigned char cache:1;
|
||||
+ unsigned char dual_copy:1;
|
||||
+ unsigned char dfw:1;
|
||||
+ unsigned char reset_alleg:1;
|
||||
+ unsigned char sense_down:1;
|
||||
+ } __attribute__ ((packed)) facilities;
|
||||
+ unsigned char dev_class;
|
||||
+ unsigned char unit_type;
|
||||
+ unsigned short no_cyl;
|
||||
+ unsigned short trk_per_cyl;
|
||||
+ unsigned char sec_per_trk;
|
||||
+ unsigned char byte_per_track[3];
|
||||
+ unsigned short home_bytes;
|
||||
+ unsigned char formula;
|
||||
+ union {
|
||||
+ struct {
|
||||
+ unsigned char f1;
|
||||
+ unsigned short f2;
|
||||
+ unsigned short f3;
|
||||
+ } __attribute__ ((packed)) f_0x01;
|
||||
+ struct {
|
||||
+ unsigned char f1;
|
||||
+ unsigned char f2;
|
||||
+ unsigned char f3;
|
||||
+ unsigned char f4;
|
||||
+ unsigned char f5;
|
||||
+ } __attribute__ ((packed)) f_0x02;
|
||||
+ } __attribute__ ((packed)) factors;
|
||||
+ unsigned short first_alt_trk;
|
||||
+ unsigned short no_alt_trk;
|
||||
+ unsigned short first_dia_trk;
|
||||
+ unsigned short no_dia_trk;
|
||||
+ unsigned short first_sup_trk;
|
||||
+ unsigned short no_sup_trk;
|
||||
+ unsigned char MDR_ID;
|
||||
+ unsigned char OBR_ID;
|
||||
+ unsigned char director;
|
||||
+ unsigned char rd_trk_set;
|
||||
+ unsigned short max_rec_zero;
|
||||
+ unsigned char reserved1;
|
||||
+ unsigned char RWANY_in_LR;
|
||||
+ unsigned char factor6;
|
||||
+ unsigned char factor7;
|
||||
+ unsigned char factor8;
|
||||
+ unsigned char reserved2[3];
|
||||
+ unsigned char reserved3[6];
|
||||
+ unsigned int long_no_cyl;
|
||||
+} __attribute__ ((packed));
|
||||
+
|
||||
/* Get information on a dasd device (enhanced) */
|
||||
#define BIODASDINFO _IOR(DASD_IOCTL_LETTER,1,dasd_information_t)
|
||||
|
||||
--
|
||||
1.6.3.3
|
||||
|
@ -8,7 +8,7 @@ Name: s390utils
|
||||
Summary: Utilities and daemons for IBM System/z
|
||||
Group: System Environment/Base
|
||||
Version: 1.8.2
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
Epoch: 2
|
||||
License: GPLv2 and GPLv2+ and CPL
|
||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
@ -43,6 +43,9 @@ Patch8: 0008-fix-string-overflow-in-vtoc_volume_label_init.patch
|
||||
Patch9: 0009-change-default-load-address-for-ramdisk.patch
|
||||
Patch10: 0010-improve-mon_statd-init-script.patch
|
||||
Patch11: 0011-update-readahead-value-for-better-performance.patch
|
||||
Patch12: 0012-fix-multipath-device-detection-in-ziomon.patch
|
||||
Patch13: 0013-zipl-handle-status-during-ipl.patch
|
||||
Patch14: 0014-dasdview-fdasd-fix-floating-point-error-for-unformat.patch
|
||||
|
||||
Patch100: cmsfs-1.1.8-warnings.patch
|
||||
Patch101: cmsfs-1.1.8-kernel26.patch
|
||||
@ -105,6 +108,15 @@ be used together with the zSeries (s390) Linux kernel and device drivers.
|
||||
# Update readahead value for better performance
|
||||
%patch11 -p1 -b .readahead
|
||||
|
||||
# Fix multipath device detection in ziomon (#533955)
|
||||
%patch12 -p1 -b .ziomon-multipath
|
||||
|
||||
# Handle status during ipl in zipl (#537142)
|
||||
%patch13 -p1 -b .zipl-status
|
||||
|
||||
# Fix floating point error for unformatted devices in fdasd and dasdview (#537144)
|
||||
%patch14 -p1 -b .dasd-zero-division
|
||||
|
||||
#
|
||||
# cmsfs
|
||||
#
|
||||
@ -786,6 +798,9 @@ User-space development files for the s390/s390x architecture.
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Nov 13 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-5
|
||||
- added multiple fixes from IBM (#533955, #537142, #537144)
|
||||
|
||||
* Thu Nov 12 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-4
|
||||
- added udev rules and script for dasd initialization (#536966)
|
||||
- added ghosted zfcp and dasd config files, fixes their ownership on the system
|
||||
|
Loading…
Reference in New Issue
Block a user