|
|
|
@ -15,21 +15,21 @@ function sysecho() {
@@ -15,21 +15,21 @@ function sysecho() {
|
|
|
|
|
fi |
|
|
|
|
done |
|
|
|
|
local status |
|
|
|
|
read status < "$file" |
|
|
|
|
if [[ $status != $* ]]; then |
|
|
|
|
[ -f "$file" ] && echo $* > "$file" |
|
|
|
|
read -r status < "$file" |
|
|
|
|
if [[ $status != "$*" ]]; then |
|
|
|
|
[ -f "$file" ] && echo "$*" > "$file" |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function dasd_settle() { |
|
|
|
|
local dasd_status=/sys/bus/ccw/devices/$1/status |
|
|
|
|
if [ ! -f $dasd_status ]; then |
|
|
|
|
if [ ! -f "$dasd_status" ]; then |
|
|
|
|
return 1 |
|
|
|
|
fi |
|
|
|
|
local i=1 |
|
|
|
|
while [ $i -le 60 ]; do |
|
|
|
|
local status |
|
|
|
|
read status < $dasd_status |
|
|
|
|
read -r status < "$dasd_status" |
|
|
|
|
case $status in |
|
|
|
|
online | unformatted) |
|
|
|
|
return 0 |
|
|
|
@ -44,8 +44,8 @@ function dasd_settle() {
@@ -44,8 +44,8 @@ function dasd_settle() {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function dasd_settle_all() { |
|
|
|
|
for dasdccw in $(while read line || [ -n "$line" ]; do echo "${line%%(*}"; done < /proc/dasd/devices); do |
|
|
|
|
if ! dasd_settle $dasdccw; then |
|
|
|
|
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 |
|
|
|
@ -71,36 +71,36 @@ function readcmsfile() { # $1=dasdport $2=filename
@@ -71,36 +71,36 @@ function readcmsfile() { # $1=dasdport $2=filename
|
|
|
|
|
local ret=0 |
|
|
|
|
if [ $# -ne 2 ]; then return; fi |
|
|
|
|
# precondition: udevd created dasda block device node |
|
|
|
|
if ! dasd_cio_free -d $1; then |
|
|
|
|
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_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) |
|
|
|
|
dev=$(canonicalize_devno "$1") |
|
|
|
|
numcpus=$( |
|
|
|
|
while read line || [ -n "$line" ]; do |
|
|
|
|
while read -r line || [ -n "$line" ]; do |
|
|
|
|
if strstr "$line" "# processors"; then |
|
|
|
|
echo ${line##*:} |
|
|
|
|
echo "${line##*:}" |
|
|
|
|
break |
|
|
|
|
fi |
|
|
|
|
done < /proc/cpuinfo |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
if [ ${numcpus} -eq 1 ]; then |
|
|
|
|
echo 1 > /sys/bus/ccw/devices/$dev/online |
|
|
|
|
if [ "${numcpus}" -eq 1 ]; then |
|
|
|
|
echo 1 > /sys/bus/ccw/devices/"$dev"/online |
|
|
|
|
else |
|
|
|
|
if ! sysecho /sys/bus/ccw/devices/$dev/online 1; then |
|
|
|
|
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 |
|
|
|
|
if ! dasd_settle "$dev"; then |
|
|
|
|
echo $"Could not access DASD $dev in time" |
|
|
|
|
return 1 |
|
|
|
|
fi |
|
|
|
@ -109,15 +109,15 @@ function readcmsfile() { # $1=dasdport $2=filename
@@ -109,15 +109,15 @@ function readcmsfile() { # $1=dasdport $2=filename
|
|
|
|
|
udevadm settle |
|
|
|
|
|
|
|
|
|
devname=$( |
|
|
|
|
cd /sys/bus/ccw/devices/$dev/block |
|
|
|
|
cd /sys/bus/ccw/devices/"$dev"/block || exit |
|
|
|
|
set -- * |
|
|
|
|
[ -b /dev/$1 ] && echo $1 |
|
|
|
|
[ -b /dev/"$1" ] && echo "$1" |
|
|
|
|
) |
|
|
|
|
devname=${devname:-dasda} |
|
|
|
|
|
|
|
|
|
[[ -d /mnt ]] || mkdir -p /mnt |
|
|
|
|
if cmsfs-fuse --to=UTF-8 -a /dev/$devname /mnt; then |
|
|
|
|
cat /mnt/$2 > /run/initramfs/$2 |
|
|
|
|
if cmsfs-fuse --to=UTF-8 -a /dev/"$devname" /mnt; then |
|
|
|
|
cat /mnt/"$2" > /run/initramfs/"$2" |
|
|
|
|
umount /mnt || umount -l /mnt |
|
|
|
|
udevadm settle |
|
|
|
|
else |
|
|
|
@ -125,7 +125,7 @@ function readcmsfile() { # $1=dasdport $2=filename
@@ -125,7 +125,7 @@ function readcmsfile() { # $1=dasdport $2=filename
|
|
|
|
|
ret=1 |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
if ! sysecho /sys/bus/ccw/devices/$dev/online 0; then |
|
|
|
|
if ! sysecho /sys/bus/ccw/devices/"$dev"/online 0; then |
|
|
|
|
echo $"DASD $dev could not be set offline again" |
|
|
|
|
#return 1 |
|
|
|
|
fi |
|
|
|
@ -133,8 +133,8 @@ function readcmsfile() { # $1=dasdport $2=filename
@@ -133,8 +133,8 @@ function readcmsfile() { # $1=dasdport $2=filename
|
|
|
|
|
|
|
|
|
|
# unbind all dasds to unload the dasd modules for a clean start |
|
|
|
|
( |
|
|
|
|
cd /sys/bus/ccw/drivers/dasd-eckd |
|
|
|
|
for i in *.*; do echo $i > unbind; done |
|
|
|
|
cd /sys/bus/ccw/drivers/dasd-eckd || exit |
|
|
|
|
for i in *.*; do echo "$i" > unbind; done |
|
|
|
|
) |
|
|
|
|
udevadm settle |
|
|
|
|
modprobe -r dasd_eckd_mod |
|
|
|
@ -148,11 +148,11 @@ function readcmsfile() { # $1=dasdport $2=filename
@@ -148,11 +148,11 @@ function readcmsfile() { # $1=dasdport $2=filename
|
|
|
|
|
|
|
|
|
|
processcmsfile() { |
|
|
|
|
source /tmp/cms.conf |
|
|
|
|
SUBCHANNELS="$(echo $SUBCHANNELS | sed 'y/ABCDEF/abcdef/')" |
|
|
|
|
SUBCHANNELS="$(echo "$SUBCHANNELS" | sed 'y/ABCDEF/abcdef/')" |
|
|
|
|
|
|
|
|
|
if [[ $NETTYPE ]]; then |
|
|
|
|
( |
|
|
|
|
echo -n $NETTYPE,$SUBCHANNELS |
|
|
|
|
echo -n "$NETTYPE","$SUBCHANNELS" |
|
|
|
|
[[ $PORTNAME ]] && echo -n ",portname=$PORTNAME" |
|
|
|
|
[[ $LAYER2 ]] && echo -n ",layer2=$LAYER2" |
|
|
|
|
[[ $NETTYPE == "ctc" ]] && [[ $CTCPROT ]] && echo -n ",protocol=$CTCPROT" |
|
|
|
@ -161,7 +161,7 @@ processcmsfile() {
@@ -161,7 +161,7 @@ processcmsfile() {
|
|
|
|
|
|
|
|
|
|
OLDIFS=$IFS |
|
|
|
|
IFS=, |
|
|
|
|
read -a subch_array <<< "indexzero,$SUBCHANNELS" |
|
|
|
|
read -r -a subch_array <<< "indexzero,$SUBCHANNELS" |
|
|
|
|
IFS=$OLDIFS |
|
|
|
|
devbusid=${subch_array[1]} |
|
|
|
|
if [ "$NETTYPE" = "ctc" ]; then |
|
|
|
@ -170,9 +170,11 @@ processcmsfile() {
@@ -170,9 +170,11 @@ processcmsfile() {
|
|
|
|
|
driver=$NETTYPE |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
# shellcheck disable=SC2016 |
|
|
|
|
printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="%s", KERNELS=="%s", ENV{INTERFACE}=="?*", RUN+="/sbin/initqueue --onetime --unique --name cmsifup-$name /sbin/cmsifup $name"\n' "$driver" "$devbusid" > /etc/udev/rules.d/99-cms.rules |
|
|
|
|
# remove the default net rules |
|
|
|
|
rm -f -- /etc/udev/rules.d/91-default-net.rules |
|
|
|
|
# shellcheck disable=SC2016 |
|
|
|
|
[[ -f /etc/udev/rules.d/90-net.rules ]] \ |
|
|
|
|
|| printf 'SUBSYSTEM=="net", ACTION=="online", RUN+="/sbin/initqueue --onetime --env netif=$name source_hook initqueue/online"\n' >> /etc/udev/rules.d/99-cms.rules |
|
|
|
|
udevadm control --reload |
|
|
|
@ -180,14 +182,14 @@ processcmsfile() {
@@ -180,14 +182,14 @@ processcmsfile() {
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
if [[ $DASD ]] && [[ $DASD != "none" ]]; then |
|
|
|
|
echo $DASD | normalize_dasd_arg > /etc/dasd.conf |
|
|
|
|
echo "$DASD" | normalize_dasd_arg > /etc/dasd.conf |
|
|
|
|
echo "options dasd_mod dasd=$DASD" > /etc/modprobe.d/dasd_mod.conf |
|
|
|
|
dasd_cio_free |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
unset _do_zfcp |
|
|
|
|
for i in ${!FCP_*}; do |
|
|
|
|
echo "${!i}" | while read port rest || [ -n "$port" ]; do |
|
|
|
|
echo "${!i}" | while read -r port rest || [ -n "$port" ]; do |
|
|
|
|
case $port in |
|
|
|
|
*.*.*) ;; |
|
|
|
|
|
|
|
|
@ -198,7 +200,7 @@ processcmsfile() {
@@ -198,7 +200,7 @@ processcmsfile() {
|
|
|
|
|
port="0.0.$port" |
|
|
|
|
;; |
|
|
|
|
esac |
|
|
|
|
echo $port $rest >> /etc/zfcp.conf |
|
|
|
|
echo "$port" "$rest" >> /etc/zfcp.conf |
|
|
|
|
done |
|
|
|
|
_do_zfcp=1 |
|
|
|
|
done |
|
|
|
@ -211,9 +213,9 @@ processcmsfile() {
@@ -211,9 +213,9 @@ processcmsfile() {
|
|
|
|
|
|
|
|
|
|
# Parse configuration |
|
|
|
|
if [ -n "$CMSDASD" -a -n "$CMSCONFFILE" ]; then |
|
|
|
|
if readcmsfile $CMSDASD $CMSCONFFILE; then |
|
|
|
|
ln -s /run/initramfs/$CMSCONFFILE /tmp/$CMSCONFFILE |
|
|
|
|
ln -s /run/initramfs/$CMSCONFFILE /tmp/cms.conf |
|
|
|
|
if readcmsfile "$CMSDASD" "$CMSCONFFILE"; then |
|
|
|
|
ln -s /run/initramfs/"$CMSCONFFILE" /tmp/"$CMSCONFFILE" |
|
|
|
|
ln -s /run/initramfs/"$CMSCONFFILE" /tmp/cms.conf |
|
|
|
|
processcmsfile |
|
|
|
|
fi |
|
|
|
|
fi |
|
|
|
|