e4f609fba2
From-source-git-commit: a24e1272faba2875f9b78fcf42109028af0869bc * switch to dracut-ng upstream fork The original dracut repository is no longer maintained, new initiative was started: https://github.com/dracut-ng/dracut-ng/ * applied additional fixes 9df3cb58a19f38157a615c311356cfd6ae55d2d7 fix(rngd): install system service file 0b65ac224d831cc96da940cce510523c7276a5ec feat(hwdb): add hwdb module to install hwdb.bin on demand 10b86edba3ffe0ce13c5f43ff0193cdf04661358 fix(nvmf): move /etc/nvme/host{nqn,id} requirement to hostonly bad2bc80cdcfac8915374497cc47ce9d5670d015 fix(systemd): explicitly install some libs that will not be statically included 55a56c546bde71fb42c99aadd96e98fca2199823 fix(dracut): move hooks directory from /usr/lib to /var/lib 110fec3e41faf47277447f1c56635c5a876c1f96 feat(ifcfg): minimize s390-specific network configuration aspects b6913f66b6c9e9ea81fd0832405c170876bc993a refactor(ifcfg): delete code duplication using iface_get_subchannels() cbc5eece88b8f6d0e69fdfbb8f34eabb45425c86 fix(znet): append to udev rules so each rd.znet_ifname is effective 7ad6fef8fe110093939c422b5c3b381ebe47e4e9 feat(qeth_rules): remove qeth handling consolidated in 95znet addb383b375fd0db07eacf8a9f5d9b4e23343855 docs(dracut.cmdline): generalize description of rd.znet 86b6e2979999cf5ecce8c76c6230d1f085b3a333 feat(znet): use zdev for consolidated device configuration 1ff6be8aef787513b8143df444a1dd2d696b0944 feat(dasd): minimize dasd handling consolidated in s390-tools a82045ef34bc8c913502eba37b6b9c60709d6997 feat(dasd_mod): minimize dasd handling consolidated in s390-tools 7294e45b5204e47bb8ee2108e2c38c5843e64fac feat(dasd_rules): remove dasd handling consolidated in s390-tools 8d6098969aa9dc34edfd1bc96e6aa0384ae2fb99 feat(zfcp): minimize zfcp handling consolidated in s390-tools 71876ea8c73090741bdf26abb89c28fb260ed575 feat(zfcp_rules): remove zfcp handling consolidated in s390-tools a2c1fc530d8bcbdeaf1806f4a22019052715fc98 refactor(cms): remove now unnecessary inclusion of full s390utils-base cc14fe218861f2855ca88ad03220ecb78d4aa31a refactor(cms): use consolidated network config with zdev from s390-tools 74edb9758da26ef063e4686a595f1d34f07f86f7 refactor(cms): use consolidated dasd config with zdev from s390-tools 3a9b9a5cf507a868f8b3ec33cf686b3a552286c2 refactor(cms): use consolidated zfcp config with zdev from s390-tools 38412977daad049b12273966300d07211674834e refactor(cms): use zdev to simplify handling CMSDASD=... boot option (Possibly also resolves other open issues.) Resolves: RHEL-26887 RHEL-34954 RHEL-35521
199 lines
6.0 KiB
Diff
199 lines
6.0 KiB
Diff
From 38412977daad049b12273966300d07211674834e Mon Sep 17 00:00:00 2001
|
|
From: Steffen Maier <maier@linux.ibm.com>
|
|
Date: Wed, 24 May 2023 19:02:09 +0200
|
|
Subject: [PATCH 03/23] refactor(cms): use zdev to simplify handling
|
|
CMSDASD=... boot option
|
|
|
|
This is just internal to initrd, so we can already migrate the code to
|
|
consolidated dasd device configuration with zdev
|
|
https://github.com/ibm-s390-linux/s390-tools/tree/master/zdev/.
|
|
The code change is transparent to users after dracut switch root.
|
|
|
|
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
|
|
---
|
|
modules.d/80cms/cmssetup.sh | 108 ++++++--------------------------
|
|
modules.d/80cms/module-setup.sh | 3 +-
|
|
2 files changed, 21 insertions(+), 90 deletions(-)
|
|
|
|
diff --git a/modules.d/80cms/cmssetup.sh b/modules.d/80cms/cmssetup.sh
|
|
index 68e45632..23e81ca9 100755
|
|
--- a/modules.d/80cms/cmssetup.sh
|
|
+++ b/modules.d/80cms/cmssetup.sh
|
|
@@ -2,34 +2,16 @@
|
|
|
|
type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh
|
|
|
|
-function sysecho() {
|
|
- file="$1"
|
|
- shift
|
|
- local i=1
|
|
- while [ $i -le 10 ]; do
|
|
- if [ ! -f "$file" ]; then
|
|
- sleep 1
|
|
- i=$((i + 1))
|
|
- else
|
|
- break
|
|
- fi
|
|
- done
|
|
- local status
|
|
- read -r status < "$file"
|
|
- if [[ $status != "$*" ]]; then
|
|
- [ -f "$file" ] && echo "$*" > "$file"
|
|
- fi
|
|
-}
|
|
-
|
|
function dasd_settle() {
|
|
- local dasd_status=/sys/bus/ccw/devices/$1/status
|
|
+ local dasd_status
|
|
+ dasd_status=$(lszdev dasd "$1" --columns ATTRPATH:status --no-headings --active)
|
|
if [ ! -f "$dasd_status" ]; then
|
|
return 1
|
|
fi
|
|
local i=1
|
|
while [ $i -le 60 ]; do
|
|
local status
|
|
- read -r status < "$dasd_status"
|
|
+ status=$(lszdev dasd "$1" --columns ATTR:status --no-headings --active)
|
|
case $status in
|
|
online | unformatted)
|
|
return 0
|
|
@@ -43,77 +25,23 @@ function dasd_settle() {
|
|
return 1
|
|
}
|
|
|
|
-function dasd_settle_all() {
|
|
- for dasdccw in $(while read -r line || [ -n "$line" ]; do echo "${line%%(*}"; done < /proc/dasd/devices); do
|
|
- if ! dasd_settle "$dasdccw"; then
|
|
- echo $"Could not access DASD $dasdccw in time"
|
|
- return 1
|
|
- fi
|
|
- done
|
|
- return 0
|
|
-}
|
|
-
|
|
-# prints a canonocalized device bus ID for a given devno of any format
|
|
-function canonicalize_devno() {
|
|
- case ${#1} in
|
|
- 3) echo "0.0.0${1}" ;;
|
|
- 4) echo "0.0.${1}" ;;
|
|
- *) echo "${1}" ;;
|
|
- esac
|
|
- return 0
|
|
-}
|
|
-
|
|
# read file from CMS and write it to /tmp
|
|
function readcmsfile() { # $1=dasdport $2=filename
|
|
local dev
|
|
- local numcpus
|
|
local devname
|
|
local ret=0
|
|
if [ $# -ne 2 ]; then return; fi
|
|
- # precondition: udevd created dasda block device node
|
|
- if ! dasd_cio_free -d "$1"; then
|
|
- echo $"DASD $1 could not be cleared from device blacklist"
|
|
- return 1
|
|
- fi
|
|
-
|
|
- modprobe dasd_mod dasd="$CMSDASD"
|
|
- modprobe dasd_eckd_mod
|
|
- udevadm settle
|
|
-
|
|
- # precondition: dasd_eckd_mod driver incl. dependencies loaded,
|
|
- # dasd_mod must be loaded without setting any DASD online
|
|
- dev=$(canonicalize_devno "$1")
|
|
- numcpus=$(
|
|
- while read -r line || [ -n "$line" ]; do
|
|
- if strstr "$line" "# processors"; then
|
|
- echo "${line##*:}"
|
|
- break
|
|
- fi
|
|
- done < /proc/cpuinfo
|
|
- )
|
|
+ # precondition: udevd created block device node
|
|
|
|
- if [ "${numcpus}" -eq 1 ]; then
|
|
- echo 1 > /sys/bus/ccw/devices/"$dev"/online
|
|
- else
|
|
- if ! sysecho /sys/bus/ccw/devices/"$dev"/online 1; then
|
|
- echo $"DASD $dev could not be set online"
|
|
- return 1
|
|
- fi
|
|
- udevadm settle
|
|
- if ! dasd_settle "$dev"; then
|
|
- echo $"Could not access DASD $dev in time"
|
|
- return 1
|
|
- fi
|
|
+ dev="$1"
|
|
+ chzdev --enable --active --yes --quiet --no-root-update --force dasd "$dev" || return 1
|
|
+ if ! dasd_settle "$dev"; then
|
|
+ echo $"Could not access DASD $dev in time"
|
|
+ return 1
|
|
fi
|
|
|
|
- udevadm settle
|
|
-
|
|
- devname=$(
|
|
- cd /sys/bus/ccw/devices/"$dev"/block || exit
|
|
- set -- *
|
|
- [ -b /dev/"$1" ] && echo "$1"
|
|
- )
|
|
- devname=${devname:-dasda}
|
|
+ devname=$(lszdev dasd "$dev" --columns NAMES --no-headings --active)
|
|
+ [[ -n $devname ]] || return 1
|
|
|
|
[[ -d /mnt ]] || mkdir -p /mnt
|
|
if cmsfs-fuse --to=UTF-8 -a /dev/"$devname" /mnt; then
|
|
@@ -125,20 +53,22 @@ function readcmsfile() { # $1=dasdport $2=filename
|
|
ret=1
|
|
fi
|
|
|
|
- if ! sysecho /sys/bus/ccw/devices/"$dev"/online 0; then
|
|
- echo $"DASD $dev could not be set offline again"
|
|
- #return 1
|
|
- fi
|
|
- udevadm settle
|
|
+ chzdev --disable --active --yes --quiet --no-root-update --force dasd "$dev"
|
|
|
|
# unbind all dasds to unload the dasd modules for a clean start
|
|
(
|
|
cd /sys/bus/ccw/drivers/dasd-eckd || exit
|
|
- for i in *.*; do echo "$i" > unbind; done
|
|
+ for i in *.*; do echo "$i" > unbind 2> /dev/null; done
|
|
+ )
|
|
+ (
|
|
+ cd /sys/bus/ccw/drivers/dasd-fba || exit
|
|
+ for i in *.*; do echo "$i" > unbind 2> /dev/null; done
|
|
)
|
|
udevadm settle
|
|
modprobe -r dasd_eckd_mod
|
|
udevadm settle
|
|
+ modprobe -r dasd_fba_mod
|
|
+ udevadm settle
|
|
modprobe -r dasd_diag_mod
|
|
udevadm settle
|
|
modprobe -r dasd_mod
|
|
diff --git a/modules.d/80cms/module-setup.sh b/modules.d/80cms/module-setup.sh
|
|
index 2b280e0f..4872734b 100755
|
|
--- a/modules.d/80cms/module-setup.sh
|
|
+++ b/modules.d/80cms/module-setup.sh
|
|
@@ -4,6 +4,7 @@
|
|
check() {
|
|
arch=${DRACUT_ARCH:-$(uname -m)}
|
|
[ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
|
|
+ require_binaries chzdev lszdev || return 1
|
|
return 255
|
|
}
|
|
|
|
@@ -28,7 +29,7 @@ install() {
|
|
# shellcheck disable=SC2046
|
|
inst_multiple /etc/cmsfs-fuse/filetypes.conf /etc/udev/rules.d/99-fuse.rules /etc/fuse.conf \
|
|
cmsfs-fuse fusermount bash insmod rmmod cat normalize_dasd_arg sed \
|
|
- $(rpm -ql s390utils-base) awk getopt
|
|
+ $(rpm -ql s390utils-base) awk getopt chzdev lszdev
|
|
|
|
inst_libdir_file "gconv/*"
|
|
#inst /usr/lib/locale/locale-archive
|
|
--
|
|
2.42.0
|
|
|