rpms/s390utils/F-12 0017-qualified-return-codes-and-further-error-handling-in.patch, NONE, 1.1 device_cio_free, NONE, 1.1 cpi.initd, 1.2, 1.3 s390utils.spec, 1.16, 1.17

Dan Horák sharkcz at fedoraproject.org
Tue Dec 22 10:56:33 UTC 2009


Author: sharkcz

Update of /cvs/pkgs/rpms/s390utils/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv14823

Modified Files:
	cpi.initd s390utils.spec 
Added Files:
	0017-qualified-return-codes-and-further-error-handling-in.patch 
	device_cio_free 
Log Message:
* Tue Dec 22 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-6
- fixed return value in cpi initscript (#541389)
- updated zfcpconf.sh script from dracut
- added device-mapper support into zipl (#546280)
- added missing check and print NSS name in case an NSS has been IPLed (#546297)
- added device_cio_free script and its symlinks
- added qualified return codes and further error handling in znetconf (#548487)


0017-qualified-return-codes-and-further-error-handling-in.patch:
 znetconf   |  324 +++++++++++++++++++++++++++++++++++--------------------------
 znetconf.8 |  220 ++++++++++++++++++++++++++++++++++-------
 2 files changed, 375 insertions(+), 169 deletions(-)

--- NEW FILE 0017-qualified-return-codes-and-further-error-handling-in.patch ---
>From 4725dd1a67185ab4296674fcd3b2cf17f2b1cf21 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Thu, 17 Dec 2009 17:08:22 +0100
Subject: [PATCH] qualified return codes and further error handling in znetconf

Description: znetconf: qualified return codes and further error handling
Symptom:     always returned 1 in case errors
Problem:     wrapper tools not able to generate qualified error msgs
Solution:    return codes
---
 zconf/znetconf   |  324 ++++++++++++++++++++++++++++++++----------------------
 zconf/znetconf.8 |  219 +++++++++++++++++++++++++++++++------
 2 files changed, 375 insertions(+), 168 deletions(-)

diff --git a/zconf/znetconf b/zconf/znetconf
index 4edf6fb..873124a 100755
--- a/zconf/znetconf
+++ b/zconf/znetconf
@@ -2,14 +2,58 @@
 #
 # znetconf - list and configure network devices
 #
-# Tool for the automatic and semi-automatic configuration of network devices 
+# Tool for the automatic and semi-automatic configuration of network devices
 # from ccw devices, including network device option handling and network
 # device removal.
 #
-# Copyright IBM Corp. 2009 
+# Copyright IBM Corp. 2009
 # Author(s): Einar Lueck <elelueck at de.ibm.com>
 #            Steffen Maier <maier at de.ibm.com>
 #
+# 9 Could not group devices
+readonly RC_COULD_NOT_GROUP_DEVICES=9
+# 10 Could not set device online
+readonly RC_COULD_NOT_SET_DEV_ONLINE=10
+# 11 Could not set device offline
+readonly RC_COULD_NOT_SET_DEV_OFFLINE=11
+# 12 Invalid attribute value pair
+readonly RC_INVALID_ATTRIBUTE_VALUE_PAIR=12
+# 13 Missing component (broken installation)
+readonly RC_BROKEN_INSTALLATION=13
+# 14 Missing device ID
+readonly RC_MISSING_DEVICE_ID=14
+# 15 Invalid device ID format
+readonly RC_INVALID_DEVICE_ID_FORMAT=15
+# 16 Driver name expected
+readonly RC_DRIVER_NAME_EXPECTED=16
+# 17 Unknown driver
+readonly RC_UNKNOWN_DRIVER=17
+# 18 Missing attribute value pair for -o|--option
+readonly RC_MISSING_ATTRIBUTE_VALUE_PAIR=18
+# 19 Invalid argument
+readonly RC_INVALID_ARGUMENT=19
+# 20 Too much arguments
+readonly RC_TOO_MUCH_ARGUMENTS=20
+# 21 No configuration found for device ID
+readonly RC_NO_CONFIG_FOUND_FOR_DEV=21
+# 22 Device is not configured
+readonly RC_DEVICE_NOT_CONFIGURED=22
+# 23 Could not ungroup device
+readonly RC_COULD_NOT_UNGROUP_DEVICE=23
+# 24 At least one option could not be configured
+readonly RC_OPTION_NOT_CONFIGURED=24
+# 25 Missing value for attribute
+readonly RC_MISSING_VALUE=25
+# 26 Device does not exist
+readonly RC_DEVICE_DOES_NOT_EXIST=26
+# 27 Device already in use
+readonly RC_DEVICE_ALREADY_IN_USE=27
+# 28 Net device did not come online
+readonly RC_NET_DEVICE_NOT_ONLINE=28
+# 29 Some devices could not be added or failed
+readonly RC_SOME_DEVICES_FAILED=29
+# 99 internal error, this should never happen
+readonly RC_INTERNAL_ERROR=99
 
 #==============================================================================
 # constants
@@ -29,6 +73,7 @@ else
 fi
 SYSFSDIR=$(cat /proc/mounts|awk '$3=="sysfs"{print $2; exit}')
 CCWGROUPBUS_DIR=$SYSFSDIR/bus/ccwgroup
+CCWDEV_DIR=$SYSFSDIR/bus/ccw/devices
 CCWGROUPBUS_DEVICEDIR=$CCWGROUPBUS_DIR/devices
 CCWGROUPBUS_DRIVERDIR=$CCWGROUPBUS_DIR/drivers
 DEVNOSEP=","
@@ -290,15 +335,14 @@ function lookup_layer()
 #==============================================================================
 
 #
-# group_device 
+# group_device
 # 	$1: ccwdevid[;ccwdevid][;ccwdevid]
 #	$2: ccwgroupdevid
 #	$3: driver
-# returns 
+# returns
 #	0 success
-#	1 group file not found
-#	2 grouping failed
-# 
+#	RC_COULD_NOT_GROUP_DEVICES
+#
 function group_device()
 {
 	local DEVICES=$1
@@ -307,13 +351,13 @@ function group_device()
 	local GROUPFILE=$CCWGROUPBUS_DRIVERDIR/$DRIVER/group
 	local CTCMGROUPFILE=$CCWGROUPBUS_DRIVERDIR/ctcm/group
 	local CTCGROUPFILE=$CCWGROUPBUS_DRIVERDIR/ctc/group
-	
+
 	# check if group file exists
-	if [ ! -e $GROUPFILE ] 
+	if [ ! -e $GROUPFILE ]
 	then
 		# try to load driver
 		if ! modprobe $DRIVER &> /dev/null
-		then 
+		then
 			if [ $DRIVER = "ctc" ]
 			then
 				# check if ctcm driver exists
@@ -329,7 +373,7 @@ function group_device()
 					GROUPFILE=$CTCGROUPFILE
 				fi
 			fi
-		fi 
+		fi
 	fi
 	if [ -e $GROUPFILE ]
 	then
@@ -340,13 +384,13 @@ function group_device()
 			*)
 				print_error "Could not group devices" \
 					"$DEVICES"
-				return 2
+				return $RC_COULD_NOT_GROUP_DEVICES
 				;;
 		esac
 	else
 		print_error "$GROUPFILE does not exist"
-			
-		return 1
+
+		return $RC_COULD_NOT_GROUP_DEVICES
 	fi
 	return 0
 }
@@ -354,14 +398,13 @@ function group_device()
 #==============================================================================
 
 #
-# ungroup_device 
+# ungroup_device
 #	$1: ccwgroupdevid
 #	$2: network device name (just for display purposes)
-# returns 
+# returns
 #	0 success
-#	1 group file not found
-#	2 ungrouping failed
-# 
+#	RC_COULD_NOT_UNGROUP_DEVICE
+#
 function ungroup_device()
 {
 	local TARGET_DEVID="$1"
@@ -378,12 +421,12 @@ function ungroup_device()
 				;;
 			*)
 				print_error "Failed to ungroup $TARGET_DEVID"
-				return 2
+				return $RC_COULD_NOT_UNGROUP_DEVICE
 				;;
 		esac
 	else
 		print_error "$DEVICE_UNGROUPFILE does not exist."
-		return 1
+		return $RC_COULD_NOT_UNGROUP_DEVICE
 	fi
 	return 0
 }
@@ -393,12 +436,12 @@ function ungroup_device()
 #
 # try_read_netdevname
 # 	$1: ccwgroupdevno
-# returns 
+# returns
 #	0 success
 #	1 failed. giving up after retries
 # stdout
 #	in case of success: device name
-# 
+#
 function try_read_netdevname()
 {
 	local CCWGROUPDEVNO="$1"
@@ -406,7 +449,7 @@ function try_read_netdevname()
 	local NET_SUBDIR="$CCWGROUPBUS_DEVICEDIR/$CCWGROUPDEVNO/net/"
 	local IF_NAME=""
 	local rc=1
-		
+
 	# check if interface file containing the name exists
 	if [ -e "$IF_NAME_FILE" ]
 	then
@@ -417,7 +460,7 @@ function try_read_netdevname()
 		IF_NAME=$(ls $NET_SUBDIR)
 	else
 		# if the file does not exist
-		local LINKNAME=$(find $CCWGROUPBUS_DEVICEDIR/$CCWGROUPDEVNO/ -type l -name net*) 
+		local LINKNAME=$(find $CCWGROUPBUS_DEVICEDIR/$CCWGROUPDEVNO/ -type l -name net*)
 		if [[ ! -z $LINKNAME ]]
 		then
 			IF_NAME=$(readlink $LINKNAME)
@@ -434,10 +477,10 @@ function try_read_netdevname()
 #
 # wait_for_net_device
 # 	$1: ccwgroupdevno
-# returns 
+# returns
 #	0 success
 #	1 failed. giving up after retries
-# 
+#
 function wait_for_net_device()
 {
 	local CCWGROUPDEVNO="$1"
@@ -447,7 +490,7 @@ function wait_for_net_device()
 	local IF_NAME=""
 	local CMD_FINDNETLINK="find $CCWGROUPBUS_DEVICEDIR/$CCWGROUPDEVNO/ -type l -name net*"
 	local LINKNAME=""
-		
+
 	# polling loop to wait for net device to become available
 	if [ -e $UDEVSETTLE ]
 	then
@@ -460,7 +503,7 @@ function wait_for_net_device()
 	fi
 	while [[ -z "$IF_NAME" ]] && [[ retries -lt MAX_RETRIES ]]
 	do
-		sleep 1 
+		sleep 1
 		retries=$retries+1
 		IF_NAME=$(try_read_netdevname $CCWGROUPDEVNO)
 	done
@@ -468,8 +511,8 @@ function wait_for_net_device()
 	then
 		echo "Successfully configured device $CCWGROUPDEVNO ($IF_NAME)"
 	else
-		print_error "Failed to make $CCWGROUPDEVNO online." 
-		return 1	
+		print_error "Failed to make $CCWGROUPDEVNO online."
+		return 1
 	fi
 }
 
@@ -479,11 +522,11 @@ function wait_for_net_device()
 # switch_device
 # 	$1: ccwgroupdevno
 #	$2: 1|0 (online|offline)
-# returns 
+# returns
 #	0 success
 #	1 command to make device online/offline returned error
 #	2 online file does not exist
-# 
+#
 function switch_device()
 {
 	local CCWGROUPDEVNO="$1"
@@ -491,7 +534,7 @@ function switch_device()
 	local DEVICE_DIRECTORY="$CCWGROUPBUS_DEVICEDIR/$CCWGROUPDEVNO"
 	local ONLINE_FILE="$DEVICE_DIRECTORY/online"
 	local STATESTR="online"
-	
+
 	if [ $SWITCHVALUE -eq 0 ]
 	then
 		STATESTR="offline"
@@ -513,7 +556,7 @@ function switch_device()
 		print_error "$ONLINE_FILE does not exist."
 		return 2
 	fi
-	
+
 	return 0
 }
 
@@ -524,12 +567,12 @@ function switch_device()
 #	$1: ccwgroupdevid
 #	$2: option_name
 #	$3: option_value
-# returns 
+# returns
 #	0 success
 # 	1 option not allowed to be set (e.g. online)
 #	2 unknown option
 #	3 configuration failed
-# 
+#
 function configure_ccwgroupdev_option()
 {
 	local CCWGROUPDEVID="$1"
@@ -539,10 +582,10 @@ function configure_ccwgroupdev_option()
 	# filter some attributes away
 	if [ "$OPTION_NAME" == "online" ]
 	then
-		print_error "Ignoring option $OPTION_NAME=$OPTION_VALUE" 
+		print_error "Ignoring option $OPTION_NAME=$OPTION_VALUE"
 		return 1
 	fi
-	
+
 	# check if attribute exists
 	local ATTRFILE="$CCWGROUPBUS_DEVICEDIR/$CCWGROUPDEVID/$OPTION_NAME"
 	if [ -f $ATTRFILE ]
@@ -574,13 +617,13 @@ function configure_ccwgroupdev_option()
 #	$4: opt_count
 #	$5..$(5+opt_count): opt_name_array
 #	$5+opt_count..5+2*opt_count: opt_value_array
-# returns 
+# returns
 #	0 success
-#	1 grouping failed
-#	2 failed to make device online 
-#	3 net device did not become available
-#	4 device online but some option could not be set
-# 
+#	RC_COULD_NOT_GROUP_DEVICES
+#	RC_COULD_NOT_SET_DEV_ONLINE
+#	RC_NET_DEVICE_NOT_ONLINE
+#	RC_OPTION_NOT_CONFIGURED
+#
 function add_net_device()
 {
 	local DEVICES="$1"
@@ -591,10 +634,9 @@ function add_net_device()
 	local OPT_NAME_ARRAY=("${RAW[@]:4:$OPT_COUNT}")
 	local OPT_VALUE_ARRAY=("${RAW[@]:$[4 + $OPT_COUNT]:$OPT_COUNT}")
 
-	group_device $DEVICES $CCWGROUPDEVID $DRIVER
-	if [ $? -ne 0 ]
+	if ! group_device $DEVICES $CCWGROUPDEVID $DRIVER
 	then
-		return 1
+		return $?
 	fi
 
 	local i=0
@@ -602,9 +644,8 @@ function add_net_device()
 	local HAS_LAYER2_OPTION=0
 	while [ $i -lt $OPT_COUNT ]
 	do
-		configure_ccwgroupdev_option $CCWGROUPDEVID \
+		if ! configure_ccwgroupdev_option $CCWGROUPDEVID \
 			 ${OPT_NAME_ARRAY[$i]} ${OPT_VALUE_ARRAY[$i]}
-		if [ $? -ne 0 ]
 		then
 			SOMEOPTION_FAILED=1
 		fi
@@ -628,22 +669,20 @@ function add_net_device()
 				"layer2" "$LAYER2"
 		fi
 	fi
- 
-	switch_device $CCWGROUPDEVNO 1
-	if [ $? -ne 0 ]
+
+	if ! switch_device $CCWGROUPDEVNO 1
 	then
-		return 2
+		return $RC_COULD_NOT_SET_DEV_ONLINE
 	fi
 
-	wait_for_net_device $CCWGROUPDEVNO
-	if [ $? -ne 0 ]
+	if ! wait_for_net_device $CCWGROUPDEVNO
 	then
-		return 3
+		return $RC_NET_DEVICE_NOT_ONLINE
 	fi
 
 	if [ $SOMEOPTION_FAILED -ne 0 ]
 	then
-		return 4
+		return $RC_OPTION_NOT_CONFIGURED
 	fi
 
 	return 0
@@ -655,26 +694,24 @@ function add_net_device()
 # remove_net_device
 #	$1: ccwgroupdevid
 #	$2: network interface name (just for display purposes)
-# returns 
+# returns
 #	0 success
-#	1 making device offline failed
-#	2 ungrouping device failed
-# 
+#	RC_COULD_NOT_SET_DEV_OFFLINE
+#	RC_COULD_NOT_UNGROUP_DEVICE
+#
 function remove_net_device()
 {
 	local DEVICE_TO_REMOVE="$1"
 	local DEVNAME="$2"
 
-	switch_device $DEVICE_TO_REMOVE 0
-	if [ $? -ne 0 ]
+	if ! switch_device $DEVICE_TO_REMOVE 0
 	then
-		return 1
+		return $RC_COULD_NOT_SET_DEV_OFFLINE
 	fi
 
-	ungroup_device $DEVICE_TO_REMOVE $DEVNAME
-	if [ $? -ne 0 ]
+	if ! ungroup_device $DEVICE_TO_REMOVE $DEVNAME
 	then
-		return 2
+		return $RC_COULD_NOT_UNGROUP_DEVICE
 	fi
 	return 0
 }
@@ -684,9 +721,9 @@ function remove_net_device()
 #
 # list_configured
 #	$1 supress_header
-# returns 
+# returns
 #	0 success
-# 
+#
 function list_configured()
 {
 	supress_header=0
@@ -723,11 +760,11 @@ function list_configured()
 
 		# read all links and parse driver, device name and ccw device
 		# bus-ids
-		ls -l $d/ | grep '^l' | 
-		{ 
+		ls -l $d/ | grep '^l' |
+		{
 
-			while read line 
-			do	
+			while read line
+			do
 				local LINKNAME=${line// ->*/""}
 				LINKNAME=${LINKNAME##* }
 				if [ "$LINKNAME" = "driver" ]
@@ -742,14 +779,14 @@ function list_configured()
 				then
 					DEVNAME=${line##* -> */}
 				fi
-			done 
+			done
 
 			local CUTYPE=""
 			if [ -e $d/cdev0/cutype ]
 			then
 				read CUTYPE < $d/cdev0/cutype
 			fi
-			
+
 			read ONLINE < $d/online
 			if [ $ONLINE -eq 1 ]
 			then
@@ -795,15 +832,15 @@ function print_list_unconf_header()
 
 #
 # list_unconfigured
-# returns 
+# returns
 #	0 success
-# 
+#
 function list_unconfigured()
 {
 	local PRINTED_HEADLINES=0
 	local LIST_FORMATSTR="%-26.26s %-7.7s %-14.14s %5.5s %-4.4s \n"
 	print_scanning_4_nwdevices
-	
+
 	$LSZNET_CALL |
 	{
 		while read no cutype chp devtype devdrv devname chlist cardtype
@@ -824,29 +861,29 @@ function list_unconfigured()
 #
 # store_option
 #	$1: attribute=value
-# returns 
+# returns
 #	0 success
 #	1 attribute starts with a - / or is invalid
 #	2 missing value
-# 
+#
 function store_option()
 {
 	local OPTIONSTRING="$1"
 
 	# ensure that there is no option intepreted as an
-	# attribute value pair 
+	# attribute value pair
 	[[ "$OPTIONSTRING" =~ ^- ]]
 	case $? in
 		0)
 			print_error "$OPTIONSTRING is not a valid attribute" \
-				"value pair" 
+				"value pair"
 			exit 1
 			;;
 		1)
 			# option considered ok
 			;;
 		2)
-			print_error "Internal error" 
+			print_error "Internal error"
 			exit 1
 	esac
 
@@ -874,17 +911,17 @@ function store_option()
 #
 # is_complete_ccwdevbusid
 #	$1: possibly correct ccw device bus id
-# returns 
+# returns
 #	0 if the given string is a correctly formatted ccw device bus id
 #	1 else
-# 
+#
 function is_complete_ccwdevbusid()
 {
 	local DEV="$1"
 	[[ "$DEV" =~ $FORMAT_FULLDEVNO ]]
-	case $? in 
+	case $? in
 		0)
-			return 0 
+			return 0
 			;;
 		1)
 			return 1
@@ -902,41 +939,41 @@ function is_complete_ccwdevbusid()
 #
 # is_partial_ccwdevbusid
 #	$1: possibly correct partial ccw device bus id
-# returns 
+# returns
 #	0 if the given string is a correctly formatted partial ccw device
 #	  bus id
 #	1 else
-# 
+#
 function is_partial_ccwdevbusid()
 {
 	local DEV="$1"
 	[[ "$DEV" =~ $FORMAT_PARTDEVNO ]]
 	case $? in
 		0)
-			return 0	
+			return 0
 			;;
 		1)
-			return 1 
+			return 1
 			;;
 		2)
 			print_error "Internal error"
 			exit 1
 			;;
 	esac
-}	
+}
 
 #==============================================================================
 
 #
 # is_ccwdevbusid_list
 #	$1: possibly correct list of ccw device bus ids
-# returns 
+# returns
 #	0 if the given string is a correctly formatted list of ccw device
 # 	  bus ids
 #	1 else
-# 
+#
 function is_ccwdevbusid_list()
-{ 
+{
 	local DEVLIST="$1"
 	[[ "$DEVLIST" =~ $FORMAT_DEVLIST ]]
 	case $? in
@@ -959,13 +996,13 @@ function is_ccwdevbusid_list()
 #
 # is_shortccwdevbusid_list
 #	$1: possibly correct list of short ccw device bus ids
-# returns 
+# returns
 #	0 if the given string is a correctly formatted list of short ccw device
 # 	  bus ids
 #	1 else
-# 
+#
 function is_shortccwdevbusid_list()
-{ 
+{
 	local DEVLIST="$1"
 	[[ "$DEVLIST" =~ $FORMAT_SHORTDEVLIST ]]
 	case $? in
@@ -987,14 +1024,14 @@ function is_shortccwdevbusid_list()
 #
 # is_supported_driver
 #	$1: possibly supported driver
-# returns 
-#	0 if the given string denotes a supported driver 
+# returns
+#	0 if the given string denotes a supported driver
 #	1 else
-# 
+#
 function is_supported_driver()
 {
 	local DRIVER="$1"
-	[[ "$DRIVER" =~ "^(qeth|lcs|ctc|ctcm)$" ]] 
+	[[ "$DRIVER" =~ "^(qeth|lcs|ctc|ctcm)$" ]]
 	case $? in
 		0)
 			return 0
@@ -1081,7 +1118,7 @@ DEVICE_TO_REMOVE=""
 DO_REMOVEALL=0
 NONINTERACTIVE=0
 EXCEPT=""
-if [ $# -gt 0 ] 
+if [ $# -gt 0 ]
 then
 	while [ $# -gt 0 ]
 	do
@@ -1092,7 +1129,7 @@ then
 				;;
 			-v|--version)
 				print_version
-				exit 0	
+				exit 0
 				;;
 			-A|--add-all)
 				DO_ADDALL=1
@@ -1103,15 +1140,15 @@ then
 				if [ $# -lt 1 ]
 				then
 					print_error "Device ID expected"
-					exit 1
+					exit $RC_MISSING_DEVICE_ID
 				fi
 
-				# get parameter expected to be a 
-				# ccw device bus id 
+				# get parameter expected to be a
+				# ccw device bus id
 				DEVICE_TO_ADD="$1"
 				shift
 
-				# check syntax of ccw device bus id 
+				# check syntax of ccw device bus id
 				if is_complete_ccwdevbusid "$DEVICE_TO_ADD" ||
 					is_ccwdevbusid_list "$DEVICE_TO_ADD"
 				then
@@ -1127,9 +1164,9 @@ then
 					DO_ADD=1
 				else
 					print_error "Invalid device ID format" \
-						"$DEVICE_TO_ADD" 
-						
-					exit 1
+						"$DEVICE_TO_ADD"
+
+					exit $RC_INVALID_DEVICE_ID_FORMAT
 				fi
 
 				;;
@@ -1142,18 +1179,18 @@ then
 				if [ $# -lt 1 ]
 				then
 					print_error "Driver name expected"
-					exit 1
+					exit $RC_DRIVER_NAME_EXPECTED
 				fi
 
 				# ensure driver is supported
 				DRIVER="$1"
 				shift
 				if [ "$DRIVER" != "" ] && \
-					! is_supported_driver "$DRIVER" 
+					! is_supported_driver "$DRIVER"
 				then
 					# unknown driver
 					print_error "Unknown driver $DRIVER"
-					exit 1
+					exit $RC_UNKNOWN_DRIVER
 				fi
 				;;
 			-o|--option)
@@ -1164,7 +1201,7 @@ then
 					print_error "Missing attrtibute" \
 						"value pair for -o|--" \
 						"option"
-					exit 1
+					exit $RC_MISSING_ATTRIBUTE_VALUE_PAIR
 				fi
 
 				# get option string
@@ -1174,26 +1211,26 @@ then
 				# store option
 				if ! store_option $OPTIONSTRING
 				then
-					exit $?
+					exit $RC_INVALID_ATTRIBUTE_VALUE_PAIR
 				fi
 				;;
 			-r|--remove)
 				DO_REMOVE=1
 				shift
-		
+
 				# ensure there is a further parameter
 				if [ $# -lt 1 ]
 				then
 					print_error "Expecting <device_bus_id>"\
 						"of device to be removed"
-					exit 1
+					exit $RC_MISSING_ATTRIBUTE_VALUE_PAIR
 				fi
 
 				# get device to be removed
 				DEVICE_TO_REMOVE="$1"
 				shift
-				
-				# validate it is a 
+
+				# validate it is a
 				# ccw dev bus id (short or long)
 				if is_partial_ccwdevbusid "$DEVICE_TO_REMOVE"
 				then
@@ -1203,7 +1240,7 @@ then
 				then
 					print_error "Invalid device ID format" \
 						"$DEVICE_TO_REMOVE"
-					exit 1
+					exit $RC_INVALID_DEVICE_ID_FORMAT
 				fi
 				;;
 			-R|--remove-all)
@@ -1219,7 +1256,7 @@ then
 				then
 					print_error "<device_bus_id> missing"\
 						"for -e|--except"
-					exit 1
+					exit $RC_MISSING_DEVICE_ID
 				fi
 
 				# get device to be removed
@@ -1236,7 +1273,7 @@ then
 				then
 					print_error "Invalid device ID format" \
 						"$EXCEPT_DEVNO"
-					exit 1
+					exit $RC_INVALID_DEVICE_ID_FORMAT
 				fi
 
 				# create a filter statement
@@ -1258,7 +1295,7 @@ then
 			*)
 				echo "$CMD: Invalid option $1"
 				echo "Try '$CMD --help' for more information."
-				exit 1
+				exit $RC_INVALID_ARGUMENT
 				;;
 		esac
 	done
@@ -1271,7 +1308,7 @@ if [ $(($DO_ADD + $DO_ADDALL + $DO_LIST_UNCONFIGURED + $DO_LIST_CONFIGURED + \
 then
 	print_error "Too much arguments"
 	echo "Try '$CMD --help' for more information."
-	exit 1
+	exit $RC_TOO_MUCH_ARGUMENTS
 fi
 
 # react to parsed options
@@ -1290,12 +1327,31 @@ then
 		then
 			print_error "No configuration found for device ID" \
 				"$DEVICE_TO_ADD"
-			exit 1
+			exit $RC_NO_CONFIG_FOUND_FOR_DEV
 		fi
 	else
-		# define set of device numbers to be used		
+		# define set of device numbers to be used
 		DEVICES="$DEVICE_TO_ADD"
-		
+
+		# ensure none of the CCW devices is already in use
+		CCW_DEVS=${DEVICES//,/ }
+		for CCW_DEVNO in $CCW_DEVS
+		do
+			CCW_DEV_ONLINEFILE="$CCWDEV_DIR/$CCW_DEVNO/online"
+			if [ ! -e  $CCW_DEV_ONLINEFILE ]
+			then
+				print_error "Device $CCW_DEVNO does not exist"
+				exit $RC_DEVICE_DOES_NOT_EXIST
+			fi
+
+			read CCW_DEV_ONLINE < $CCW_DEV_ONLINEFILE
+			if [ "$CCW_DEV_ONLINE" == "1" ]
+			then
+				print_error "$CCW_DEVNO is already in use"
+				exit $RC_DEVICE_ALREADY_IN_USE
+			fi
+		done
+
 		# try to find a driver for the given set of device numbers
 		CANDIDATE=$($LSZNET_CALL|
 			awk "\$7~/${DEVICE_TO_ADD//,// && \$7~/}/ {print \$5}")
@@ -1305,7 +1361,7 @@ then
 	# compute the expected group device number
 	CCWGROUPDEVNO=${DEVICES%%,*}
 
-	# check whether an appropriate driver was determined automatically or 
+	# check whether an appropriate driver was determined automatically or
 	# not, if not, one has to be given by the user via -d
 	if [ "$DRIVER" == "" ]
 	then
@@ -1345,7 +1401,7 @@ then
 				$ATTRIBUTE_COUNT "${ATTRIBUTE_NAME[@]}" \
 				"${ATTRIBUTE_VALUE[@]}"
 			then
-				ADDALL_RC=1
+				ADDALL_RC=$RC_SOME_DEVICES_FAILED
 			fi
 		done
 		exit "$ADDALL_RC"
@@ -1363,9 +1419,9 @@ then
 	if [[ -z "$CCWGROUPDEVID_TO_REMOVE" ]]
 	then
 		print_error "$DEVICE_TO_REMOVE is not a configured device"
-		exit 1
+		exit $RC_DEVICE_NOT_CONFIGURED
 	fi
-	
+
 	echo "Remove network device $CCWGROUPDEVID_TO_REMOVE" \
 	 	"($CCWDEVBUSIDS_TO_REMOVE)?"
 	echo "Warning: this may affect network connectivity!"
@@ -1403,7 +1459,7 @@ then
 fi
 if [ $DO_LIST_UNCONFIGURED -eq 1 ]
 then
-	list_unconfigured 
+	list_unconfigured
 	exit 0
 fi
 if [ $DO_LIST_CONFIGURED -eq 1 ]
diff --git a/zconf/znetconf.8 b/zconf/znetconf.8
index 3af8565..a6da42c 100644
--- a/zconf/znetconf.8
+++ b/zconf/znetconf.8
@@ -1,6 +1,6 @@
 .TH ZNETCONF 8 "Mar 2009" "s390-tools"
 
-.SH NAME 
+.SH NAME
 znetconf \- list and configure network devices for System z network adapters
 
 .SH SYNOPSIS
@@ -8,10 +8,10 @@ znetconf \- list and configure network devices for System z network adapters
 .B [-h|--help] [-v|--version]
 .br
 
-.br  
-.B znetconf -u | -c 
 .br
-.B znetconf -a <device_bus_id>[,...]{2} [-o <ATTR>=<VALUE>]+ [-d <DRIVER>] 
+.B znetconf -u | -c
+.br
+.B znetconf -a <device_bus_id>[,...]{2} [-o <ATTR>=<VALUE>]+ [-d <DRIVER>]
 .br
 .B znetconf -A [-o <ATTR>=<VALUE>]+ [-d <DRIVER>] [-e <device_bus_id>]+
 .br
@@ -27,12 +27,12 @@ Based on these lists, it automatically adds or removes network devices.
 For automatic configuration, znetconf builds a channel command word
 (CCW) group device from sensed CCW devices, configures any specified
 option through the sensed network device driver and sets the new
-network device online. 
+network device online.
 .P
 During automatic removal, znetconf sets the device offline and removes it.
 Be aware that removing all network devices leads to the
-complete loss of network connectivity. So a terminal session (e.g. 3270) 
-might be required to restore. 
+complete loss of network connectivity. So a terminal session (e.g. 3270)
+might be required to restore.
 
 .SH OPTIONS
 .TP 8
@@ -43,30 +43,30 @@ Print help text.
 .BR -v | --version
 Print the version of the s390-tools package and the znetconf command.
 
-.TP 
-.BR -u | --unconfigured	
+.TP
+.BR -u | --unconfigured
 List potential network devices that are not yet configured.
 For each device, the following data is provided:
 .RS
 .TP 4
-* 
-Device IDs (device bus bus-IDs) of the CCW devices constituting the network 
+*
+Device IDs (device bus bus-IDs) of the CCW devices constituting the network
 device
 .TP
-* 
+*
 Type of control unit (e.g. 1731/01)
 .TP
-* 
+*
 Network card type (e.g. OSA (QDIO))
 .TP
 *
-Channel path identifier (CHPID) 
+Channel path identifier (CHPID)
 .TP
 *
 Device driver (qeth, lcs, ctc, ctcm)
 .RE
-.TP 
-.BR -c | --configured 
+.TP
+.BR -c | --configured
 List configured network devices. For each device, the following data is
 provided:
 .RS
@@ -104,7 +104,7 @@ device_bus_id can be any of the device
 IDs listed as part of the potential network device list (argument
 .BR -u ")."
 For example, if znetconf
-.BR -u 
+.BR -u
 lists 0.0.f503,0.0.f504,0.0.f505 for a potential network device, device_bus_id
 may be 0.0.f503 or 0.0.f504 or 0.0.f505.
 If a device bus-ID begins with 0.0., you can abbreviate it to the final 4
@@ -115,11 +115,11 @@ If attribute value pairs are given with
 .BR -o ", "
 these pairs are configured for the created network device. The
 device is then set online regardless of whether the given attribute value pairs
-were applied successfully. 
+were applied successfully.
 .br
 Finally, the corresponding network interface name (e.g. eth1) is displayed.
 .br
-If more then one device_bus_id is given, the given set of devices is configured as a network device. znetconf tries to sense the required device driver 
+If more then one device_bus_id is given, the given set of devices is configured as a network device. znetconf tries to sense the required device driver
 automatically. If the device driver cannot be sensed, you must specify it with
 -d.
 .BR -d "."
@@ -145,7 +145,7 @@ znetconf continues with the next remaining potential network device.
 
 .TP
 .BR -r | --remove " <device_bus_id> [-n | --non-interactive]"
-Remove the network device identified by device_bus_id. device_bus_id is one of 
+Remove the network device identified by device_bus_id. device_bus_id is one of
 the device IDs of the network device. They are listed as part of znetconf
 .BR -c "."
 znetconf sets the device offline and removes it. If
@@ -164,21 +164,105 @@ with
 .TP
 \fB<ATTR>\fR
 Specify a device option. The option must match a sysfs attribute for the device
-to be configured.
+to be configured. For a detailed description of the semantics of sysfs
+attributes please refer to the Device Drivers, Features, and Commands book for
+Linux on System z. The attributes are:
+
+.RS
+.B qeth
+.br
+broadcast_mode
+.br
+buffer_count
+.br
+canonical_macaddr
+.br
+checksumming
+.br
+fake_broadcast
+.br
+ipa_takeover/add4
+.br
+ipa_takeover/add6
+.br
+ipa_takeover/del4
+.br
+ipa_takeover/del6
+.br
+ipa_takeover/enable
+.br
+ipa_takeover/invert4
+.br
+ipa_takeover/invert6
+.br
+isolation
+.br
+large_send
+.br
+layer2
+.br
+performance_stats
+.br
+portname
+.br
+portno
+.br
+priority_queueing
+.br
+route4
+.br
+route6
+.br
+rxip/add4
+.br
+rxip/add6
+.br
+rxip/del4
+.br
+rxip/del6
+.br
+vipa/add4
+.br
+vipa/add6
+.br
+vipa/del4
+.br
+vipa/del
+.RE
+
+.RS
+.B ctc(m)
+.br
+buffer
+.br
+loglevel
+.br
+protocol
+.br
+stats
+.RE
+
+.RS
+.B lcs
+.br
+portno
+.br
+lancmd_timeout
+.RE
 
 .TP
-\fB<device_bus_id>\fR 
+\fB<device_bus_id>\fR
 Specify the device bus-ID of a CCW device. Device bus-IDs have the form
 ([A-Fa-f0-9].[A-Fa-f0-9].)[A-Fa-f0-9]{4}.
 
-If a device bus-ID begins with 0.0., you can abbreviate it to the final 4 
+If a device bus-ID begins with 0.0., you can abbreviate it to the final 4
 hexadecimal digits.
 
 For example, you can abbreviate 0.0.f503 to f503.
 
 .TP
 \fB<DRIVER>\fR
-Specify the device driver for the device. Valid values are qeth, lcs, ctc, or 
+Specify the device driver for the device. Valid values are qeth, lcs, ctc, or
 ctcm.
 
 .SH EXAMPLES
@@ -242,9 +326,9 @@ Shows the list of potential network devices. Example output:
 Device IDs                 Type    Card Type  CHPID Drv.
 .br
 --------------------------------------------------------
-0.0.f500,0.0.f501,0.0.f502 1731/01 OSA (QDIO) 00    qeth   
+0.0.f500,0.0.f501,0.0.f502 1731/01 OSA (QDIO) 00    qeth
 .br
-0.0.f503,0.0.f504,0.0.f505 1731/01 OSA (QDIO) 01    qeth 
+0.0.f503,0.0.f504,0.0.f505 1731/01 OSA (QDIO) 01    qeth
 .RE
 .P
 \fBznetconf -a 0.0.f503\fR
@@ -258,13 +342,13 @@ lists the new network device.
 .P
 \fBznetconf -a f503\fR
 .RS
-This command is equivalent to \fBznetconf -a 0.0.f503\fR. 
+This command is equivalent to \fBznetconf -a 0.0.f503\fR.
 .RE
 .P
 \fBznetconf -a f503 -o layer2=0 -o portname=myname\fR
 .RS
-Adds the potential network device 
-with 0.0.f503 as one of its device bus-IDs  
+Adds the potential network device
+with 0.0.f503 as one of its device bus-IDs
 and configures the options layer2 with value 0 and
 portname with myname.
 .RE
@@ -288,9 +372,9 @@ Device IDs                 Type    Card Type     CHPID Drv. Name State
 
 \fBznetconf -r 0.0.f503\fR
 .RS
-Removes the network device with 0.0.f503 as one of its device bus-IDs. 
+Removes the network device with 0.0.f503 as one of its device bus-IDs.
 You can only remove configured devices as listed by znetconf
-.BR -c "." 
+.BR -c "."
 After successfully running this command the corresponding device appears in the
 list of potential network devices as listed by znetconf
 .BR -u "."
@@ -303,9 +387,76 @@ This command is equivalent to \fBznetconf -r 0.0.f503\fR.
 .P
 
 .SH DIAGNOSTICS
-If znetconf runs successfully, the exit status is 0. In case of errors, 1 is
-returned.
-
+If znetconf runs successfully, the exit status is 0. In case of errors, the following codes are returned:
+.TP
+.BR 0
+success
+.TP
+.BR 9
+could not group devices
+.TP
+.BR 10
+could not set device online
+.TP
+.BR 11
+could not set device offline
+.TP
+.BR 12
+invalid attribute value pair
+.TP
+.BR 13
+missing component (broken installation)
+.TP
+.BR 14
+missing device ID
+.TP
+.BR 15
+invalid device ID format
+.TP
+.BR 16
+driver name expected
+.TP
+.BR 17
+unknown driver
+.TP
+.BR 18
+missing attribute value pair for -o|--option
+.TP
+.BR 19
+invalid argument
+.TP
+.BR 20
+too much arguments
+.TP
+.BR 21
+no configuration found for device ID
+.TP
+.BR 22
+device is not configured
+.TP
+.BR 23
+could not ungroup device
+.TP
+.BR 24
+at least one option could not be configured
+.TP
+.BR 25
+missing value for attribute
+.TP
+.BR 26
+device does not exist
+.TP
+.BR 27
+device already in use
+.TP
+.BR 28
+net device did not come online
+.TP
+.BR 29
+some devices could not be added or failed
+.TP
+.BR 99
+internal znetconf bug
 .SH AUTHOR
 .nf
 This man-page was written by Einar Lueck <elelueck at de.ibm.com>.
-- 
1.6.3.3



--- NEW FILE device_cio_free ---
#!/bin/sh
#
# Copyright 2009 Red Hat, Inc.
# License: GPLv2
# Author: Dan Horák <dhorak at redhat.com>
#
# unblock devices listed in various config files and wait until they are ready
#
# it uses dasd and zfcp config file
# config file syntax:
# deviceno   options
# or
# deviceno   WWPN   FCPLUN
#
# also processes the system ccw config file and network interface configurations
#

DASDCONFIG=/etc/dasd.conf
ZFCPCONFIG=/etc/zfcp.conf
ZNETCONFIG=/etc/ccw.conf
BLACKLIST=/proc/cio_ignore
VERBOSE=
PATH=/bin:/usr/bin:/sbin:/usr/sbin
ALL_DEVICES=

usage()
{
    echo "$0 [-h|--help] [-V|--verbose]"
    exit 1
}

# accepts single device, comma-separated lists and dash separated ranges and their combinations
free_device()
{
    local DEV

    [ -z "$1" ] && return

    DEV=$(echo $1 | tr "A-Z" "a-z")
    
    [ $VERBOSE ] && echo "Freeing device(s) $DEV"
    if [ echo "free $DEV" > $BLACKLIST 2> /dev/null ]; then
	echo "Error: can't free device(s) $DEV"
    else
	if [ -z $ALL_DEVICES ]; then
	    ALL_DEVICES=$DEV
	else
	    ALL_DEVICES="$ALL_DEVICES,$DEV"
	fi
    fi
}

# wait until a device appears on the ccw bus
wait_on_device()
{
    local DEVICE_ONLINE DEV
    
    [ -z "$1" ] && return
    
    DEV=$1
    DEVICE_ONLINE=/sys/bus/ccw/devices/$DEV/online
    
    [ $VERBOSE ] && echo "Waiting on device $DEV"
    [ -f "$DEVICE_ONLINE" ] && return

    for t in 1 2 3 4 5
    do
	sleep $t
	[ -f "$DEVICE_ONLINE" ] && return
    done
    echo "Error: device $DEV still not ready"
}

# check how we were called
case $(basename "$0") in
    "dasd_cio_free")
	CONFIG=$DASDCONFIG
	MODE=dasd
	;;
    "zfcp_cio_free")
	CONFIG=$ZFCPCONFIG
	MODE=zfcp
	;;
    "znet_cio_free")
	CONFIG=$ZNETCONFIG
	MODE=znet
	;;
    *)
	echo "Error: unknown alias '$CMD'."
	echo "Supported aliases are dasd_cio_free, zfcp_cio_free and znet_cio_free."
	exit 1
	;;
esac

# process command line options
if [ $# -gt 0 ]; then
    case $1 in
	-V|--verbose)
	    VERBOSE=yes
	    shift
	    ;;
	-h|--help)
	    usage
	    ;;
	*)
	    echo "Error: unknown option $1"
	    usage
	    ;;
    esac
fi

if [ ! -f $BLACKLIST ]; then
    echo "Error: $BLACKLIST kernel interface doesn't exist"
    exit 2
fi

if [ $MODE = "dasd" -o $MODE = "zfcp" ]; then
    # process the config file
    if [ -f "$CONFIG" ]; then
        while read line; do
	    case $line in
		\#*) ;;
		*)
		    [ -z "$line" ] && continue
		    set $line
		    free_device $1
		    ;;
	    esac
	done < $CONFIG
    fi
fi

if [ $MODE = "dasd" ]; then
    # process the device list defined as option for the dasd module
    DEVICES=$(modprobe --showconfig | grep "options[[:space:]]\+dasd_mod" | \
	sed -e 's/.*[[:space:]]dasd=\([^[:space:]]*\).*/\1/' -e 's/([^)]*)//g' \
	-e 's/nopav\|nofcx\|autodetect\|probeonly//g' -e 's/,,/,/g' -e 's/^,//' -e 's/,$//')

    free_device $DEVICES
fi

if [ $MODE = "znet" ]; then
    # process the config file
    if [ -f "$CONFIG" ]; then
        while read line; do
	    case $line in
		\#*) ;;
		*)
		    [ -z "$line" ] && continue
		    # grep 2 or 3 channels from beginning of each line
		    DEVICES=$(echo $line | egrep -i -o "^([0-9]\.[0-9]\.[a-f0-9]+,){1,2}([0-9]\.[0-9]\.[a-f0-9]+)")
		    free_device $DEVICES
		    ;;
	    esac
	done < $CONFIG
    fi
    # process channels from network interface configurations
    for line in $(egrep -i -h "^[[:space:]]*SUBCHANNELS=['\"]?([0-9]\.[0-9]\.[a-f0-9]+,){1,2}([0-9]\.[0-9]\.[a-f0-9]+)['\"]?([[:space:]]+#|[[:space:]]*$)" /etc/sysconfig/network-scripts/ifcfg-* 2> /dev/null)
    do
	eval "$line"
        free_device $SUBCHANNELS
    done
fi

# wait until recently unblocked devices are ready
# at this point we know the content of ALL_DEVICES is syntacticly correct
IFS=","
set $ALL_DEVICES
while [ "$1" ]
do
    DEV="$1"
    IFS="."

    # get the lower bound for range or get the single device
    LOWER=${DEV%%-*}
    read -a L <<< "$LOWER"
    if [ ${#L[@]} -eq 1 ]; then
        L[2]=${L[0]}
        L[0]=0
        L[1]=0
    fi

    # get the upper bound for range or get the single device
    UPPER=${DEV##*-}
    read -a U <<< "$UPPER"
    if [ ${#U[@]} -eq 1 ]; then
        U[2]=${U[0]}
        U[0]=0
        U[1]=0
    fi

    # iterate thru all devices
    for (( i=0x${L[0]}; i<=0x${U[0]}; i++ )); do
    for (( j=0x${L[1]}; j<=0x${U[1]}; j++ )); do
    for (( k=0x${L[2]}; k<=0x${U[2]}; k++ )); do
	wait_on_device "$(printf %x.%x.%04x $i $j $k)"
    done
    done
    done

    # go to the next device
    shift
done


Index: cpi.initd
===================================================================
RCS file: /cvs/pkgs/rpms/s390utils/F-12/cpi.initd,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- cpi.initd	1 Dec 2009 09:59:31 -0000	1.2
+++ cpi.initd	22 Dec 2009 10:56:32 -0000	1.3
@@ -2,7 +2,7 @@
 #
 # Copyright 2009 Red Hat, Inc.
 # License: GPLv2
-# Author: Dan Horak <dhorak at redhat.com>
+# Author: Dan Horák <dhorak at redhat.com>
 #
 # cpi Set Control Program Identification on IBM zSeries
 #


Index: s390utils.spec
===================================================================
RCS file: /cvs/pkgs/rpms/s390utils/F-12/s390utils.spec,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -p -r1.16 -r1.17
--- s390utils.spec	10 Dec 2009 17:48:03 -0000	1.16
+++ s390utils.spec	22 Dec 2009 10:56:32 -0000	1.17
@@ -31,6 +31,7 @@ Source11:       cpi.sysconfig
 # files for DASD initialization
 Source12:       dasd.udev
 Source13:       dasdconf.sh
+Source14:       device_cio_free
 
 Patch1:   0001-s390-tools-1.5.3-zipl-zfcpdump-2.patch
 Patch2:   0002-s390-tools-1.8.1-zipl-automenu.patch
@@ -48,6 +49,7 @@ Patch13:  0013-zipl-handle-status-during
 Patch14:  0014-dasdview-fdasd-fix-floating-point-error-for-unformat.patch
 Patch15:  0015-s390tools-1.8.2-zipl-dm.patch
 Patch16:  0016-s390tools-1.8.2-lsreipl-nss.patch
+Patch17:  0017-qualified-return-codes-and-further-error-handling-in.patch
 
 Patch100:       cmsfs-1.1.8-warnings.patch
 Patch101:       cmsfs-1.1.8-kernel26.patch
@@ -125,6 +127,9 @@ be used together with the zSeries (s390)
 # Add missing check and print NSS name in case an NSS has been IPLed (#546297)
 %patch16 -p1 -b .lsreipl-nss
 
+# Add qualified return codes and further error handling in znetconf (#548487)
+%patch17 -p1 -b .znetconf-returncodes
+
 #
 # cmsfs
 #
@@ -198,6 +203,9 @@ rm -rf ${RPM_BUILD_ROOT}
 
 mkdir -p $RPM_BUILD_ROOT{%{_lib},%{_libdir},/sbin,/bin,/boot,%{_mandir}/man1,%{_mandir}/man8,%{_sbindir},%{_bindir},%{_sysconfdir}/{profile.d,udev/rules.d,sysconfig},%{_initddir}}
 
+# workaround an issue in the zipl-device-mapper patch
+rm -f zipl/src/zipl_helper.device-mapper.*
+
 make install \
         INSTROOT=$RPM_BUILD_ROOT \
         MANDIR=$RPM_BUILD_ROOT%{_mandir} \
@@ -260,6 +268,14 @@ install -p -m 644 include/vtoc.h $RPM_BU
 install -p -m 644 %{SOURCE11} ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/cpi
 install -p -m 755 %{SOURCE10} ${RPM_BUILD_ROOT}%{_initddir}/cpi
 
+# device_cio_free
+install -p -m 755 %{SOURCE14} ${RPM_BUILD_ROOT}/sbin
+pushd ${RPM_BUILD_ROOT}/sbin
+for lnk in dasd zfcp znet; do
+    ln -sf device_cio_free ${lnk}_cio_free
+done
+popd
+
 
 %clean
 rm -rf ${RPM_BUILD_ROOT}
@@ -430,9 +446,11 @@ fi
 %doc README
 %doc LICENSE
 /sbin/zipl
+/sbin/dasd_cio_free
 /sbin/dasdfmt
 /sbin/dasdinfo
 /sbin/dasdview
+/sbin/device_cio_free
 /sbin/fdasd
 /sbin/chccwdev
 /sbin/chchp
@@ -454,7 +472,9 @@ fi
 /sbin/tape390_crypt
 /sbin/tunedasd
 /sbin/vmcp
+/sbin/zfcp_cio_free
 /sbin/zgetdump
+/sbin/znet_cio_free
 /sbin/znetconf
 /sbin/dbginfo.sh
 %{_sbindir}/lsreipl
@@ -806,11 +826,13 @@ User-space development files for the s39
 
 
 %changelog
-* Thu Dec 10 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-6
+* Tue Dec 22 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-6
 - fixed return value in cpi initscript (#541389)
 - updated zfcpconf.sh script from dracut
 - added device-mapper support into zipl (#546280)
 - added missing check and print NSS name in case an NSS has been IPLed (#546297)
+- added device_cio_free script and its symlinks
+- added qualified return codes and further error handling in znetconf (#548487)
 
 * Fri Nov 13 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-5
 - added multiple fixes from IBM (#533955, #537142, #537144)




More information about the fedora-extras-commits mailing list