rpms/s390utils/devel 0023-znetconf-use-hex-index-for-chpidtype-table.patch, NONE, 1.1 0024-zipl-handle-SSCH-status.patch, NONE, 1.1 0025-vmconvert-shows-garbage-in-progress-bar.patch, NONE, 1.1 0026-zipl-zfcp-dump-partition-error.patch, NONE, 1.1 0027-zfcpdump-disable-memory-cgroups.patch, NONE, 1.1 0028-fix-df-usage-in-ziomon.patch, NONE, 1.1 0029-ziomon-remove-check-for-ziorep_config-availability.patch, NONE, 1.1 0030-ziomon-fix-multipathing.patch, NONE, 1.1 0031-mismatch-between-man-and-h-in-chshut.patch, NONE, 1.1 0032-lsdasd-update-man-page.patch, NONE, 1.1 0033-reinitialize-array-in-lsqeth.patch, NONE, 1.1 0034-check-the-length-of-the-parameters-line.patch, NONE, 1.1 0035-ziorep-follow-symlink.patch, NONE, 1.1 0036-ts-shell-do-not-restrict-group-names-to-be-alphanume.patch, NONE, 1.1 0037-znetconf-unknown-driver-for-qeth.patch, NONE, 1.1 0038-cpuplugd-fix-stack-overflow.patch, NONE, 1.1 0039-cpuplugd-fix-cmm-limits-checks.patch, NONE, 1.1 0040-cpuplugd-set-cpu_min-to-1-by-default.patch, NONE, 1.1 0041-fix-dates-option-on-zfcpdbf.patch, NONE, 1.1 ccw.udev, NONE, 1.1 ccw_init, NONE, 1.1 cpuplugd.initd, NONE, 1.1 device_cio_free.conf, NONE, 1.1 mon_statd.initd, NONE, 1.1 cpi.initd, 1.2, 1.3 dasdconf.sh, 1.1, 1.2 device_cio_free, 1.4, 1.5 s390utils.spec, 1.20, 1.21 zfcpconf.sh, 1.2, 1.3

Dan Horák sharkcz at fedoraproject.org
Wed Jul 7 13:42:34 UTC 2010


Author: sharkcz

Update of /cvs/pkgs/rpms/s390utils/devel
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv1961

Modified Files:
	cpi.initd dasdconf.sh device_cio_free s390utils.spec 
	zfcpconf.sh 
Added Files:
	0023-znetconf-use-hex-index-for-chpidtype-table.patch 
	0024-zipl-handle-SSCH-status.patch 
	0025-vmconvert-shows-garbage-in-progress-bar.patch 
	0026-zipl-zfcp-dump-partition-error.patch 
	0027-zfcpdump-disable-memory-cgroups.patch 
	0028-fix-df-usage-in-ziomon.patch 
	0029-ziomon-remove-check-for-ziorep_config-availability.patch 
	0030-ziomon-fix-multipathing.patch 
	0031-mismatch-between-man-and-h-in-chshut.patch 
	0032-lsdasd-update-man-page.patch 
	0033-reinitialize-array-in-lsqeth.patch 
	0034-check-the-length-of-the-parameters-line.patch 
	0035-ziorep-follow-symlink.patch 
	0036-ts-shell-do-not-restrict-group-names-to-be-alphanume.patch 
	0037-znetconf-unknown-driver-for-qeth.patch 
	0038-cpuplugd-fix-stack-overflow.patch 
	0039-cpuplugd-fix-cmm-limits-checks.patch 
	0040-cpuplugd-set-cpu_min-to-1-by-default.patch 
	0041-fix-dates-option-on-zfcpdbf.patch ccw.udev ccw_init 
	cpuplugd.initd device_cio_free.conf mon_statd.initd 
Log Message:
update to match the EL-6 version

0023-znetconf-use-hex-index-for-chpidtype-table.patch:
 lsznet.raw |   11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

--- NEW FILE 0023-znetconf-use-hex-index-for-chpidtype-table.patch ---
>From 3ca0d01240ab14ab3217985bf8ed9c89111e36c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Wed, 3 Feb 2010 13:17:41 +0100
Subject: [PATCH] znetconf: use hex index for chpidtype table

Description: znetconf: index into chpidtype lookup table must be hex.
Symptom:     Network subchannels with CHPID type containing non-decimal digits,
	     i.e. a-f, cause lsznet.raw errors like the following:
	     1a: value too great for base (error token is "1a")
Problem:     The value of the sysfs attribute "type" of a CHPID is hex,
	     but the lookup table index in the bash script must be decimal.
Solution:    Interpret "type" as hex number when used as lookup table index.
---
 zconf/lsznet.raw |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/zconf/lsznet.raw b/zconf/lsznet.raw
index e5643ee..9821ba3 100755
--- a/zconf/lsznet.raw
+++ b/zconf/lsznet.raw
@@ -68,10 +68,10 @@ readonly -a CU_GROUPCHANNELS=(
 )
 
 readonly -a CHPIDTYPES=(
-    [10]=OSE
-    [11]=OSD
-    [15]=OSN
-    [24]=IQD
+    [0x10]=OSE
+    [0x11]=OSD
+    [0x15]=OSN
+    [0x24]=IQD
 )
 
 # whitelist of network devices for TCP/IP stack, e.g. for Linux installers
