#!/bin/sh # # dasd_reload # $Id: dasd_reload,v 1.2 2004/05/26 15:17:09 hare Exp $ # # Deconfigures all active DASDs, unloads the modules # and activates the configured DASDs again. # Needed to establish an identical device mapping # in the installation system and in the running system. # All DASD access need to be cancelled prior to running # this script. # # Usage: # dasd_reload # # Return values: # 1 Cannot read /proc/modules # 2 Missing module programs # 3 /sys not mounted # 4 Failure on deactivate DASDs # if [ ! -r /proc/modules ]; then echo "Cannot read /proc/modules" exit 1 fi if [ ! -x /sbin/rmmod -o ! -x /sbin/modprobe ]; then echo "Missing module programs" exit 2 fi if [ ! -d /sys/bus ]; then echo "sysfs not mounted" exit 3 fi let anymd=0 if [ -f /proc/mdstat ]; then for mddevice in $(grep active /proc/mdstat | cut -f1 -d:); do mdadm -S /dev/${mddevice} let anymd=1 done udevadm settle fi # # Setting HyperPAV alias devices offline # dasd_alias= let EXITRC=0 for dev in /sys/bus/ccw/devices/*; do if [ -f $dev/use_diag ]; then read _online < $dev/online read _alias < $dev/alias if [ "$_online" -eq 1 -a "$_alias" -eq 1 ]; then echo "setting DASD HyperPAV alias $(basename $dev) offline" echo "0" > $dev/online read _online < $dev/online dasd_alias="$dasd_alias $(basename $dev)" if [ "$_online" -eq 1 ]; then echo "failure on setting DASD HyperPAV alias $(basename $dev) offline !" let EXITRC=4 fi fi fi done # # Setting "normal" DASD and HyperPAV base devices offline # dasd_base= for dev in /sys/bus/ccw/devices/*; do if [ -f $dev/use_diag ]; then read _online < $dev/online read _alias < $dev/alias if [ "$_online" -eq 1 -a "$_alias" -eq 0 ]; then echo "setting DASD $(basename $dev) offline" echo "0" > $dev/online read _online < $dev/online dasd_base="$dasd_base $(basename $dev)" if [ "$_online" -eq 1 ]; then echo "failure on setting DASD $(basename $dev) offline !" let EXITRC=4 fi fi fi done udevadm settle module_list= module_test_list="dasd_diag_mod dasd_eckd_mod dasd_fba_mod dasd_mod" for module in $module_test_list; do if grep -q "$module" /proc/modules; then module_list="$module $module_list" : Unloading $module /sbin/rmmod $module fi done if [ -d /etc/udev/rules.d ]; then cd /etc/udev/rules.d # # Re-activating "normal" DASD and HyperPAV base devices # for dasd in $dasd_base; do file="51-dasd-${dasd}.rules" if [ -f "$file" ] ; then echo Activating $dasd if grep -q use_diag $file ; then DASD_USE_DIAG=1 else DASD_USE_DIAG=0 fi /sbin/dasd_configure $dasd 1 $DASD_USE_DIAG fi done # # Re-activating HyperPAV alias devices # for dasd in $dasd_alias; do file="51-dasd-${dasd}.rules" if [ -f "$file" ] ; then echo Activating $dasd if grep -q use_diag $file ; then DASD_USE_DIAG=1 else DASD_USE_DIAG=0 fi /sbin/dasd_configure $dasd 1 $DASD_USE_DIAG fi done fi exit ${EXITRC}