@@ -116,7 +116,7 @@ function search_cu_tcpip() {
 # Always succeeds and returns 0.
 function search_chpt() {
     local chpidtype_number=$1
-    chpidtype_symbolic=${CHPIDTYPES[$chpidtype_number]}
+    chpidtype_symbolic=${CHPIDTYPES[$((0x$chpidtype_number))]}
     if [ "$chpidtype_symbolic" == "" ]; then
         chpidtype_symbolic="?"
     fi
-- 
1.6.6


0024-zipl-handle-SSCH-status.patch:
 common.S |  163 ++++++++++++++++++++++++++++++++++++++++++---------------------
 eckd2.S  |    1 
 fba2.S   |    2 
 3 files changed, 110 insertions(+), 56 deletions(-)

--- NEW FILE 0024-zipl-handle-SSCH-status.patch ---
>From 9c94d906621e775f005fa34583671f08000f1723 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Thu, 4 Feb 2010 13:07:30 +0100
Subject: [PATCH] zipl: handle SSCH status

Description: zipl: handle status during IPL SSCH
Symptom:     System enters disabled wait during IPL of DASD disk when an
	     unexpected status (e.g. triggered by a flashcopy operation)
	     is recognized on the IPL device.
Problem:     Unexpected status is not handled correctly during the SSCH
	     portion of the IPL code.
Solution:    Introduce a more robust SSCH result handling which performs
	     retries and clears status when encountering errors.
---
 zipl/boot/common.S |  163 +++++++++++++++++++++++++++++++++++-----------------
 zipl/boot/eckd2.S  |    1 -
 zipl/boot/fba2.S   |    1 -
 3 files changed, 110 insertions(+), 55 deletions(-)

diff --git a/zipl/boot/common.S b/zipl/boot/common.S
index fa45e5a..108dbbf 100644
--- a/zipl/boot/common.S
+++ b/zipl/boot/common.S
@@ -249,69 +249,126 @@ _disable_device:
 	.endm	
 
 	.macro io_subroutines
+
+
+__LC_IO_NEW_PSW		= 0x78
+__LC_SUBCHANNEL_ID	= 0xb8
+
+#
+# Wait for I/O interrupt.
+#
+# Wait until status for the specified subchannel is available.
+#
+#   %r2 : subchannel id
+#   %r3 : address of irb
+#
+
+_wait_for_int:
+	lr     %r1,%r2
+	basr   %r4,0			# get base register
+0:
+	mvc    __LC_IO_NEW_PSW(8),4f-0b(%r4) # set i/o new psw
+1: # wait
+	lpsw   3f-0b(%r4)
+2: # continue
+	tsch   0(%r3)			# get status
+	brc    4,1b			# if cc=1 goto wait
+	br     %r14			# return
+        .align 8
+3:
+	.long  0x020a0000,0x80000000+1b	# enabled wait psw
+4:
+	.long  0x00080000,0x80000000+2b	# io new psw
+
 #
 # Start I/O
-#   %r2 : device subchannel id
+#
+# Attempt to start I/O defined by ORB on specified subchannel. Retry I/O
+# 256 times per path (recommended error recovery procedure for IFCCs) unless
+# a permanent path error condition is indicated. Try all paths twice to try to
+# work around "link flapping" (paths going down once each in the same order as
+# they are tried). Perform CLEAR SUBCHANNEL when switching paths to clear any
+# improper subchannel status.
+#
+#   %r2 : subchannel id
 #   %r3 : address of orb
 #   %r4 : address of irb
-#   %r5 : retry count
 #
 _ssch:
-        stm    %r6,%r15,24(%r15)
-        basr   %r13,0                   # base register
-0:      s      %r15,6f-0b(%r13)         # create stack frame
-	lr     %r12,%r2                 # save subchannel id
-	lr     %r11,%r3                 # save orb
-	lr     %r10,%r4                 # save irb
-	lr     %r9,%r5                  # save retry count
-	ic     %r0,.Llpm-0b(%r13)	# copy lpm to orb lpm
-	stc    %r0,6(%r3)
-1:	lr     %r1,%r12
-	ssch   0(%r11)                  # go
-        bnz    4f-0b(%r13)              # houston, we have a problem
-2:	lr     %r2,%r12                 # call _wait4de with subchannel id
-	lr     %r3,%r10                 # and irb address as parameters
-	bas    %r14,_wait4de-0b(%r13)   # wait until DE or error
-	tm     9(%r10),0xff             # test channel status
-	bnz    4f-0b(%r13)
-	tm     8(%r10),0xf3             # test device status
-	bz     5f-0b(%r13)
-	bct    %r9,1b-0b(%r13)          # something went wrong, retry.
-4:	l      %r2,7f-0b(%r13)
-	bas    %r4,_panik-0b(%r13)      # won't return
-5:	lm     %r6,%r15,120(%r15)
-        br     %r14
-6:	.long  96
-7:      .long  ESSCH
+	stm    %r6,%r15,24(%r15)
+	basr   %r13,0			# get base register
+0:
+	ahi    %r15,-96			# create stack frame
+	lr     %r6,%r2			# r6:  sid
+	lr     %r7,%r3			# r7:  orb
+	lr     %r8,%r4			# r8:  irb
+	sr     %r9,%r9			# r9:  initial lpm
+	ic     %r9,.Llpm-0b(%r13)
+	l      %r10,.Lmask-0b(%r13)	# r10: path mask
+1: # restart_all
+	lhi    %r11,256			# r11: retry counter
+2: # restart
+	stc    %r9,6(%r7)		# store initial lpm in orb
+	ltr    %r9,%r9			# if non-zero initial lpm
+	jne    3f			# then use initial lpm
+	stc    %r10,6(%r7)		# else use current path mask
+3: # gotlpm
+	lr     %r1,%r6			# get sid
+	ssch   0(%r7)			# start subchannel
+	brc    1,7f			# if cc==3 goto next_path
+	brc    7,6f                     # if cc!=0 goto retry
+4: # wait_for_int_loop
+	lr     %r2,%r6			# get sid
+	lr     %r3,%r8			# get irb
+	bras   %r14,_wait_for_int	# wait for interrupt
+	jnz    9f			# if cc!=0 goto panic
+	tm     0(%r8),0x3		# test irb deferred cc
+	brc    1,7f			# if cc==3 goto next_path
+	jz     5f			# if cc==0 goto no_stctl_check
+	tm     3(%r8),0x10		# test irb status control
+	jnz    6f			# if alert goto retry
+5: # no_stctl_check
+	tm     9(%r8),0xff		# test irb subchannel status
+	jnz    6f			# if status!=0 goto retry
+	tm     8(%r8),0xf3		# test irb unusual device status
+	jnz    6f			# if status!=0 goto retry
+	tm     8(%r8),0x4		# test irb device end
+	jz     4b			# if !device_end goto wait_for_int_loop
+	lm     %r6,%r15,120(%r15)
+	br     %r14			# return
+
+6: # retry
+	lr     %r1,%r6			# get sid
+	tsch   0(%r8)			# clear status if necessary
+	brct   %r11,2b			# if --retries>0 goto restart
+7: # next_path
+	ltr    %r9,%r9			# if initial lpm != 0
+	jnz    8f			# then goto noshift
+	srl    %r10,1			# path_mask >>= 1
+	ltr    %r10,%r10		# if path_mask==0
+	jz     9f			# then goto panic
+8: # noshift
+	sr     %r9,%r9			# clear initial lpm
+	lr     %r1,%r6			# get sid
+	csch				# clear subchannel
+	brc    7,9f			# if cc!=0 goto panic
+	lr     %r2,%r6			# get sid
+	lr     %r3,%r8			# get irb
+	bras   %r14,_wait_for_int	# wait for interrupt
+	j      1b			# goto restart_all
+9: # panic
+	l      %r2,.Lerrno-0b(%r13)	# get error code
+	bras   %r14,_panik		# panic
+
+.Lerrno:
+	.long  ESSCH
+.Lmask:
+	.long  0x8080
 .Llpm:
-	.byte  0xff
+	.byte  0x00
 	.align 2
 
 #
-# Wait for interrupt subroutine
-#   %r2 : device subchannel id
-#   %r3 : address of irb
-#
-_wait4de:
-	lr     %r1,%r2
-	basr   %r4,0
-0:      mvc    0x78(8),5f-0b(%r4)       # set i/o new psw
-1:	lpsw   4f-0b(%r4)
-2:      c      %r1,0xb8                 # compare subchannel id
-        bne    1b-0b(%r4)               # unequal -> continue waiting
-	tsch   0(%r3)
-	tm     9(%r3),0xff              # test channel status
-	bnz    3f-0b(%r4)
-	tm     8(%r3),0xf3              # got something unusual ?
-	bnz    3f-0b(%r4)
-        tm     8(%r3),0x04              # got device end ?
-        bz     1b-0b(%r4)               # still busy -> continue waiting
-3:      br     %r14
-        .align 8
-4:	.long  0x020a0000,0x80000000+1b
-5:	.long  0x00080000,0x80000000+2b # io new psw
-
-#
 # Panik routine. Loads a disabled wait psw
 #   %r2 : panik code
 #
diff --git a/zipl/boot/eckd2.S b/zipl/boot/eckd2.S
index ba71db9..b59ab0e 100644
--- a/zipl/boot/eckd2.S
+++ b/zipl/boot/eckd2.S
@@ -85,7 +85,6 @@ _load_direct:
         la     %r3,.Lorb-.Lbase(%r13)   # pass address of orb
         la     %r4,.Lirb-.Lbase(%r13)   # and pass address of irb
 	lr     %r2,%r11                 # pass subchannel id
-        la     %r5,5                    # 5 retries
         bas    %r14,_ssch-.Lbase(%r13)  # read records
 .Lexit:
         lr     %r2,%r12                 # return updated load address
diff --git a/zipl/boot/fba2.S b/zipl/boot/fba2.S
index 82b1447..90bb2cd 100644
--- a/zipl/boot/fba2.S
+++ b/zipl/boot/fba2.S
@@ -98,7 +98,6 @@ _load_direct:
 	lr     %r2,%r11                 # pass subchannel id
 	la     %r3,.Lorb-.Lbase(%r13)   # pass address of orb
 	la     %r4,.Lirb-.Lbase(%r13)   # and pass address of irb
-	la     %r5,5                    # 5 retries
         bas    %r14,_ssch-.Lbase(%r13)  # read up to 128 blocks
 	b      .Lmain-.Lbase(%r13)
 .Lexit:	lr     %r2,%r12                 # return updated load address
-- 
1.6.6


0025-vmconvert-shows-garbage-in-progress-bar.patch:
 dump.cpp |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE 0025-vmconvert-shows-garbage-in-progress-bar.patch ---
>From 04859d2270d1327873e1e8825bdd9d0eaf73f5cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Wed, 10 Mar 2010 11:52:18 +0100
Subject: [PATCH] vmconvert shows garbage in progress bar

Description: vmconvert: Progress bar shows garbage
Symptom:     The progress bar shows control characters at end of line.
Problem:     One variable responsible for the progress bar has not been
initialized.
Solution:    Initialize variable.
---
 vmconvert/dump.cpp |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/vmconvert/dump.cpp b/vmconvert/dump.cpp
index f306b27..b4c97d6 100644
--- a/vmconvert/dump.cpp
+++ b/vmconvert/dump.cpp
@@ -46,8 +46,8 @@ ProgressBar::initProgress(void)
 void 
 ProgressBar::displayProgress(uint64_t value, uint64_t maxValue)
 {
+	char progress_bar[51];
 	int j;
-	char progress_bar[50];
 
 	if (progressPercentage == (int) (value * 100 / maxValue))
 		fprintf(stderr, "%6lld of %6lld |\r",
@@ -58,6 +58,7 @@ ProgressBar::displayProgress(uint64_t value, uint64_t maxValue)
 			progress_bar[j] = '#';
 		for (j = progressPercentage / 2; j < 50; j++)
 			progress_bar[j] = '-';
+		progress_bar[50] = 0;
 		fprintf(stderr, "%6lld of %6lld |%s| %3d%%  \r",
 			(long long) value, (long long) maxValue,
 			progress_bar, progressPercentage);
-- 
1.6.6.1


0026-zipl-zfcp-dump-partition-error.patch:
 bootmap.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0026-zipl-zfcp-dump-partition-error.patch ---
>From 18bc3ce1055c350aaa50696e53baad984f573697 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Thu, 11 Mar 2010 08:34:32 +0100
Subject: [PATCH] zipl: zfcp dump partition error

Description: zipl: zfcp dump partition error
Symptom:     When configuring the zfcp dump partition in zipl.conf the
partition information may be wrong.
Problem:     The info data structure is used after it was freed.
Solution:    Free the info structure when it is not used any more.
---
 zipl/src/bootmap.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/zipl/src/bootmap.c b/zipl/src/bootmap.c
index 526aa48..043a562 100644
--- a/zipl/src/bootmap.c
+++ b/zipl/src/bootmap.c
@@ -689,9 +689,9 @@ get_dump_fs_parmline(char* partition, char* parameters, uint64_t mem,
 		disk_free_info(info);
 		return -1;
 	}
-	disk_free_info(info);
 	buffer = create_dump_fs_parmline(parameters, "/dev/ram0", info->partnum,
 					 mem, 1);
+	disk_free_info(info);
 	if (buffer == NULL)
 		return -1;
 	*result = buffer;
-- 
1.6.6.1


0027-zfcpdump-disable-memory-cgroups.patch:
 bootmap.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE 0027-zfcpdump-disable-memory-cgroups.patch ---
>From cc672d10ef6ee3da060649fa595ed9d980e5e60e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Mon, 22 Mar 2010 12:58:13 +0100
Subject: [PATCH] zfcpdump - disable memory cgroups

Description: zipl/zfcpdump: Use "cgroup_disable=memory" kernel parameter
Symptom:     Out of memory kernel panic during SCSI dump.
Problem:     The zfcpdump kernel has to run within a 32 MB limit. When
	using "memory cgroups" about 2.6 MB are allocated, which leads
	to memory problems for zfcpdump.
Solution:    For zfcpdump we do not need "memory cgroups". Therefore this patch
	adds the kernel parameter "cgroup_disable=memory" to save 2.5 MB
	of memory.
---
 zipl/src/bootmap.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/zipl/src/bootmap.c b/zipl/src/bootmap.c
index 043a562..69f721e 100644
--- a/zipl/src/bootmap.c
+++ b/zipl/src/bootmap.c
@@ -653,7 +653,8 @@ create_dump_fs_parmline(const char* parmline, const char* root_dev,
 	if (!result)
 		return NULL;
 	snprintf(result, DUMP_PARAM_MAX_LEN, "%s%sroot=%s dump_part=%d "
-		 "dump_mem=%lld maxcpus=%d", parmline ? parmline : "",
+		 "dump_mem=%lld maxcpus=%d cgroup_disable=memory",
+		 parmline ? parmline : "",
 		 parmline ? " " : "", root_dev, part_num,
 		 (unsigned long long) mem, max_cpus);
 	result[DUMP_PARAM_MAX_LEN - 1] = 0;
-- 
1.6.6.1


0028-fix-df-usage-in-ziomon.patch:
 ziomon |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0028-fix-df-usage-in-ziomon.patch ---
>From b0238ed360f65ecbf095d89c43c420ed036e4ff0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Mon, 22 Mar 2010 15:21:55 +0100
Subject: [PATCH] fix df usage in ziomon

Description: ziomon: Fix 'df' command usage
Symptom:     Long device names could not be parsed properly.
Problem:     Long device names were split accross multiple lines.
Solution:    Use df with the right options.
---
 ziomon/ziomon |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/ziomon/ziomon b/ziomon/ziomon
index 924c1dd..ea910fc 100755
--- a/ziomon/ziomon
+++ b/ziomon/ziomon
@@ -709,7 +709,7 @@ function check_size_requirements() {
    (( estimated_size=$total_num_records * $size_per_record ));
    debug "    estimated size: $estimated_size Bytes";
    (( estimated_size=$estimated_size / 1000000 ));
-   (( free_space = `df -k $logpath | tail -n 1 | awk '{print $4}'` / 1024 ));
+   free_space=`df -mP $logpath | tail -n 1 | awk '{print $4}'`;
    debug "    free space on '$logpath': $free_space MBytes";
    if [ "$WRP_SIZE" == "" ]; then
       echo "NOTE: No size limit specified, run without a limit.";
-- 
1.6.6.1


0029-ziomon-remove-check-for-ziorep_config-availability.patch:
 ziorep_cfgreader.cpp |   24 +++++-------------------
 ziorep_cfgreader.hpp |    3 ---
 2 files changed, 5 insertions(+), 22 deletions(-)

--- NEW FILE 0029-ziomon-remove-check-for-ziorep_config-availability.patch ---
>From 2ec256f9dab30a57f60c83f7cd9b127c25b6cdd6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Thu, 25 Mar 2010 14:11:31 +0100
Subject: [PATCH] ziomon: remove check for ziorep_config availability

Description: ziomon: Remove check for ziorep_config availability
Symptom:     ziorep_config could not be found
Problem:     The path for ziorep_config was hardcoded and checked
	for to detect install errors.  However, as distributions
	install these files in varying directories, install issues
	should be avoided by distributors to begin with, and
	especially since the debug trace helps to detect these,
	this check is not really necessary and obviously causing
	more harm than it helps.
Solution:    Config is read from PATH.
---
 ziomon/ziorep_cfgreader.cpp |   24 +++++-------------------
 ziomon/ziorep_cfgreader.hpp |    2 --
 2 files changed, 5 insertions(+), 21 deletions(-)

diff --git a/ziomon/ziorep_cfgreader.cpp b/ziomon/ziorep_cfgreader.cpp
index c64c150..a8f424f 100644
--- a/ziomon/ziorep_cfgreader.cpp
+++ b/ziomon/ziorep_cfgreader.cpp
@@ -18,7 +18,7 @@
 #include "ziorep_utils.hpp"
 
 #define	ZIOREP_CFG_EXTENSION	".cfg"
-#define ZIOREP_CONFIG_PATH	"/sbin/ziorep_config"
+#define ZIOREP_CONFIG		"ziorep_config"
 
 extern const char *toolname;
 extern int verbose;
@@ -158,18 +158,6 @@ int ConfigReader::filter_unused_devices(const char *filename)
 }
 
 
-int ConfigReader::check_ziorep_config() const
-{
-	if (access(ZIOREP_CONFIG_PATH, F_OK | R_OK | X_OK)) {
-		fprintf(stderr, "%s: Cannot access " ZIOREP_CONFIG_PATH
-			". Please check your installation and try again.\n", toolname);
-		return -1;
-	}
-
-	return 0;
-}
-
-
 int ConfigReader::check_config_file(const char *fname) const
 {
 	char *tmp;
@@ -204,8 +192,6 @@ int ConfigReader::extract_config_data(const char *fname)
 
 	// Try to extract to .config first, which will be permanently cached
 	verbose_msg("No data cached, extract\n");
-	if (check_ziorep_config())
-		return -1;
 
 	fprintf(stdout, "Extracting config data...");
 	fflush(stdout);
@@ -215,8 +201,8 @@ int ConfigReader::extract_config_data(const char *fname)
 		if (extract_tmp(fname)) {
 			fprintf(stderr, "%s: Could not extract"
 				" configuration data. Check the integrity of"
-				" %s%s with %s and retry.", toolname, fname,
-				ZIOREP_CFG_EXTENSION, ZIOREP_CONFIG_PATH);
+				" %s%s with %s and retry.\n", toolname, fname,
+				ZIOREP_CFG_EXTENSION, ZIOREP_CONFIG);
 			return -1;
 		}
 	}
@@ -286,11 +272,11 @@ int ConfigReader::extract(const char *fname)
 	char *cmd = NULL;
 
 	// /sbin/ziorep_config -I -i <fname.cfg> > <file> 2>/dev/null
-	cmd = (char*)malloc(strlen(ZIOREP_CONFIG_PATH) + 7 + strlen(fname)
+	cmd = (char*)malloc(strlen(ZIOREP_CONFIG) + 7 + strlen(fname)
 		     + strlen(ZIOREP_CFG_EXTENSION) + 3 + strlen(m_tmp_file)
 		     + 12 + 1);
 
-	sprintf(cmd, "%s -I -i %s%s > %s 2>/dev/null", ZIOREP_CONFIG_PATH, fname,
+	sprintf(cmd, "%s -I -i %s%s > %s 2>/dev/null", ZIOREP_CONFIG, fname,
 		ZIOREP_CFG_EXTENSION, m_tmp_file);
 
 	verbose_msg("Issue command: %s\n", cmd);
diff --git a/ziomon/ziorep_cfgreader.hpp b/ziomon/ziorep_cfgreader.hpp
index 94e612b..3053633 100644
--- a/ziomon/ziorep_cfgreader.hpp
+++ b/ziomon/ziorep_cfgreader.hpp
@@ -138,8 +138,6 @@ private:
 	 * in the actual data, and remove anything that is unused */
 	int filter_unused_devices(const char *filename);
 
-	int check_ziorep_config() const;
-
 	int check_config_file(const char *fname) const;
 
 	int extract_config_data(const char *fname);
-- 
1.6.6.1


0030-ziomon-fix-multipathing.patch:
 ziomon |   17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

--- NEW FILE 0030-ziomon-fix-multipathing.patch ---
>From 3aa5fa943cea0f01beb63c90a5b0255a797ac117 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Wed, 31 Mar 2010 10:19:50 +0200
Subject: [PATCH] ziomon - fix multipathing

Description: ziomon: Fix problem with multipath command output
Symptom:     Number of LUNs does not mach number of devices: E.g. 12 devices
	and 10 LUNs.
Problem:     Some version of the multipath command use characters that can
	break parsing of its output.
Solution:    Use proper parsing of the multipath -l output.
---
 ziomon/ziomon |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/ziomon/ziomon b/ziomon/ziomon
index ea910fc..b4c6e36 100755
--- a/ziomon/ziomon
+++ b/ziomon/ziomon
@@ -499,15 +499,15 @@ function check_for_multipath_devices() {
                WRP_DEVICES[$j]="";
                devices_basenames[$j]="";
                clean_devices;
-               (( i+=3 ));
+               (( i+=2 ));
                while [[ ! "${mp_arr[$i]:0:1}" =~ "[0-9a-zA-Z]" ]] && [ $i -lt ${#mp_arr[@]} ]; do
-                  checked_devs[${#checked_devs[@]}]=`echo ${mp_arr[$i]} | awk '{print "/dev/"$3}'`;
-                  ddebug "   add ${checked_devs[${#checked_devs[@]}-1]}";
-                  line=${mp_arr[$i]#* };
-                  line=${line%%:*};
-                  line=`echo $line | sed 's/ //g'`;
-                  WRP_HOST_ADAPTERS[${#WRP_HOST_ADAPTERS[@]}]="host$line";
-                  WRP_LUNS[${#WRP_LUNS[@]}]=`echo ${mp_arr[$i]#* } | awk '{print $1}'`;
+                  if [ `echo ${mp_arr[$i]} | grep -e "[0-9]\{1,\}:[0-9]\{1,\}:[0-9]\{1,\}:[0-9]\{1,\}" | wc -l` -ne 0 ]; then
+                     line="`echo ${mp_arr[$i]} | sed 's/.*\([0-9]\{1,\}:[0-9]\{1,\}:[0-9]\{1,\}:[0-9]\{1,\}\)/\1/'`";
+                     checked_devs[${#checked_devs[@]}]=`echo $line | awk '{print "/dev/"$2}'`;
+                     ddebug "   add ${checked_devs[${#checked_devs[@]}-1]}";
+                     WRP_HOST_ADAPTERS[${#WRP_HOST_ADAPTERS[@]}]="host${line%%:*}";
+                     WRP_LUNS[${#WRP_LUNS[@]}]=`echo $line | awk '{print $1}'`;
+                  fi
                   (( i++ ));
                done;
                (( --i ));
-- 
1.6.6.1


0031-mismatch-between-man-and-h-in-chshut.patch:
 getopt.c |   11 -----------
 sa.c     |    8 +++++---
 2 files changed, 5 insertions(+), 14 deletions(-)

--- NEW FILE 0031-mismatch-between-man-and-h-in-chshut.patch ---
>From 37e697ae95b3c03f962ac7bb2dd591f00b6de87b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Wed, 28 Apr 2010 10:24:41 +0200
Subject: [PATCH] mismatch between man and -h in chshut

Description: chshut: Mismatch between man and -h
Symptom:     Option -h stills show "panic" as a valid state.
Problem:     Although it should not be used it is possible to use the
	command with a "panic" state.
Solution:    Remove "panic" from the list of valid states.
	Provide an explanatory message in case it is used anyhow.
---
 ipl_tools/getopt.c |   11 -----------
 ipl_tools/sa.c     |    7 +++++--
 2 files changed, 5 insertions(+), 13 deletions(-)

diff --git a/ipl_tools/getopt.c b/ipl_tools/getopt.c
index abd0cc2..d729379 100644
--- a/ipl_tools/getopt.c
+++ b/ipl_tools/getopt.c
@@ -60,7 +60,6 @@ const char *const usage_sa =
 "  halt      System has been shut down (e.g. shutdown -h -H now)\n"
 "  poff      System has been shut down for power off (e.g. shutdown -h -P now)\n"
 "  reboot    System has been shut down for reboot (e.g. shutdown -r)\n"
-"  panic     System has been shut down after a kernel panic\n"
 "  Note: Depending on the distribution, \"halt\" might be mapped to \"poff\".\n"
 "\n"
 "ACTION specifies the action to be performed:\n"
@@ -638,16 +637,6 @@ void parse_shutdown_options(int argc, char **argv)
 					"/sys/firmware/vmcmd/on_reboot");
 			}
 			break;
-		case 3:
-			rc = strwrt(argv[2],
-				"/sys/firmware/shutdown_actions/on_panic");
-			if (action == 4 && rc == 0) {
-				/*rc = ustrwrt(argv[3],
-					"/sys/firmware/vmcmd/on_reboot"); */
-				rc = ustrwrt(argv[3],
-					"/sys/firmware/vmcmd/on_panic");
-			}
-			break;
 		}
 		if (rc != 0) {
 			fprintf(stderr, "%s: Failed to change shutdown"
diff --git a/ipl_tools/sa.c b/ipl_tools/sa.c
index 0232a47..d6b72bb 100644
--- a/ipl_tools/sa.c
+++ b/ipl_tools/sa.c
@@ -83,8 +83,11 @@ int is_valid_case(char *action)
 		rc = 1;
 	if (strncmp(action, "reboot", 6) >= 0 && length == 6)
 		rc = 2;
-	if (strncmp(action, "panic", 5) >= 0 && length == 5)
-		rc = 3;
+	if (strncmp(action, "panic", 5) >= 0 && length == 5) {
+		fprintf(stderr,	"%s: Please use \"service dumpconf\" for "
+			"configuring the panic action\n", name);
+		exit(1);
+	}
 	return rc;
 }
 
-- 
1.6.6.1


0032-lsdasd-update-man-page.patch:
 lsdasd.8 |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- NEW FILE 0032-lsdasd-update-man-page.patch ---
>From c3fc4200d7913b50fb8b501681a0f44e51833a81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Wed, 28 Apr 2010 20:57:17 +0200
Subject: [PATCH] lsdasd - update man page

Description: lsdasd: add missing description of option -b to man page
Symptom:     Option -b/--base is described in lsdasd --help, but not in
	the respective man page.
Problem:     Man page is missing the description.
Solution:    Add description.
---
 zconf/lsdasd.8 |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/zconf/lsdasd.8 b/zconf/lsdasd.8
index f37c957..9c13644 100644
--- a/zconf/lsdasd.8
+++ b/zconf/lsdasd.8
@@ -10,6 +10,7 @@ lsdasd \- list channel attached direct access storage devices (DASD).
 .TP 8
 .B lsdasd
 .RB [ -a ]
+.RB [ -b ]
 .RB [ -s ]
 .RB [ -v ]
 .RB [ -l ]
@@ -19,7 +20,7 @@ lsdasd \- list channel attached direct access storage devices (DASD).
 .RI [ <bus-ID> " [" <bus-ID> "] ...]]"
 
 .SH DESCRIPTION
-The lsdasd command provides an overview of available DASD devices. 
+The lsdasd command provides an overview of available DASD devices.
 
 .SH OPTIONS
 .TP 8
@@ -32,6 +33,9 @@ Supresses leading "0.0." for bus IDs.
 .BR -a | --offline
 Include all (offline) devices.
 .TP
+.BR -b | --base
+Include only base devices.
+.TP
 .BR -c | --compat
 Old output of lsdasd for compatibility.
 .TP
-- 
1.6.6.1


0033-reinitialize-array-in-lsqeth.patch:
 README       |    3 +++
 zconf/lsqeth |   19 ++++++++++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

--- NEW FILE 0033-reinitialize-array-in-lsqeth.patch ---
>From edd35870b833548853b4c739cee1a7c0bce1fa55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Mon, 3 May 2010 10:14:08 +0200
Subject: [PATCH] reinitialize array in lsqeth

Description: lsqeth: add clearing of print array for every qeth device
Symptom:     lsqeth without parameters displays information of all qeth
             devices. For layer2 devices information from a previously
             displayed layer3 device may show up.
Problem:     A structure used for printing is not cleared after
             information for the previous device is written.
Solution:    Add clearing of print array before collecting display
             information for a single qeth device..
---
 README       |    3 +++
 zconf/lsqeth |   18 ++++++++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/README b/README
index 7c75563..ffd5e54 100644
--- a/README
+++ b/README
@@ -253,6 +253,9 @@ Release History:
          Fix printing of vmcmd shutdown action: Also print CP commands that
          have more than one word.
 
+    - lsqeth:
+         * clear print array for every device displayed
+
     - all:
          Fixed a lot of build warnings and minor bugs.
 
diff --git a/zconf/lsqeth b/zconf/lsqeth
index b1c2809..19d49cd 100755
--- a/zconf/lsqeth
+++ b/zconf/lsqeth
@@ -168,6 +168,19 @@ fi
 }
 
 
+#
+# initialize format_array_print
+#
+function __init_format_array_print
+{
+	local k=0
+
+	while [ $k -lt ${#output_array[@]} ];
+	do
+		format_array_print[$k]=''
+		k=$((k+1))
+	done
+}
 
 #
 # search value in format_array
@@ -309,9 +322,9 @@ function __print_normal_format
 #
 function __layer2_print
 {
-	del_layer2=( route4 route6
+	del_layer2=( route4 route6 large_send
 		     fake_ll fake_broadcast
-		     sniffer )
+		     checksumming sniffer )
 
 	for l in ${del_layer2[@]}
  		do
@@ -358,6 +371,7 @@ fi
 #
 for k in ${device_list}
 	do
+	__init_format_array_print
 	if_name="`cat $device_dir/$k/if_name`"
 	if [ -z "$if_name" ]; then
 		if_name=0
-- 
1.6.6.1


0034-check-the-length-of-the-parameters-line.patch:
 include/zipl.h |    3 +++
 src/job.c      |    9 ++++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

--- NEW FILE 0034-check-the-length-of-the-parameters-line.patch ---
>From 78a9e00a3a9885298f09079c026bf5415c137cca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Thu, 20 May 2010 16:19:17 +0200
Subject: [PATCH] check the length of the parameters line

The value of the parameters variable in zipl.conf that is passed as to the kernel
into /proc/cmdline is silently truncated to 896 bytes (it matches the value of
BOOT_PARM_LENGTH from boot/menu.S). Thus we add a check into zipl and end with
an error if the line is longer.
---
 zipl/include/zipl.h |    3 +++
 zipl/src/job.c      |    8 ++++++++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/zipl/include/zipl.h b/zipl/include/zipl.h
index d2d26dd..5e02f13 100644
--- a/zipl/include/zipl.h
+++ b/zipl/include/zipl.h
@@ -40,6 +40,9 @@
 
 #define MAX_DUMP_VOLUMES		32
 
+/* defined in boot/menu.S as MENU_PARM_LENGTH */
+#define PARMLINE_LENGTH			896
+
 /* Internal component load address type */
 typedef uint64_t address_t;
 
diff --git a/zipl/src/job.c b/zipl/src/job.c
index a65e8c1..76ed5df 100644
--- a/zipl/src/job.c
+++ b/zipl/src/job.c
@@ -894,6 +894,14 @@ get_parmline(char* filename, char* line, char** parmline, address_t* address,
 			return -1;
 
 	} else result = NULL;
+	/* check the maximum possible length */
+	if (result) {
+		len = strlen(result);
+		if (len > PARMLINE_LENGTH) {
+			error_text("The length of parameters line (%d bytes) exceeds the allowed maximum (%d bytes)", len, PARMLINE_LENGTH);
+			return -1;
+		}
+	}
 	*parmline = result;
 	*address = addr;
 	return 0;
-- 
1.6.6.1


0035-ziorep-follow-symlink.patch:
 ziorep_config |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0035-ziorep-follow-symlink.patch ---
>From fabce87ca9d586e6da7ed0bd371f2102408c721c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Fri, 4 Jun 2010 12:05:19 +0200
Subject: [PATCH 35/36] ziorep - follow symlink

Description: ziomon: fix the execution of stat <file>  to follow symlinks.
Symptom:     The device mapper report is failing with a script error.
Solution:    Add parameter to stat <file> execution to follow symlinks.
---
 ziomon/ziorep_config |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/ziomon/ziorep_config b/ziomon/ziorep_config
index de60379..f2ad35c 100755
--- a/ziomon/ziorep_config
+++ b/ziomon/ziorep_config
@@ -159,7 +159,7 @@ sub get_mapper_devices
 			next;
 		}
 		my $tf = catfile($c_src, "$dev");
-		my $mm = `stat -c%t:%T $tf`;
+		my $mm = `stat -L -c%t:%T $tf`;
 		chomp($mm);
 		$mm = join(":", map { hex($_) } split(":", $mm));
 		$mapper_dev{$mm} = $dev;
-- 
1.6.6.1


0036-ts-shell-do-not-restrict-group-names-to-be-alphanume.patch:
 ts-shell.in |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0036-ts-shell-do-not-restrict-group-names-to-be-alphanume.patch ---
>From 379f76e4084a0d1875e1f98b2d975600639f6574 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Fri, 4 Jun 2010 12:06:38 +0200
Subject: [PATCH 36/36] ts-shell: do not restrict group names to be alphanumeric

Description: ts-shell: do not restrict group names to be alphanumeric
Symptom:     ts-shell does not add authorizations assigned to groups
		which contain non-alphanumeric characters, for instance,
		a hyphen (-) sign.
Problem:     ts-shell uses a regular expression to parse group names.
		This regular expression uses the alphanumeric character
		class (\w) to match group names.  Using group names like
		"ts-user" are ignored, because hyphen signs are not
		included in the alphanumeric character class.
Solution:    Make the regular expression less restrictive through
		permitting all characters that are not whitespaces (\S).
---
 iucvterm/bin/ts-shell.in |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/iucvterm/bin/ts-shell.in b/iucvterm/bin/ts-shell.in
index 654d0c6..5fdf66c 100755
--- a/iucvterm/bin/ts-shell.in
+++ b/iucvterm/bin/ts-shell.in
@@ -219,7 +219,7 @@ sub loadAuthorization(\%)
 			$authorized = 1;
 			log_debug "Found user: $key";
 
-		} elsif ($key =~ /^@(\w+)$/) {
+		} elsif ($key =~ /^@(\S+)$/) {
 			my $group = $1;
 			$authorized = 1 if grep {/^${group}$/} @{$cfg->{groups}};
 			log_debug "Found group: $key" if $authorized;
-- 
1.6.6.1


0037-znetconf-unknown-driver-for-qeth.patch:
 znetconf |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE 0037-znetconf-unknown-driver-for-qeth.patch ---
>From 41d606899d4029f8ac9f3415ebd21142cb223d70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Tue, 22 Jun 2010 13:25:32 +0200
Subject: [PATCH 37/40] znetconf: unknown driver for qeth

Description: znetconf: --drive|-d option returning "unknown driver" for qeth
Symptom:     qeth classified as unknown if specified for -d
Problem:     bash reg. expression interpretation changed in new bash versions
Solution:    used backward and "forward" compatible expression
---
 zconf/znetconf |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/zconf/znetconf b/zconf/znetconf
index 873124a..e1b48b3 100755
--- a/zconf/znetconf
+++ b/zconf/znetconf
@@ -1031,7 +1031,8 @@ function is_shortccwdevbusid_list()
 function is_supported_driver()
 {
 	local DRIVER="$1"
-	[[ "$DRIVER" =~ "^(qeth|lcs|ctc|ctcm)$" ]]
+	local DRVEXPR='^(qeth|lcs|ctc|ctcm)$'
+	[[ "$DRIVER" =~ $DRVEXPR ]]
 	case $? in
 		0)
 			return 0
-- 
1.6.6.1


0038-cpuplugd-fix-stack-overflow.patch:
 daemon.c |    2 +-
 main.c   |    1 +
 mem.c    |    4 ++--
 vmstat.c |    5 ++---
 4 files changed, 6 insertions(+), 6 deletions(-)

--- NEW FILE 0038-cpuplugd-fix-stack-overflow.patch ---
>From b0192c18160e5ea35889794895becab99890bca3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Tue, 22 Jun 2010 13:27:27 +0200
Subject: [PATCH 38/40] cpuplugd: fix stack overflow

Description: cpuplugd: fix stack overwrite
Symptom:     cpuplugd will terminate with "stack smashing" error on systems
	with more than 30 CPUs.
Problem:     NULL termination of a read buffer will write beyond the buffer
	if a previous read() filled out the whole buffer.
Solution:    Only read max. buffer size - 1 bytes.
---
 cpuplugd/daemon.c |    2 +-
 cpuplugd/main.c   |    1 +
 cpuplugd/mem.c    |    4 ++--
 cpuplugd/vmstat.c |    4 ++--
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/cpuplugd/daemon.c b/cpuplugd/daemon.c
index f1af263..391acba 100644
--- a/cpuplugd/daemon.c
+++ b/cpuplugd/daemon.c
@@ -287,7 +287,7 @@ int check_lpar()
 				, strerror(errno));
 		clean_up();
 	}
-	bytes_read = fread(buffer, 1, sizeof(buffer), filp);
+	bytes_read = fread(buffer, 1, sizeof(buffer) - 1, filp);
 	if (bytes_read == 0) {
 		fprintf(stderr, "Reading /proc/cpuinfo failed:");
 		fprintf(stderr, "%s\n", strerror(errno));
diff --git a/cpuplugd/main.c b/cpuplugd/main.c
index c280342..f8f9dfa 100644
--- a/cpuplugd/main.c
+++ b/cpuplugd/main.c
@@ -347,6 +347,7 @@ int main(int argc, char *argv[])
 			syslog(LOG_INFO, "Out of memory: Aborting.\n");
 		clean_up();
 	}
+	memset(vs, 0, sizeof(struct vmstat));
 	/*
 	* If the thread routine requires multiple arguments, they must be
 	* passed bundled up in an array or a structure
diff --git a/cpuplugd/mem.c b/cpuplugd/mem.c
index 8d5f05f..13f902d 100644
--- a/cpuplugd/mem.c
+++ b/cpuplugd/mem.c
@@ -70,7 +70,7 @@ int get_vmstats(struct vm_info *v)
 		rc = -1;
 		goto out;
 	}
-	bytes_read = fread(buffer, 1, sizeof(buffer), filp);
+	bytes_read = fread(buffer, 1, sizeof(buffer) - 1, filp);
 	/*
 	 * Bail if read failed or the buffer isn't big enough
 	 */
@@ -314,7 +314,7 @@ int get_free_memsize()
 			       ":%s\n", strerror(errno));
 		clean_up();
 	}
-	bytes_read = fread(buffer, 1, sizeof(buffer), filp);
+	bytes_read = fread(buffer, 1, sizeof(buffer) - 1, filp);
 	/*
 	 * Bail if read failed or the buffer isn't big enough
 	 */
diff --git a/cpuplugd/vmstat.c b/cpuplugd/vmstat.c
index 8428cce..d5a0036 100644
--- a/cpuplugd/vmstat.c
+++ b/cpuplugd/vmstat.c
@@ -76,7 +76,7 @@ void get_cpu_stats(struct cpustat *s)
 			syslog(LOG_ERR, "Can not open /proc/stat"
 			       ":%s\n", strerror(errno));
 	} else {
-		bytes_read = fread(buffer, 1, sizeof(buffer), filp);
+		bytes_read = fread(buffer, 1, sizeof(buffer) - 1, filp);
 		fclose(filp);
 		/*
 		 * Bail if read failed or the buffer isn't big enough
@@ -118,7 +118,7 @@ void get_cpu_stats(struct cpustat *s)
 			 * softirq: servicing softirqs
 			 * steal: the cpu time spent in involuntary wait
 			 */
-			sscanf(match, "cpu  %du %du %du %du %du %du %du %du",
+			sscanf(match, "cpu  %d %d %d %d %d %d %d %d",
 					&s->cpu_user,
 					&s->cpu_nice,
 					&s->cpu_sys,
-- 
1.6.6.1


0039-cpuplugd-fix-cmm-limits-checks.patch:
 main.c |   55 +++++++++++++++----------------------------------------
 1 file changed, 15 insertions(+), 40 deletions(-)

--- NEW FILE 0039-cpuplugd-fix-cmm-limits-checks.patch ---
>From 664177c0fe57f671ad0d1eeed18374d77233d4b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Tue, 22 Jun 2010 13:28:45 +0200
Subject: [PATCH 39/40] cpuplugd: fix cmm limits checks

Description: cpuplugd: fix cmm_min/max limit checks.
Symptom:     The cmm_min and cmm_max limits are not enforced correctly
		when starting the daemon without the -V option, or when
		cmm_pages is set manually below or above the limits.
Problem:     Part of the cmm_min/max checks is only done when -V option
		is specified. Values above/below the max/min limits are also
		not identified correctly.
Solution:    Make checks independent from -V option and check for cmm_pages
		values beyond the limit.
---
 cpuplugd/main.c |   54 +++++++++++++++---------------------------------------
 1 files changed, 15 insertions(+), 39 deletions(-)

diff --git a/cpuplugd/main.c b/cpuplugd/main.c
index f8f9dfa..3738a5f 100644
--- a/cpuplugd/main.c
+++ b/cpuplugd/main.c
@@ -226,26 +226,6 @@ void eval_mem_rules(struct config *cfg)
 	}
 	/* Evaluate the memunplug rule. */
 	if (cfg->memunplug && eval_term(cfg->memunplug, &symbols)) {
-		/*
-		 * case where cmm has asynchronously increased
-		 * cmm_pages after cpuplugd reset it to cmm_max
-		 * at cpuplugd startup.
-		 *
-		 */
-		if (cmmpages_size > cfg->cmm_max) {
-			if (debug) {
-				if (foreground == 1)
-					printf("Found cmm_pages above Limit. "
-					       "Resetting value to %d\n"
-					       , cfg->cmm_max);
-				if (foreground == 0)
-					syslog(LOG_INFO, "Found cmm_pages above"
-						"Limit. Resetting value to %d\n"
-					       , cfg->cmm_max);
-			}
-			set_cmm_pages(cfg->cmm_max);
-			return;
-		}
 		/* check memory limit */
 		if (cmmpages_size + cfg->cmm_inc > cfg->cmm_max) {
 			if (debug) {
@@ -256,18 +236,16 @@ void eval_mem_rules(struct config *cfg)
 					syslog(LOG_INFO, "maximum memory"
 					       " limit is reached\n");
 			}
-			if (cmmpages_size < cfg->cmm_max) {
-				/* if the next increment would exceed
-				 * the maximum we advance to the
-				 * maximum
-				 */
+			/* if the next increment would exceed
+			 * the maximum we advance to the
+			 * maximum
+			 */
+			if (cmmpages_size != cfg->cmm_max)
 				set_cmm_pages(cfg->cmm_max);
-				return;
-			}
-		} else {
-			 memunplug(cfg->cmm_inc);
 			return;
 		}
+		memunplug(cfg->cmm_inc);
+		return;
 	}
 	/* Evaluate the memplug rule. */
 	if (cfg->memplug && eval_term(cfg->memplug, &symbols)) {
@@ -280,19 +258,17 @@ void eval_mem_rules(struct config *cfg)
 				if (foreground == 0)
 					syslog(LOG_INFO, "minimum memory"
 					       " limit is reached\n");
-				if (cmmpages_size > cfg->cmm_min) {
-					/* if the next increment would exceed
-					 * the minimum we advance to the
-					 * minimum
-					 */
-					set_cmm_pages(cfg->cmm_min);
-					return;
-				}
 			}
-		} else {
-			memplug(cfg->cmm_inc);
+			/* if the next increment would exceed
+			 * the minimum we advance to the
+			 * minimum
+			 */
+			if (cmmpages_size != cfg->cmm_min)
+				set_cmm_pages(cfg->cmm_min);
 			return;
 		}
+		memplug(cfg->cmm_inc);
+		return;
 	}
 }
 
-- 
1.6.6.1


0040-cpuplugd-set-cpu_min-to-1-by-default.patch:
 cpuplugd |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

--- NEW FILE 0040-cpuplugd-set-cpu_min-to-1-by-default.patch ---
>From 4a2b6aa7b2a873be78c27d2abe010cd7e73d9640 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Tue, 22 Jun 2010 13:33:36 +0200
Subject: [PATCH 40/40] cpuplugd: set cpu_min to 1 by default

Description: cpuplugd: set cpu_min to 1 by default.
Symptom:     With a cpu_min default value of 2, the "cpu ping pong" effect
		may still be visible with low system load, i.e. expensive cpu
		signaling may occur if the workload is spread on 2 under-worked
		cpus.
Problem:     The default value for cpu_min is 2.
Solution:    Set the default value of cpu_min to 1.
---
 etc/sysconfig/cpuplugd |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/etc/sysconfig/cpuplugd b/etc/sysconfig/cpuplugd
index c807232..efafa20 100644
--- a/etc/sysconfig/cpuplugd
+++ b/etc/sysconfig/cpuplugd
@@ -6,13 +6,11 @@
 # It does not contain shell environment variables.
 
 ## Type:	integer
-## Default:	2
+## Default:	1
 #
 # The minimum number of cpus. 
-# This means in this example, that every time at least two cpus 
-# will be available
 #
-CPU_MIN="2"
+CPU_MIN="1"
 
 ## Type:	integer
 ## Default:	2
-- 
1.6.6.1


0041-fix-dates-option-on-zfcpdbf.patch:
 zfcpdbf |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

--- NEW FILE 0041-fix-dates-option-on-zfcpdbf.patch ---
>From e30dc240e7417b83957507f1da6b34c31f18afb5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan at danny.cz>
Date: Tue, 29 Jun 2010 22:23:50 +0200
Subject: [PATCH] fix --dates option on zfcpdbf

Description: zfcpdbf: Fix --dates option
Symptom:     Running zfcpdbf with the option --dates returns "Unknown
             option: dates".
Problem:     The code expects --date, not the documented --dates option.
Solution:    Change zfcpdbf to expect --dates, as documented in the
             man page and in the usage information.
---
 scripts/zfcpdbf |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/zfcpdbf b/scripts/zfcpdbf
index 3693d71..0b75c43 100755
--- a/scripts/zfcpdbf
+++ b/scripts/zfcpdbf
@@ -139,7 +139,7 @@ GetOptions(
 	'V|verbose'	=> \$OPT_VERBOSE,
 	'h|help'	=> \$OPT_HELP,
 	'v|version'	=> \$OPT_VERSION,
-	'D|date=s'	=> \$OPT_DATE,
+	'D|dates=s'	=> \$OPT_DATE,
 	's|singleline'	=> \$OPT_SINGLELINE
 ) or print_usage();
 
@@ -555,7 +555,7 @@ sub print_san {
 
 #
 # Converts the Unix time to localtime an returns it 
-# depending on the --date option.
+# depending on the --dates option.
 #
 # \param	UNIX Timestamp to convert
 # \return 	Formated Localtime
-- 
1.6.6.1



--- NEW FILE ccw.udev ---
ACTION!="add|change", GOTO="ccw_end"
SUBSYSTEM!="ccw", GOTO="ccw_end"
SYSFS{cutype}=="1731/01", RUN+="ccw_init"
SYSFS{cutype}=="1731/05", RUN+="ccw_init"
SYSFS{cutype}=="1731/06", RUN+="ccw_init"
SYSFS{cutype}=="3088/01", RUN+="ccw_init"
SYSFS{cutype}=="3088/08", RUN+="ccw_init"
SYSFS{cutype}=="3088/60", RUN+="ccw_init"
SYSFS{cutype}=="3088/61", RUN+="ccw_init"
SYSFS{cutype}=="3088/1E", RUN+="ccw_init"
SYSFS{cutype}=="3088/1F", RUN+="ccw_init"
LABEL="ccw_end"


--- NEW FILE ccw_init ---
#! /bin/sh

[ -z "$DEVPATH" ] && exit 0
[ "$SUBSYSTEM" != "ccw" ] && exit 0

[ -e /etc/ccw.conf ] && MODE="dracut" || MODE="normal"
OLD_IFS="$IFS"

get_config_line_by_subchannel()
{
    local CHANNEL
    CHANNEL="$1"
    while read line; do
        IFS=","
        set $line
	IFS="$OLD_IFS"
        for i in $@; do
            if [ "$CHANNEL" = "$i" ]; then
                echo $line
                return 0
             fi
        done
    done < /etc/ccw.conf
    return 1
}

CHANNEL=${DEVPATH##*/}

if [ $MODE = "dracut" ]; then
    CONFIG_LINE=$(get_config_line_by_subchannel $CHANNEL)

    [ $? -ne 0 -o -z "$CONFIG_LINE" ] && break

    IFS=","
    set $CONFIG_LINE
    IFS="$OLD_IFS"
    NETTYPE=$1
    shift
    SUBCHANNELS="$1"
    OPTIONS=""
    shift
    while [ $# -gt 0 ]; do
        case $1 in
            *=*) OPTIONS="$OPTIONS $1";;
            [0-9]*) SUBCHANNELS="$SUBCHANNELS,$1";;
        esac
        shift
    done
elif [ $MODE = "normal" ]; then
    NOLOCALE="yes"

    . /etc/sysconfig/network-scripts/network-functions

    CONFIG_FILE=$(get_config_by_subchannel $CHANNEL)

    if [ -n "$CONFIG_FILE" ]; then
	. $CONFIG_FILE
    else
	exit 1
    fi
else
    echo "Unknown mode=$MODE"
    exit 1
fi


# now we have extracted these variables from the config files:
# SUBCHANNELS
# OPTIONS

# put LAYER2 option into its own variable
set $OPTIONS
OPTIONS=""
while [ $# -gt 0 ]; do
    case $1 in
        layer2=*) LAYER2=${1##layer2=};;
        *=*) OPTIONS="$OPTIONS $1";;
    esac
    shift
done

# translate variables from the interface config files to OPTIONS
if [ -n "$PORTNAME" ]; then
        if [ "$NETTYPE" = "lcs" ]; then
		OPTIONS="$OPTIONS portno=$PORTNAME"
        else
		OPTIONS="$OPTIONS portname=$PORTNAME"
        fi
fi
if [ "$NETTYPE" = "ctc" -a -n "$CTCPROT" ]; then
	OPTIONS="$OPTIONS protocol=$CTCPROTO"
fi

# SUBCHANNELS is only set on mainframe ccwgroup devices
[ -z "$SUBCHANNELS" -o -z "$NETTYPE" ] && exit 0
if [ "$NETTYPE" = "ctc" ]; then
    DIR="/sys/bus/ccwgroup/drivers/ctcm"
else
    DIR="/sys/bus/ccwgroup/drivers/$NETTYPE"
fi

i=0
while [ $i -lt 20 ]; do
    [ -e $DIR ] && break
    sleep 0.1
    i=$(($i+1))
done

# driver missing or not loaded
[ ! -e $DIR ] && exit 0

IFS=","
set $SUBCHANNELS
IFS="$OLD_IFS"
CHANNEL1=$1
CHANNEL2=$2
SYSDIR="$DIR/$CHANNEL1"

[ -e $SYSDIR ] && exit 0

# check if the interface is already online
if [ -e $SYSDIR/online ]; then
    read on <$SYSDIR/online
    [ "$on" = "1" ] && exit 0
fi

DRIVER=$(readlink $DEVPATH/driver)
DRIVER=${DRIVER##*/}
if [ "$DRIVER" = "lcs" -a "$NETTYPE" = "ctc" ]; then
    echo "$CHANNEL" > /sys/bus/ccw/drivers/lcs/unbind
    echo "$CHANNEL" > /sys/bus/ccw/drivers/ctcm/bind
    echo "$CHANNEL2" > /sys/bus/ccw/drivers/lcs/unbind
    echo "$CHANNEL2" > /sys/bus/ccw/drivers/ctcm/bind
fi
if [ "$DRIVER" = "ctcm" -a "$NETTYPE" = "lcs" ]; then
    echo "$CHANNEL" > /sys/bus/ccw/drivers/ctcm/unbind
    echo "$CHANNEL" > /sys/bus/ccw/drivers/lcs/bind
    echo "$CHANNEL2" > /sys/bus/ccw/drivers/ctcm/unbind
    echo "$CHANNEL2" > /sys/bus/ccw/drivers/lcs/bind
fi

if [ ! -e $SYSDIR ]; then
    echo "$SUBCHANNELS" > $DIR/group
    i=0
    while [ $i -lt 20 ]; do
        [ -e $SYSDIR ] && break
        sleep 0.1
        i=$(($i+1))
    done

    [ ! -e $SYSDIR ] && exit 1
fi

# check if the interface is already online
if [ -e $SYSDIR/online ]; then
    read on <$SYSDIR/online
    [ "$on" = "1" ] && exit 0
fi

# first set layer2, other options may depend on it
[ -n "$LAYER2" ] && echo $LAYER2 > $SYSDIR/layer2

if [ -n "$OPTIONS" ]; then
    for i in $OPTIONS; do
	OPT=${i%%=*}
	VAL=${i##*=}
	if [ -e "$SYSDIR/$OPT" ]; then
    	    echo "$VAL" > "$SYSDIR/$OPT" || \
            echo "Could not set value \"$VAL\" for OPTION \"$OPT\" with SUBCHANNELS \"$SUBCHANNELS\""
        else
    	    echo "OPTION \"$OPT\" does not exist for SUBCHANNELS \"$SUBCHANNELS\""
        fi
    done
fi

[ -e $SYSDIR/online ] && echo 1 > $SYSDIR/online


--- NEW FILE cpuplugd.initd ---
#! /bin/sh
#
# chkconfig: 2345 90 10
# description: Start the cpu hotplug daemon for Linux on System z
# processname: cpuplugd
# config: /etc/sysconfig/cpuplugd
# pidfile: /var/run/cpuplugd.pid

### BEGIN INIT INFO
# Provides: cpuplugd
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start the cpu hotplug daemon for Linux on System z
# Description: Starts the cpuplugd. It uses the configuration
#              file /etc/sysconfig/cpuplugd
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

exec="/usr/sbin/cpuplugd"
prog="cpuplugd"
config="/etc/sysconfig/cpuplugd"

lockfile=/var/lock/subsys/$prog

start() {
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    [ `id -u` -eq 0 ] || exit 4
    echo -n $"Starting $prog: "
    daemon $exec -c $config
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    [ `id -u` -eq 0 ] || exit 4
    echo -n $"Stopping $prog: "
    killproc $exec
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    #
    # We have to wait 2-3 seconds here. When the daemon is stopped it takes
    # the time we sleep to reactivate cpus. If we restart to fast and
    # cpuplugd wasn't able to restore some settings we may get a undesired
    # online cpu count after cpuplugd shutdown
    #
    sleep 4
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
#    status -l $prog $exec
    status $exec
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?


--- NEW FILE device_cio_free.conf ---
#
# free all devices on startup
#

start on starting rcS

task

console output

exec /sbin/device_cio_free


--- NEW FILE mon_statd.initd ---
#! /bin/sh
#
# chkconfig: 2345 90 10
# description: Configure the mon_fsstatd and mon_procd daemons.

### BEGIN INIT INFO
# Provides: mon_statd
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Configure the mon_fsstatd and mon_procd daemons.
# Description: Configures the mon_fsstatd and mon_procd daemons. It uses the
#              configuration file /etc/sysconfig/mon_statd.
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

exec_fsstat="/usr/sbin/mon_fsstatd"
prog_fsstat="mon_fsstatd"
exec_proc="/usr/sbin/mon_procd"
prog_proc="mon_procd"

config="/etc/sysconfig/mon_statd"
g_retval=0

lockfile_fsstat=/var/lock/subsys/$prog_fsstat
lockfile_proc=/var/lock/subsys/$prog_proc

[ -e $config ] && . $config || exit 6

load_kernel_module()
{
    if [ ! -e /dev/monwriter ]; then
        echo "Loading monwriter module..."
        modprobe monwriter 2>&1
        if [ $? -ne 0 ]; then
            exit 1
        fi
        udevsettle
        if [ $? -ne 0 ]; then
            exit 1
        fi
    fi
}

start_fsstat() {
    [ `id -u` -eq 0 ] || exit 4
    load_kernel_module
    [ -x $exec_fsstat ] || exit 5
    echo -n $"Starting $prog_fsstat: "
    daemon $exec_fsstat -i $FSSTAT_INTERVAL
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile_fsstat
    return $retval
}

start_proc() {
    [ `id -u` -eq 0 ] || exit 4
    load_kernel_module
    [ -x $exec_proc ] || exit 5
    echo -n $"Starting $prog_proc: "
    daemon $exec_proc -i $PROC_INTERVAL
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile_proc
    return $retval
}

stop_fsstat() {
    [ `id -u` -eq 0 ] || exit 4
    echo -n $"Stopping $prog_fsstat: "
    killproc $exec_fsstat
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile_fsstat
    return $retval
}

stop_proc() {
    [ `id -u` -eq 0 ] || exit 4
    echo -n $"Stopping $prog_proc: "
    killproc $exec_proc
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile_proc
    return $retval
}

restart_fsstat() {
    stop_fsstat
    start_fsstat
}

restart_proc() {
    stop_proc
    start_proc
}

reload_fsstat() {
    restart_fsstat
}

reload_proc() {
    restart_proc
}

force_reload_fsstat() {
    restart_fsstat
}

force_reload_proc() {
    restart_proc
}

rh_status_fsstat() {
    # run checks to determine if the service is running or use generic status
    status $exec_fsstat
}

rh_status_proc() {
    # run checks to determine if the service is running or use generic status
    status $exec_proc
}

rh_status_fsstat_q() {
    rh_status_fsstat >/dev/null 2>&1
}

rh_status_proc_q() {
    rh_status_proc >/dev/null 2>&1
}


case "$1" in
    start)
	[ $FSSTAT = "yes" ] && { rh_status_fsstat_q || { start_fsstat ; g_retval=$? ; } || { g_retval=0 ; } }
	[ $PROC = "yes" ]   && { rh_status_proc_q || { start_proc ; g_retval=$? ; } || { g_retval=0 ; } }
        ;;
    stop)
	[ $FSSTAT = "yes" ] && { rh_status_fsstat_q && { stop_fsstat ; g_retval=$? ; } || { g_retval=0 ; } }
	[ $PROC = "yes" ]   && { rh_status_proc_q && { stop_proc ; g_retval=$? ; } || { g_retval=0 ; } }
        ;;
    restart)
        [ $FSSTAT = "yes" ] && { restart_fsstat ; g_retval=$? ; }
        [ $PROC = "yes" ]   && { restart_proc ; g_retval=$? ; }
        ;;
    reload)
	[ $FSSTAT = "yes" ] && { rh_status_fsstat_q && { reload_fsstat ; g_retval=$? ; } || { g_retval=7 ; } }
	[ $PROC = "yes" ]   && { rh_status_proc_q && { reload_proc ; g_retval=$? ; } || { g_retval=7 ; } }
        ;;
    force-reload)
        [ $FSSTAT = "yes" ] && { force_reload_fsstat ; g_retval=$? ; }
        [ $PROC = "yes" ]   && { force_reload_proc ; g_retval=$? ; }
        ;;
    status)
        [ $FSSTAT = "yes" ] && { rh_status_fsstat ; g_retval=$? ; }
        [ $PROC = "yes" ]   && { rh_status_proc ; g_retval=$? ; }
        ;;
    condrestart|try-restart)
	[ $FSSTAT = "yes" ] && { rh_status_fsstat_q && { restart_fsstat ; g_retval=$? ; } || { g_retval=0 ; } }
	[ $PROC = "yes" ]   && { rh_status_proc_q && { restart_proc ; g_retval=$? ; } || { g_retval=0 ; } }
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $g_retval


Index: cpi.initd
===================================================================
RCS file: /cvs/pkgs/rpms/s390utils/devel/cpi.initd,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- cpi.initd	22 Dec 2009 11:24:25 -0000	1.2
+++ cpi.initd	7 Jul 2010 13:42:33 -0000	1.3
@@ -8,7 +8,7 @@
 #
 # chkconfig:   12345 80 20
 # description: Set Control Program Identification on IBM zSeries \
-#              that's reported from Linux guest to a LPAR or z/VM
+#              that's reported on a Linux LPAR
 
 ### BEGIN INIT INFO
 # Provides: cpi
@@ -20,7 +20,7 @@
 # Default-Stop: 0 6
 # Short-Description: Set control program identification on IBM zSeries
 # Description: Set Control Program Identification on IBM zSeries \
-#              that's reported from Linux guest to a LPAR or z/VM
+#              that's reported on a Linux LPAR
 ### END INIT INFO
 
 # Source function library.


Index: dasdconf.sh
===================================================================
RCS file: /cvs/pkgs/rpms/s390utils/devel/dasdconf.sh,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- dasdconf.sh	12 Nov 2009 14:42:40 -0000	1.1
+++ dasdconf.sh	7 Jul 2010 13:42:33 -0000	1.2
@@ -14,7 +14,7 @@
 CHANNEL=${DEVPATH##*/}
 
 CONFIG=/etc/dasd.conf
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
+PATH=/sbin:/bin
 export PATH
 
 warn() {
@@ -27,7 +27,7 @@ if [ -f "$CONFIG" ]; then
 	#warn "No dasd-eckd or dasd-eckd loaded"
         exit 0
     fi
-    tr "A-Z" "a-z" < $CONFIG | while read line; do
+    sed 'y/ABCDEF/abcdef/' < $CONFIG | while read line; do
         case $line in
             \#*) ;;
             *)


Index: device_cio_free
===================================================================
RCS file: /cvs/pkgs/rpms/s390utils/devel/device_cio_free,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -p -r1.4 -r1.5
--- device_cio_free	13 Jan 2010 08:53:00 -0000	1.4
+++ device_cio_free	7 Jul 2010 13:42:33 -0000	1.5
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2009 Red Hat, Inc.
+# Copyright 2009, 2010 Red Hat, Inc.
 # License: GPLv2
 # Author: Dan Horák <dhorak at redhat.com>
 #
@@ -14,53 +14,67 @@
 #
 # also processes the system ccw config file and network interface configurations
 #
+# requires: echo, sleep, modprobe, grep, printf, sed.
+#
+# it is used in
+#   anaconda
+#   dracut generated initramfs
+#   normal system startup driven by upstart
+#
 
 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=
+PATH=/bin:/sbin
+DEVICE=			# list of devices given on command line
+ALL_DEVICES=		# list of all unblocked devices
 WAITING_TIMEOUT=60	# maximum time to wait for all devices to appear
 WAITING_TOTAL=0		# actual time spent waiting for devices
 
 usage()
 {
-    echo "Usage: $CMD [-h|--help] [-V|--verbose]"
+    echo "Usage: $CMD [-h|--help] [-V|--verbose] [-d|--device <deviceid>]"
+    echo "    -h|--help                 print this message"
+    echo "    -V|--verbose              be verbose"
+    echo "    -d|--device <deviceid>    unblock and wait for specified device"
     exit 1
 }
 
 # accepts single device, comma-separated lists and dash separated ranges and their combinations
+# the comma separated list is split so we minimize the effect of unsuccessful freeing
 free_device()
 {
-    local DEV
+    local DEV DEV_LIST
 
     [ -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
+    DEV_LIST=$(echo "$1" | sed 'y/ABCDEF/abcdef/' | sed 's/,/ /g')
+
+    for DEV in $DEV_LIST; do
+        [ $VERBOSE ] && echo "Freeing device(s) $DEV"
+        if ! echo "free $DEV" > $BLACKLIST 2> /dev/null ; then
+    	    echo "Error: can't free device(s) $DEV"
 	else
-	    ALL_DEVICES="$ALL_DEVICES,$DEV"
+	    if [ -z $ALL_DEVICES ]; then
+		ALL_DEVICES="$DEV"
+	    else
+		ALL_DEVICES="$ALL_DEVICES,$DEV"
+	    fi
 	fi
-    fi
+    done
 }
 
 # wait until a device appears on the ccw bus
-wait_on_device()
+wait_on_single_device()
 {
     local DEVICE_ONLINE DEV
     
     [ -z "$1" ] && return
     
-    DEV=$1
-    DEVICE_ONLINE=/sys/bus/ccw/devices/$DEV/online
+    DEV="$1"
+    DEVICE_ONLINE="/sys/bus/ccw/devices/$DEV/online"
 
     [ $VERBOSE ] && echo "Waiting on device $DEV"
     [ -f "$DEVICE_ONLINE" ] && return
@@ -79,20 +93,107 @@ wait_on_device()
     echo "Error: device $DEV still not ready"
 }
 
+# wait until recently unblocked devices are ready
+# at this point we know the content of ALL_DEVICES is syntacticly correct
+wait_on_devices()
+{
+    OLD_IFS=$IFS
+    IFS=","
+    set $ALL_DEVICES
+    for DEV in $*
+    do
+        IFS="."
+
+        # get the lower bound for range or get the single device
+        LOWER=${DEV%%-*}
+	set $LOWER
+        if [ $# -eq 1 ]; then
+	    L0=0
+	    L1=0
+	    L2=$(printf "%d" "0x$1")
+        else
+	    L0=$(printf "%d" "0x$1")
+	    L1=$(printf "%d" "0x$2")
+	    L2=$(printf "%d" "0x$3")
+        fi
+
+        # get the upper bound for range or get the single device
+        UPPER=${DEV##*-}
+        set $UPPER
+        if [ $# -eq 1 ]; then
+	    U0=0
+	    U1=0
+	    U2=$(printf "%d" "0x$1")
+        else
+	    U0=$(printf "%d" "0x$1")
+	    U1=$(printf "%d" "0x$2")
+	    U2=$(printf "%d" "0x$3")
+        fi
+
+        IFS=$OLD_IFS
+
+        # iterate thru all devices
+	i=$L0
+	while [ $i -le $U0 ]; do
+            [ $i -eq $L0 ] && LJ=$L1 || LJ=0
+            [ $i -eq $U0 ] && UJ=$U1 || UJ=3
+
+	    j=$LJ
+	    while [ $j -le $UJ ]; do
+                [ $i -eq $L0 -a $j -eq $L1 ] && LK=$L2 || LK=0
+                [ $i -eq $U0 -a $j -eq $U1 ] && UK=$U2 || UK=65535
+
+		k=$LK
+		while [ $k -le $UK ]; do
+                    wait_on_single_device "$(printf %x.%x.%04x $i $j $k)"
+		    k=$(($k + 1))
+                done
+		j=$(($j + 1))
+            done
+	    i=$(($i + 1))
+        done
+    done
+}
+
+process_config_file()
+{
+    local CONFIG
+
+    [ -z "$1" ] && return
+    
+    CONFIG="$1"
+    if [ -f "$CONFIG" ]; then
+        while read line; do
+	    case $line in
+		\#*) ;;
+		*)
+		    [ -z "$line" ] && continue
+		    set $line
+		    free_device $1
+		    ;;
+	    esac
+	done < "$CONFIG"
+    fi
+}
+
 # check how we were called
-CMD=$(basename "$0")
+CMD=${0##*/}
+DIR=${0%/*}
+ARGS=$@
 case $CMD in
     "dasd_cio_free")
-	CONFIG=$DASDCONFIG
-	MODE=dasd
+	MODE_DASD="yes"
 	;;
     "zfcp_cio_free")
-	CONFIG=$ZFCPCONFIG
-	MODE=zfcp
+	MODE_ZFCP="yes"
 	;;
     "znet_cio_free")
-	CONFIG=$ZNETCONFIG
-	MODE=znet
+	MODE_ZNET="yes"
+	;;
+    "device_cio_free")
+	MODE_DASD="yes"
+	MODE_ZFCP="yes"
+	MODE_ZNET="yes"
 	;;
     *)
 	echo "Error: unknown alias '$CMD'."
@@ -102,126 +203,103 @@ case $CMD in
 esac
 
 # process command line options
-if [ $# -gt 0 ]; then
+while [ $# -gt 0 ]; do
     case $1 in
 	-V|--verbose)
 	    VERBOSE=yes
-	    shift
 	    ;;
 	-h|--help)
 	    usage
 	    ;;
+	-d|--device)
+	    shift
+	    if [ "$1" ]; then
+		if [ "$DEVICE" ]; then
+		    DEVICE="$DEVICE,$1"
+		else
+		    DEVICE=$1
+		fi
+	    else
+		echo "Error: no device given"
+		usage
+	    fi
+	    ;;
 	*)
 	    echo "Error: unknown option $1"
 	    usage
 	    ;;
     esac
-fi
+    shift
+done
 
 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
+if [ "$DEVICE" ]; then
+    [ $VERBOSE ] && echo "Freeing specific devices"
+    free_device $DEVICE
+    wait_on_devices
+    exit 0
+fi
+
+if [ $VERBOSE ]; then
+    echo -n "Freeing devices:"
+    [ $MODE_DASD ] && echo -n " dasd"
+    [ $MODE_ZFCP ] && echo -n " zfcp"
+    [ $MODE_ZNET ] && echo -n " znet"
+    echo
 fi
 
-if [ $MODE = "dasd" ]; then
+[ $MODE_DASD ] && process_config_file $DASDCONFIG
+[ $MODE_ZFCP ] && process_config_file $ZFCPCONFIG
+
+if [ $MODE_DASD ]; then
     # process the device list defined as option for the dasd module
-    DEVICES=$(modprobe --showconfig | grep "options[[:space:]]\+dasd_mod" | \
+    DEVICES=$(modprobe --showconfig | LANG=C 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/,$//')
 
-    for DEVRANGE in $(echo $DEVICES | tr ',' ' '); do
+    for DEVRANGE in $(echo $DEVICES | sed 's/,/ /g'); do
 	free_device $DEVRANGE
     done
 fi
 
-if [ $MODE = "znet" ]; then
+if [ $MODE_ZNET ]; then
     # process the config file
-    if [ -f "$CONFIG" ]; then
+    if [ -f "$ZNETCONFIG" ]; then
         while read line; do
 	    case $line in
 		\#*) ;;
 		*)
 		    [ -z "$line" ] && continue
-		    # grep 2 or 3 channels from beginning of each line
-		    DEVICES=$(echo $line | grep -E -i -o "^([0-9]\.[0-9]\.[a-f0-9]+,){1,2}([0-9]\.[0-9]\.[a-f0-9]+)")
+		    # grep 2 or 3 channels from each "<nettype>,<subchannels>,<options>" line
+		    DEVICES=$(echo $line | LANG=C grep -E -i -o "([0-9]\.[0-9]\.[a-f0-9]+,){1,2}([0-9]\.[0-9]\.[a-f0-9]+)")
 		    free_device $DEVICES
 		    ;;
 	    esac
-	done < $CONFIG
+	done < "$ZNETCONFIG"
     fi
     # process channels from network interface configurations
-    for line in $(grep -E -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)
+    if [ -z "$__sed_discard_ignored_files" ]; then
+	if [ -f /etc/init.d/functions ]; then
+	    . /etc/init.d/functions
+	else
+	    # default value copied from initscripts 9.03.10
+	    __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
+	fi
+    fi
+    for line in $(LANG=C grep -E -i -h \
+	"^[[:space:]]*SUBCHANNELS=['\"]?([0-9]\.[0-9]\.[a-f0-9]+,){1,2}([0-9]\.[0-9]\.[a-f0-9]+)['\"]?([[:space:]]+#|[[:space:]]*$)" \
+	 $( (ls /etc/sysconfig/network-scripts/ifcfg-* 2> /dev/null || echo "__no_config_file") | \
+	LC_ALL=C sed -e "$__sed_discard_ignored_files") 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
-OLD_IFS=$IFS
-IFS=","
-set $ALL_DEVICES
-for DEV in $*
-do
-    IFS="."
-
-    # get the lower bound for range or get the single device
-    LOWER=${DEV%%-*}
-    set $LOWER
-    if [ $# -eq 1 ]; then
-        L0=0
-        L1=0
-        L2=$(printf "%d" "0x$1")
-    else
-        L0=$(printf "%d" "0x$1")
-        L1=$(printf "%d" "0x$2")
-        L2=$(printf "%d" "0x$3")
-    fi
+[ -z "$ALL_DEVICES" ] && exit 0
 
-    # get the upper bound for range or get the single device
-    UPPER=${DEV##*-}
-    set $UPPER
-    if [ $# -eq 1 ]; then
-        U0=0
-        U1=0
-        U2=$(printf "%d" "0x$1")
-    else
-        U0=$(printf "%d" "0x$1")
-        U1=$(printf "%d" "0x$2")
-        U2=$(printf "%d" "0x$3")
-    fi
-
-    IFS=$OLD_IFS
-
-    # iterate thru all devices
-    for i in $(seq $L0 $U0); do
-        [ $i -eq $L0 ] && LJ=$L1 || LJ=0
-        [ $i -eq $U0 ] && UJ=$U1 || UJ=3
-
-        for j in $(seq $LJ $UJ); do
-            [ $i -eq $L0 -a $j -eq $L1 ] && LK=$L2 || LK=0
-            [ $i -eq $U0 -a $j -eq $U1 ] && UK=$U2 || UK=65535
-
-            for k in $(seq $LK $UK); do
-                wait_on_device "$(printf %x.%x.%04x $i $j $k)"
-            done
-        done
-    done
-done
+wait_on_devices


Index: s390utils.spec
===================================================================
RCS file: /cvs/pkgs/rpms/s390utils/devel/s390utils.spec,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -p -r1.20 -r1.21
--- s390utils.spec	10 Jun 2010 07:13:42 -0000	1.20
+++ s390utils.spec	7 Jul 2010 13:42:34 -0000	1.21
@@ -8,7 +8,7 @@ Name:           s390utils
 Summary:        Utilities and daemons for IBM System/z
 Group:          System Environment/Base
 Version:        1.8.2
-Release:        10%{?dist}.1
+Release:        28%{?dist}
 Epoch:          2
 License:        GPLv2 and GPLv2+ and CPL
 Buildroot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -32,6 +32,11 @@ Source11:       cpi.sysconfig
 Source12:       dasd.udev
 Source13:       dasdconf.sh
 Source14:       device_cio_free
+Source15:       device_cio_free.conf
+Source16:       ccw_init
+Source17:       ccw.udev
+Source18:       cpuplugd.initd
+Source19:       mon_statd.initd
 
 Patch1:   0001-s390-tools-1.5.3-zipl-zfcpdump-2.patch
 Patch2:   0002-s390-tools-1.8.1-zipl-automenu.patch
@@ -55,6 +60,25 @@ Patch19:  0019-ziorep-fix-return-codes.p
 Patch20:  0020-lstape-fix-return-code.patch
 Patch21:  0021-cpuplugd-fix-reading-the-size-of-proc-sys-vm-cmm_pag.patch
 Patch22:  0022-lsqeth-support-new-attributes.patch
+Patch23:  0023-znetconf-use-hex-index-for-chpidtype-table.patch
+Patch24:  0024-zipl-handle-SSCH-status.patch
+Patch25:  0025-vmconvert-shows-garbage-in-progress-bar.patch
+Patch26:  0026-zipl-zfcp-dump-partition-error.patch
+Patch27:  0027-zfcpdump-disable-memory-cgroups.patch
+Patch28:  0028-fix-df-usage-in-ziomon.patch
+Patch29:  0029-ziomon-remove-check-for-ziorep_config-availability.patch
+Patch30:  0030-ziomon-fix-multipathing.patch
+Patch31:  0031-mismatch-between-man-and-h-in-chshut.patch
+Patch32:  0032-lsdasd-update-man-page.patch
+Patch33:  0033-reinitialize-array-in-lsqeth.patch
+Patch34:  0034-check-the-length-of-the-parameters-line.patch
+Patch35:  0035-ziorep-follow-symlink.patch
+Patch36:  0036-ts-shell-do-not-restrict-group-names-to-be-alphanume.patch
+Patch37:  0037-znetconf-unknown-driver-for-qeth.patch
+Patch38:  0038-cpuplugd-fix-stack-overflow.patch
+Patch39:  0039-cpuplugd-fix-cmm-limits-checks.patch
+Patch40:  0040-cpuplugd-set-cpu_min-to-1-by-default.patch
+Patch41:  0041-fix-dates-option-on-zfcpdbf.patch
 
 Patch1000:  1000-ziomon-linker.patch
 
@@ -152,6 +176,63 @@ be used together with the zSeries (s390)
 # Support new attributes in lsqeth (#556915)
 %patch22 -p1 -b .lsqeth-new-attrs
 
+# Use hex index for chpidtype table in znetconf (#561056)
+%patch23 -p1 -b .znetconf-hex-chpidtype
+
+# Handle status during IPL SSCH (#559250)
+%patch24 -p1 -b .zipl-handle-ssch-status
+
+# Don't show garbage in vmconvert's progress bar (#567681)
+%patch25 -p1 -b .vmconvert-progress-bar
+
+# Fix zfcp dump partition error (#572313)
+%patch26 -p1 -b .zfcp-dump-partition
+
+# Don't use memory cgroups in zfcpdump kernel (#575183)
+%patch27 -p1 -b .zfcpdump-cgroups
+
+# Fix df usage in ziomon (#575833)
+%patch28 -p1 -b .ziomon-df
+
+# Remove check for ziorep_config availability (#576579)
+%patch29 -p1 -b .ziorep_config
+
+# Fix multipathing in ziomon (#577318)
+%patch30 -p1 -b .ziomon-multipath-2
+
+# Fixed mismatch between man and -h in chshut (#563625)
+%patch31 -p1 -b .man-mismatch
+
+# Update lsdasd man page (#587044)
+%patch32 -p1 -b .lsdasd-man
+
+# Reinitialize array in lsqeth (#587599)
+%patch33 -p1 -b .lsqeth-reinit-array
+
+# Check the length of the parameters line (#594031)
+%patch34 -p1 -b .zipl-max-parmline
+
+# Follow symlinks in ziorep (#598574)
+%patch35 -p1 -b .ziorep-follow-symlinks
+
+# Do not restrict group names to be alphanumeric in ts-shell (#598641)
+%patch36 -p1 -b .ts-shell-groups
+
+# znetconf --drive|-d option returning 'unknown driver' for qeth (#601846)
+%patch37 -p1 -b .znetconf-driver-option
+
+# Fix stack overwrite in cpuplugd (#601847)
+%patch38 -p1 -b .cpuplugd-stack-overwrite
+
+# Fix cmm_min/max limit checks in cpuplugd (#606366)
+%patch39 -p1 -b .cpuplugd-cmm-limits
+
+# Set cpu_min to 1 by default in cpuplugd (#606416)
+%patch40 -p1 -b .cpuplugd-cpu_min
+
+# Fix --dates option in zfcpdbf (#609092)
+%patch41 -p1 -b .zfcpdbf-dates
+
 # Fix linking with --no-add-needed
 %patch1000 -p1 -b .linker
 
@@ -206,11 +287,11 @@ popd
 
 
 %build
-make OPT_FLAGS="$RPM_OPT_FLAGS" DISTRELEASE=%{release} V=1
+make OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" DISTRELEASE=%{release} V=1
 
 pushd cmsfs-%{cmsfsver}
 ./configure
-make CC="gcc $RPM_OPT_FLAGS"
+make CC="gcc $RPM_OPT_FLAGS -fno-strict-aliasing"
 popd
 
 pushd src_vipa-%{vipaver}
@@ -219,7 +300,7 @@ popd
 
 pushd lib-zfcp-hbaapi-%{hbaapiver}
 %configure --disable-static
-make EXTRA_CFLAGS="$RPM_OPT_FLAGS"
+make EXTRA_CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
 popd
 
 
@@ -252,10 +333,10 @@ install -p -m 644 etc/sysconfig/dumpconf
 install -p -m 755 etc/init.d/dumpconf ${RPM_BUILD_ROOT}%{_initddir}/dumpconf
 
 install -p -m 644 etc/sysconfig/mon_statd ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig
-install -p -m 755 etc/init.d/mon_statd ${RPM_BUILD_ROOT}%{_initddir}/mon_statd
+install -p -m 755 %{SOURCE19} ${RPM_BUILD_ROOT}%{_initddir}/mon_statd
 
 install -p -m 644 etc/sysconfig/cpuplugd ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig
-install -p -m 755 etc/init.d/cpuplugd ${RPM_BUILD_ROOT}%{_initddir}/cpuplugd
+install -p -m 755 %{SOURCE18} ${RPM_BUILD_ROOT}%{_initddir}/cpuplugd
 
 install -Dp -m 644 etc/udev/rules.d/*.rules ${RPM_BUILD_ROOT}%{_sysconfdir}/udev/rules.d
 
@@ -300,6 +381,13 @@ for lnk in dasd zfcp znet; do
     ln -sf device_cio_free ${lnk}_cio_free
 done
 popd
+mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/init
+install -p -m 644 %{SOURCE15} ${RPM_BUILD_ROOT}%{_sysconfdir}/init
+
+# ccw
+mkdir -p ${RPM_BUILD_ROOT}/lib/udev/rules.d
+install -p -m 755 %{SOURCE16} ${RPM_BUILD_ROOT}/lib/udev/ccw_init
+install -p -m 644 %{SOURCE17} ${RPM_BUILD_ROOT}/lib/udev/rules.d/81-ccw.rules
 
 
 %clean
@@ -320,6 +408,7 @@ Summary:        S390 base tools
 Group:          System Environment/Base
 Requires:       perl gawk sed coreutils
 Requires:       sysfsutils
+Requires:       sg3_utils
 Requires(pre):   chkconfig
 Requires(preun): chkconfig
 Requires(preun): initscripts
@@ -564,6 +653,9 @@ fi
 /sbin/device_cio_free
 /sbin/zfcp_cio_free
 /sbin/znet_cio_free
+%{_sysconfdir}/init/device_cio_free.conf
+/lib/udev/ccw_init
+/lib/udev/rules.d/81-ccw.rules
 
 # src_vipa
 %{_bindir}/src_vipa.sh
@@ -598,7 +690,7 @@ ATM Ethernet LAN Emulation in QDIO mode.
 License:         GPLv2
 Summary:         Monitoring daemons for Linux in z/VM
 Group:           System Environment/Daemons
-Requires:        redhat-lsb coreutils
+Requires:        coreutils
 Requires(pre):   chkconfig
 Requires(preun): chkconfig
 Requires(preun): initscripts
@@ -639,7 +731,7 @@ fi
 License:         GPLv2+
 Summary:         Daemon that manages CPU and memory resources
 Group:           System Environment/Daemons
-Requires:        redhat-lsb coreutils
+Requires:        coreutils
 Requires(pre):   chkconfig
 Requires(preun): chkconfig
 Requires(preun): initscripts
@@ -851,9 +943,88 @@ User-space development files for the s39
 
 
 %changelog
-* Thu Jun 10 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-10.1
+* Wed Jul  7 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-28
 - fix linking with --no-add-needed
 
+* Tue Jun 29 2010 Dan Horák <dhorak at redhat.com> 2:1.8.2-27
+- make znet_cio_free work also when no interface config files exists (#609073)
+- fix --dates option in zfcpdbf (#609092)
+
+* Mon Jun 28 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-26
+- follow symlinks in ziorep (#598574)
+- do not restrict group names to be alphanumeric in ts-shell (#598641)
+- znetconf --drive|-d option returning 'unknown driver' for qeth (#601846)
+- fix stack overwrite in cpuplugd (#601847)
+- fix cmm_min/max limit checks in cpuplugd (#606366)
+- set cpu_min to 1 by default in cpuplugd (#606416)
+- build with -fno-strict-aliasing (#599396)
+- remove reference to z/VM from the cpi initscript (#601753)
+- fix return values for the mon_statd initscript (#606805)
+- ignore backup and similar config files in device_cio_free (#533494)
+
+* Fri May 28 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-25
+- fixed device_cio_free command line handling (#595569)
+
+* Thu May 20 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-24
+- added a check for the length of the parameters line (#594031)
+
+* Wed May 19 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-23
+- make ccw_init compatible with posix shell (#546615)
+
+* Wed May  5 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-22
+- scripts can't depend on stuff from /usr (#587364)
+
+* Mon May  3 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-21
+- updated patch for the "reinitialize array in lsqeth" issue (#587757)
+
+* Fri Apr 30 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-20
+- updated lsdasd man page (#587044)
+- reinitialize array in lsqeth (#587599)
+
+* Wed Apr 28 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-19
+- fixed mismatch between man and -h in chshut (#563625)
+- use the merged ccw_init script (#533494, #561814)
+
+* Thu Apr 22 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-18
+- lsluns utility from the base subpackage requires sg3_utils
+
+* Wed Apr 21 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-17
+- updated device_cio_free script (#576015)
+
+* Wed Mar 31 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-16
+- updated device_cio_free upstart config file (#578260)
+- fix multipathing in ziomon (#577318)
+
+* Mon Mar 29 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-15
+- remove check for ziorep_config availability (#576579)
+- install upstart event file into /etc/init (#561339)
+- device_cio_free updates
+    - don't use basename/dirname
+    - correctly parse /etc/ccw.conf (#533494)
+
+* Mon Mar 22 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-14
+- don't use memory cgroups in zfcpdump kernel (#575183)
+- fix df usage in ziomon (#575833)
+
+* Thu Mar 11 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-13
+- dropped dependency on redhat-lsb (#542702)
+
+* Wed Mar 10 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-12
+- run device_cio_free on startup (#561339)
+- use hex index for chpidtype table in znetconf (#561056)
+- handle status during IPL SSCH (#559250)
+- don't show garbage in vmconvert's progress bar (#567681)
+- don't print enviroment when there are no devices to wait for (#570763)
+- fix zfcp dump partition error (#572313)
+- switched to new initscripts for cpuplugd and fsstatd/procd (#524218, #524477)
+
+* Tue Feb 16 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-11
+- moved ccw udev stuff from initscripts to s390utils
+- updated ccw_init with delay loops and layer2 handling (#561926)
+
+* Fri Jan 22 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-10.1
+- really update zfcpconf.sh script from dracut
+
 * Wed Jan 20 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-10
 - fixed return codes in ziorep (#556849)
 - fixed return code in lstape (#556910)
@@ -870,6 +1041,9 @@ User-space development files for the s39
 * Fri Jan  8 2010 Dan Horák <dan[at]danny.cz> 2:1.8.2-7
 - updated device_cio_free script (#533494)
 
+* Tue Dec 22 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-6.1
+- fixed return value in cpi initscript (#541389)
+
 * 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


Index: zfcpconf.sh
===================================================================
RCS file: /cvs/pkgs/rpms/s390utils/devel/zfcpconf.sh,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- zfcpconf.sh	30 Sep 2009 20:09:33 -0000	1.2
+++ zfcpconf.sh	7 Jul 2010 13:42:34 -0000	1.3
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 
 # config file syntax:
 # deviceno   WWPN   FCPLUN
@@ -19,25 +19,37 @@
 # echo 0x5022000000000000 > /sys/bus/ccw/drivers/zfcp/0.0.4000/0x5005076300c213e9/unit_add
 
 CONFIG=/etc/zfcp.conf
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
+PATH=/bin:/sbin
 
 if [ -f "$CONFIG" ]; then
-
    if [ ! -d /sys/bus/ccw/drivers/zfcp ]; then
       modprobe zfcp
    fi
    if [ ! -d /sys/bus/ccw/drivers/zfcp ]; then
       return
    fi
-   cat $CONFIG | grep -v "^#" | tr "A-Z" "a-z" | while read line; do
-      numparams=$(echo $line | wc -w)
-      if [ $numparams == 5 ]; then
-         read DEVICE SCSIID WWPN SCSILUN FCPLUN < <(echo $line)
-         echo "Warning: Deprecated values in /etc/zfcp.conf, ignoring SCSI ID $SCSIID and SCSI LUN $SCSILUN"
-      elif [ $numparams == 3 ]; then
-         read DEVICE WWPN FCPLUN < <(echo $line)
-      fi
-      echo 1 > /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/online
-      [ ! -d /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/$WWPN/$FCPLUN ] && echo $FCPLUN > /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/$WWPN/unit_add
+   sed 'y/ABCDEF/abcdef/' < $CONFIG | while read line; do
+       case $line in
+	   \#*) ;;
+	   *)
+	       [ -z "$line" ] && continue
+	       set $line
+	       if [ $# -eq 5 ]; then
+		   DEVICE=$1
+		   SCSIID=$2
+		   WWPN=$3
+		   SCSILUN=$4
+		   FCPLUN=$5
+		   echo "Warning: Deprecated values in /etc/zfcp.conf, ignoring SCSI ID $SCSIID and SCSI LUN $SCSILUN"
+	       elif [ $# -eq 3 ]; then
+		   DEVICE=${1##*0x}
+		   WWPN=$2
+		   FCPLUN=$3
+	       fi
+	       echo 1 > /sys/bus/ccw/drivers/zfcp/${DEVICE}/online
+	       [ ! -d /sys/bus/ccw/drivers/zfcp/${DEVICE}/${WWPN}/${FCPLUN} ] \
+		   && echo $FCPLUN > /sys/bus/ccw/drivers/zfcp/${DEVICE}/${WWPN}/unit_add
+	       ;;
+       esac
    done
 fi



More information about the scm-commits mailing list