Compare commits
228 Commits
F-13-split
...
rawhide
Author | SHA1 | Date | |
---|---|---|---|
|
93479b677f | ||
|
882b26e468 | ||
|
0226a1b211 | ||
|
3eddb1a036 | ||
|
ad9e1ad7a0 | ||
|
0f03699129 | ||
|
f00ff2ac55 | ||
|
2c0b6d2ea2 | ||
|
8a3c26800a | ||
|
ca71fe340e | ||
|
7a5c89e84a | ||
|
40db3a57ae | ||
|
70bd1af9bd | ||
|
51cd104ddd | ||
|
5184801f0e | ||
|
535cc10766 | ||
|
3b4ba770c1 | ||
|
702b044c20 | ||
|
3fa397e687 | ||
|
9e549c2e6c | ||
|
087a10568c | ||
|
262d603726 | ||
|
4b655c64f1 | ||
|
d81d4fd383 | ||
|
da9838c800 | ||
|
b43bfd7eed | ||
|
a6e30a308a | ||
|
57b37fee1f | ||
|
d6f3723e10 | ||
|
9e98b44d8b | ||
|
607a6825f4 | ||
|
685ce32c07 | ||
|
77693cd7eb | ||
|
c33643ba10 | ||
|
bef2b35dc9 | ||
|
af41c81d1b | ||
|
473c14c9ab | ||
|
a7424a8ff0 | ||
|
6f524eab5a | ||
|
ca6b193ac3 | ||
|
cc536faf67 | ||
|
f7710610d8 | ||
|
1c93647293 | ||
|
a2cb8e5beb | ||
|
6dc91fa6ea | ||
|
ad7942bd0c | ||
|
a483890884 | ||
|
78ef6e86e5 | ||
|
b385215ded | ||
|
c69c48c992 | ||
|
ea8f5ea852 | ||
|
083020797b | ||
|
a8e761756e | ||
|
287377b414 | ||
|
c1e8b3a309 | ||
|
0419550a2a | ||
|
9e8e130a7c | ||
|
2a913049ee | ||
|
ce7722eab4 | ||
|
e4da637a53 | ||
|
b2e74b0a3e | ||
|
2bf7d95c95 | ||
|
02409651fa | ||
|
3d1d949272 | ||
|
d792b32be1 | ||
|
7a34f7d689 | ||
|
6ce1f4d14f | ||
|
1409803b15 | ||
|
a823de10da | ||
|
ab939b3c36 | ||
|
0450181b8e | ||
|
4a5ecf837b | ||
|
1cc3998852 | ||
|
2ff6f78332 | ||
|
1b35631849 | ||
|
2f9ebbc0ab | ||
|
83bfc0e7d7 | ||
|
cf1344b04d | ||
|
a895d0c8be | ||
|
a9bf2dafeb | ||
|
1f19dda30e | ||
|
6f6a4deece | ||
|
b8f75bde3c | ||
|
f9a139cce4 | ||
|
383f5e27aa | ||
|
0aa4b528e1 | ||
|
365ca29316 | ||
|
e477a92045 | ||
|
6b21143baa | ||
|
5e82789fe7 | ||
|
1ec03967cb | ||
|
974303a2f3 | ||
|
58aa25016f | ||
|
78962171af | ||
|
6e980e4fa1 | ||
|
920a9af392 | ||
|
4295214706 | ||
|
3e57fc3074 | ||
|
594bda140c | ||
|
e0e6dde32f | ||
|
b3e6ad36b4 | ||
|
2cd85a32d2 | ||
|
87ca1f4032 | ||
|
cb145202ea | ||
|
0379a19cd4 | ||
|
18c25ca8a6 | ||
|
b42105540f | ||
|
a8004b6c5b | ||
|
4f95e67dc9 | ||
|
5229fe4f01 | ||
|
81aaf37c09 | ||
|
61130fa91d | ||
|
1a182b31d3 | ||
|
b1b957aaf0 | ||
|
bd0e3fb9c2 | ||
|
6fa2feaf5b | ||
|
378300fbc7 | ||
|
234b2c55c3 | ||
|
848b61ef39 | ||
|
b45c50cd89 | ||
|
f39b11e184 | ||
|
51e189a385 | ||
|
95b85f6150 | ||
|
a8e0a7dfa6 | ||
|
b0eb99190c | ||
|
01b858f02d | ||
|
2ff30e744f | ||
|
c301cb59af | ||
|
2f4b67cd1e | ||
|
a8d596d27b | ||
|
8473d5923b | ||
|
80686e380e | ||
|
7ffae6dc71 | ||
|
4b248d8445 | ||
|
e9f0a67862 | ||
|
36ad014995 | ||
|
877da844b3 | ||
|
f25abae336 | ||
|
4238dfb8b8 | ||
|
8a861db4e5 | ||
|
dbc645a2c4 | ||
|
6aab78b451 | ||
|
fe78d02b5f | ||
|
464c5cfccf | ||
|
7b458c246c | ||
|
00a29e6617 | ||
|
6e58e0e033 | ||
|
732529cc93 | ||
|
2136cc04f3 | ||
|
a1273c9e55 | ||
|
eafdf584a3 | ||
|
fca7af8cca | ||
|
630487b266 | ||
|
4436a3ae49 | ||
|
00742af605 | ||
|
c05343e784 | ||
|
6edd79ac77 | ||
|
3b8ed19f61 | ||
|
e9821c7327 | ||
|
19c274d2c1 | ||
|
ab7d7190d9 | ||
|
e8b1d98fd9 | ||
|
0719e3d656 | ||
|
be742c4d1e | ||
|
a27744e717 | ||
|
0ecf7ba62d | ||
|
5f6d5eeb14 | ||
|
9ef764d5fa | ||
|
056c251a8d | ||
|
d7aa0839fa | ||
|
417b9f047d | ||
|
52a75a97d6 | ||
|
8161782040 | ||
|
cb471f71a7 | ||
|
005a97d227 | ||
|
a1d11a8050 | ||
|
826b40fc84 | ||
|
d9a5b0a957 | ||
|
eac4499021 | ||
|
26ce349f9f | ||
|
c69f03294b | ||
|
ba2d5f1e1e | ||
|
b8434861eb | ||
|
d93a0307e6 | ||
|
fac999b58c | ||
|
e9ac32a671 | ||
|
92554497c5 | ||
|
02f5ea8199 | ||
|
2497f58367 | ||
|
c4e809d860 | ||
|
8047935446 | ||
|
8f75616a70 | ||
|
88755424bf | ||
|
bf8cdf527f | ||
|
6a9781520b | ||
|
010c710cde | ||
|
74e0e0ad2b | ||
|
a087fe2085 | ||
|
6fbd3578d3 | ||
|
f1ed814c1e | ||
|
24e8c7b06e | ||
|
189dbe41b5 | ||
|
ca75beda49 | ||
|
f42c8ffb83 | ||
|
0355cd14d3 | ||
|
8c7c2bc4db | ||
|
83347f5b69 | ||
|
b7bb250113 | ||
|
0a5f094516 | ||
|
a3d1b97a2b | ||
|
0873b756e6 | ||
|
ca07d6e6f0 | ||
|
36d50ba5f4 | ||
|
efa3adb0c7 | ||
|
0bac35f34d | ||
|
0f8ea96725 | ||
|
0425b960dc | ||
|
e46958f573 | ||
|
ffb1d0d0c7 | ||
|
c46bddaf55 | ||
|
f7e20b2418 | ||
|
0b15456cd5 | ||
|
6ab82307f5 | ||
|
c7db9ea9ed | ||
|
de4f3daca2 | ||
|
32f454a29c | ||
|
9e27916392 | ||
|
c6b0da566c |
@ -1,4 +0,0 @@
|
|||||||
s390-tools-1.8.2.tar.bz2
|
|
||||||
cmsfs-1.1.8c.tar.gz
|
|
||||||
lib-zfcp-hbaapi-2.0.tar.gz
|
|
||||||
src_vipa-2.0.4.tar.gz
|
|
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
s390-tools-1.8.2.tar.bz2
|
||||||
|
cmsfs-1.1.8c.tar.gz
|
||||||
|
lib-zfcp-hbaapi-2.0.tar.gz
|
||||||
|
src_vipa-2.0.4.tar.gz
|
||||||
|
/lib-zfcp-hbaapi-2.1.tar.gz
|
||||||
|
/src_vipa-2.1.0.tar.gz
|
||||||
|
/s390-tools-*.tar.bz2
|
||||||
|
/s390-tools-*.tar.gz
|
||||||
|
/s390-tools-*-rust-vendor.tar.xz
|
@ -1,27 +0,0 @@
|
|||||||
From 2b8336a93376953ba0ed84223264be55243ac7f8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dan Horak <dan@danny.cz>
|
|
||||||
Date: Sun, 20 Jul 2008 09:24:05 +0200
|
|
||||||
Subject: [PATCH 1/9] s390-tools-1.5.3-zipl-zfcpdump-2
|
|
||||||
|
|
||||||
---
|
|
||||||
common.mak | 4 ++--
|
|
||||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/common.mak b/common.mak
|
|
||||||
index 8b248f1..0a7916e 100644
|
|
||||||
--- a/common.mak
|
|
||||||
+++ b/common.mak
|
|
||||||
@@ -63,8 +63,8 @@ GROUP = $(shell id -gn)
|
|
||||||
export INSTROOT BINDIR LIBDIR MANDIR OWNER GROUP
|
|
||||||
|
|
||||||
# Special defines for zfcpdump
|
|
||||||
-ZFCPDUMP_DIR = /usr/local/share/zfcpdump
|
|
||||||
-ZFCPDUMP_IMAGE = zfcpdump.image
|
|
||||||
+ZFCPDUMP_DIR = /boot
|
|
||||||
+ZFCPDUMP_IMAGE = zfcpdump
|
|
||||||
ZFCPDUMP_RD = zfcpdump.rd
|
|
||||||
export ZFCPDUMP_DIR ZFCPDUMP_IMAGE ZFCPDUMP_RD
|
|
||||||
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,423 +0,0 @@
|
|||||||
From 2513c0f8096c681f962d77420dac731f7bb33e44 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Thu, 23 Apr 2009 11:45:36 +0200
|
|
||||||
Subject: [PATCH 2/9] s390-tools-1.8.1-zipl-automenu
|
|
||||||
|
|
||||||
---
|
|
||||||
zipl/man/zipl.8 | 7 ++
|
|
||||||
zipl/src/job.c | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
|
|
||||||
zipl/src/scan.c | 4 +-
|
|
||||||
zipl/src/zipl.c | 1 +
|
|
||||||
4 files changed, 197 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/zipl/man/zipl.8 b/zipl/man/zipl.8
|
|
||||||
index 8a83c01..6ebf240 100644
|
|
||||||
--- a/zipl/man/zipl.8
|
|
||||||
+++ b/zipl/man/zipl.8
|
|
||||||
@@ -249,6 +249,13 @@ whether they contain a dump signature or not.
|
|
||||||
This option can only be used together with
|
|
||||||
.BR \-\-mvdump .
|
|
||||||
|
|
||||||
+.TP
|
|
||||||
+.BR "\-x" " or " "\-\-no-automenu"
|
|
||||||
+Disables the automatic creation of a multiboot menu. Specifying a menu with the
|
|
||||||
+"-m <MENU>" option or a section disables this feature, too. This option was
|
|
||||||
+added for compatibility with previous versions of the multiboot version of
|
|
||||||
+zipl.
|
|
||||||
+
|
|
||||||
.SH EXAMPLE
|
|
||||||
1. Scenario: prepare disk for booting a Linux kernel image using the
|
|
||||||
following parameters:
|
|
||||||
diff --git a/zipl/src/job.c b/zipl/src/job.c
|
|
||||||
index c5c85d8..6a526e4 100644
|
|
||||||
--- a/zipl/src/job.c
|
|
||||||
+++ b/zipl/src/job.c
|
|
||||||
@@ -43,6 +43,7 @@ static struct option options[] = {
|
|
||||||
{ "version", no_argument, NULL, 'v'},
|
|
||||||
{ "verbose", no_argument, NULL, 'V'},
|
|
||||||
{ "add-files", no_argument, NULL, 'a'},
|
|
||||||
+ { "no-automenu", no_argument, NULL, 'x'},
|
|
||||||
{ "tape", required_argument, NULL, 'T'},
|
|
||||||
{ "dry-run", no_argument, NULL, '0'},
|
|
||||||
{ "force", no_argument, NULL, 'f'},
|
|
||||||
@@ -50,7 +51,7 @@ static struct option options[] = {
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Command line option abbreviations */
|
|
||||||
-static const char option_string[] = "-c:t:i:r:p:P:d:D:M:s:m:hHnVvaT:f";
|
|
||||||
+static const char option_string[] = "-c:t:i:r:p:P:d:D:M:s:m:hHnVvaxT:f";
|
|
||||||
|
|
||||||
struct command_line {
|
|
||||||
char* data[SCAN_KEYWORD_NUM];
|
|
||||||
@@ -62,11 +63,14 @@ struct command_line {
|
|
||||||
int version;
|
|
||||||
int verbose;
|
|
||||||
int add_files;
|
|
||||||
+ int automenu;
|
|
||||||
int dry_run;
|
|
||||||
int force;
|
|
||||||
enum scan_section_type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* Global variable for default boot target. Ugly but necessary... */
|
|
||||||
+static char *default_target;
|
|
||||||
|
|
||||||
static int
|
|
||||||
store_option(struct command_line* cmdline, enum scan_keyword_id keyword,
|
|
||||||
@@ -92,6 +96,7 @@ get_command_line(int argc, char* argv[], struct command_line* line)
|
|
||||||
int i;
|
|
||||||
|
|
||||||
memset((void *) &cmdline, 0, sizeof(struct command_line));
|
|
||||||
+ cmdline.automenu = 1;
|
|
||||||
cmdline.type = section_invalid;
|
|
||||||
is_keyword = 0;
|
|
||||||
/* Process options */
|
|
||||||
@@ -101,16 +106,22 @@ get_command_line(int argc, char* argv[], struct command_line* line)
|
|
||||||
switch (opt) {
|
|
||||||
case 'd':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_dumpto,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
case 'D':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_dumptofs,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
case 'M':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_mvdump,
|
|
||||||
optarg);
|
|
||||||
#ifndef __s390x__
|
|
||||||
@@ -121,35 +132,49 @@ get_command_line(int argc, char* argv[], struct command_line* line)
|
|
||||||
break;
|
|
||||||
case 'i':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_image,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
case 'P':
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_parameters,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
case 'p':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_parmfile,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_ramdisk,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_segment,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_target,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
case 'T':
|
|
||||||
is_keyword = 1;
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
rc = store_option(&cmdline, scan_keyword_tape,
|
|
||||||
optarg);
|
|
||||||
break;
|
|
||||||
@@ -190,6 +215,10 @@ get_command_line(int argc, char* argv[], struct command_line* line)
|
|
||||||
case 'f':
|
|
||||||
cmdline.force = 1;
|
|
||||||
break;
|
|
||||||
+ case 'x':
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
+ scan_key_table[1][8] = req;
|
|
||||||
+ break;
|
|
||||||
case 1:
|
|
||||||
/* Non-option is interpreted as section name */
|
|
||||||
if (cmdline.section != NULL) {
|
|
||||||
@@ -214,6 +243,9 @@ get_command_line(int argc, char* argv[], struct command_line* line)
|
|
||||||
if (cmdline.help || cmdline.version) {
|
|
||||||
/* Always accept --help and --version */
|
|
||||||
} else if ((cmdline.menu != NULL) || (cmdline.section != NULL)) {
|
|
||||||
+ /* If either menu or section has been selected disable
|
|
||||||
+ automenu generation */
|
|
||||||
+ cmdline.automenu = 0;
|
|
||||||
/* Config file mode */
|
|
||||||
if ((cmdline.menu != NULL) && (cmdline.section != NULL)) {
|
|
||||||
error_reason("Option 'menu' cannot be used when "
|
|
||||||
@@ -832,7 +864,14 @@ get_job_from_section_data(char* data[], struct job_data* job, char* section)
|
|
||||||
/* IPL job */
|
|
||||||
job->id = job_ipl;
|
|
||||||
/* Fill in name of bootmap directory */
|
|
||||||
- job->bootmap_dir = misc_strdup(data[(int) scan_keyword_target]);
|
|
||||||
+ if (data[(int) scan_keyword_target] == NULL) {
|
|
||||||
+ if (default_target == NULL) {
|
|
||||||
+ error_text("Unable to find default section in your config file.");
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ job->bootmap_dir = misc_strdup(default_target);
|
|
||||||
+ } else
|
|
||||||
+ job->bootmap_dir = misc_strdup(data[(int) scan_keyword_target]);
|
|
||||||
if (job->bootmap_dir == NULL)
|
|
||||||
return -1;
|
|
||||||
/* Fill in name and address of image file */
|
|
||||||
@@ -1102,6 +1141,8 @@ get_menu_job(struct scan_token* scan, char* menu, struct job_data* job)
|
|
||||||
if (temp_job == NULL)
|
|
||||||
return -1;
|
|
||||||
memset((void *) temp_job, 0, sizeof(struct job_data));
|
|
||||||
+ if (data[(int) scan_keyword_target] == NULL)
|
|
||||||
+ data[(int) scan_keyword_target] = misc_strdup(job->bootmap_dir);
|
|
||||||
rc = get_job_from_section_data(data, temp_job,
|
|
||||||
job->data.menu.entry[current].name);
|
|
||||||
if (rc) {
|
|
||||||
@@ -1150,6 +1191,7 @@ get_default_section(struct scan_token* scan, char** section, int* is_menu)
|
|
||||||
i = scan_find_section(scan, DEFAULTBOOT_SECTION,
|
|
||||||
scan_id_section_heading, 0);
|
|
||||||
if (i<0) {
|
|
||||||
+ *section = NULL;
|
|
||||||
error_reason("No '" DEFAULTBOOT_SECTION "' section found and "
|
|
||||||
"no section specified on command line");
|
|
||||||
return -1;
|
|
||||||
@@ -1169,6 +1211,7 @@ get_default_section(struct scan_token* scan, char** section, int* is_menu)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Should not happen */
|
|
||||||
+ *section = NULL;
|
|
||||||
error_reason("No default section specified");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
@@ -1184,19 +1227,35 @@ get_section_job(struct scan_token* scan, char* section, struct job_data* job,
|
|
||||||
{
|
|
||||||
char* data[SCAN_KEYWORD_NUM];
|
|
||||||
char* buffer;
|
|
||||||
+ char* default_section;
|
|
||||||
int rc;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
+ rc = get_default_section(scan, &default_section, &i);
|
|
||||||
+ if (rc)
|
|
||||||
+ return rc;
|
|
||||||
if (section == NULL) {
|
|
||||||
- rc = get_default_section(scan, §ion, &i);
|
|
||||||
- if (rc)
|
|
||||||
- return rc;
|
|
||||||
+ section = default_section;
|
|
||||||
if (i) {
|
|
||||||
/* 'defaultmenu' was specified */
|
|
||||||
rc = get_menu_job(scan, section, job);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ char* name = NULL;
|
|
||||||
+
|
|
||||||
+ for (i = 0; (int) scan[i].id != 0; i++) {
|
|
||||||
+ if (scan[i].id == scan_id_section_heading) {
|
|
||||||
+ name = scan[i].content.section.name;
|
|
||||||
+ }
|
|
||||||
+ if (scan[i].id == scan_id_keyword_assignment &&
|
|
||||||
+ scan[i].content.keyword.keyword == scan_keyword_target &&
|
|
||||||
+ !strcmp(DEFAULTBOOT_SECTION, name))
|
|
||||||
+ default_target = misc_strdup(scan[i].content.keyword.value);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
if (strcmp(section, DEFAULTBOOT_SECTION) == 0) {
|
|
||||||
error_reason("Special section '" DEFAULTBOOT_SECTION "' cannot "
|
|
||||||
"be used as target section");
|
|
||||||
@@ -1268,10 +1327,118 @@ get_section_job(struct scan_token* scan, char* section, struct job_data* job,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+/* Create a fake menu to simulate the old s390utils-1.1.7 multiboot
|
|
||||||
+ * behaviour. */
|
|
||||||
+static struct scan_token *
|
|
||||||
+create_fake_menu(struct scan_token *scan)
|
|
||||||
+{
|
|
||||||
+ int i, j, pos, numsec, size, defaultpos;
|
|
||||||
+ char *name;
|
|
||||||
+ char *target;
|
|
||||||
+ char *timeout;
|
|
||||||
+ char *seclist[1024];
|
|
||||||
+ char *defaultsection;
|
|
||||||
+ char buf[1024];
|
|
||||||
+ struct scan_token *tmp;
|
|
||||||
+
|
|
||||||
+ /* Count # of sections */
|
|
||||||
+ numsec = 0;
|
|
||||||
+ name = NULL;
|
|
||||||
+ target = NULL;
|
|
||||||
+ timeout = NULL;
|
|
||||||
+ for (i = 0; (int) scan[i].id != 0; i++) {
|
|
||||||
+ if (scan[i].id == scan_id_section_heading) {
|
|
||||||
+ name = scan[i].content.section.name;
|
|
||||||
+ if (strcmp(DEFAULTBOOT_SECTION, name))
|
|
||||||
+ seclist[numsec++] = name;
|
|
||||||
+ }
|
|
||||||
+ if (scan[i].id == scan_id_keyword_assignment &&
|
|
||||||
+ (scan[i].content.keyword.keyword == scan_keyword_dumpto ||
|
|
||||||
+ scan[i].content.keyword.keyword == scan_keyword_dumptofs)) {
|
|
||||||
+ numsec--;
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ if (scan[i].id == scan_id_keyword_assignment &&
|
|
||||||
+ scan[i].content.keyword.keyword == scan_keyword_target &&
|
|
||||||
+ !strcmp(DEFAULTBOOT_SECTION, name))
|
|
||||||
+ target = scan[i].content.keyword.value;
|
|
||||||
+
|
|
||||||
+ if (scan[i].id == scan_id_keyword_assignment &&
|
|
||||||
+ scan[i].content.keyword.keyword == scan_keyword_timeout)
|
|
||||||
+ timeout = scan[i].content.keyword.value;
|
|
||||||
+ }
|
|
||||||
+ get_default_section(scan, &defaultsection, &j);
|
|
||||||
+
|
|
||||||
+ if (defaultsection == NULL) {
|
|
||||||
+ error_text("Unable to find default section in your config file.");
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (target == NULL) {
|
|
||||||
+ error_text("Keyword target is missing in default section.");
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ default_target = misc_strdup(target);
|
|
||||||
+
|
|
||||||
+ size = i+6+numsec;
|
|
||||||
+ tmp = (struct scan_token *) misc_malloc(size * sizeof(struct scan_token));
|
|
||||||
+ if (tmp == NULL) {
|
|
||||||
+ error_text("Couldn't allocate memory for menu entries");
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ memset(tmp, 0, size * sizeof(struct scan_token));
|
|
||||||
+ memcpy(tmp, scan, i * sizeof(struct scan_token));
|
|
||||||
+ free(scan);
|
|
||||||
+ scan = tmp;
|
|
||||||
+
|
|
||||||
+ defaultpos = 0;
|
|
||||||
+ for (j = 0; j < numsec; j++) {
|
|
||||||
+ if (!strcmp(defaultsection, seclist[j]))
|
|
||||||
+ defaultpos = j+1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ snprintf(buf, 1024, "%d", defaultpos);
|
|
||||||
+
|
|
||||||
+ scan[i].id = scan_id_menu_heading;
|
|
||||||
+ scan[i].line = i;
|
|
||||||
+ scan[i++].content.menu.name = misc_strdup("rh-automatic-menu");
|
|
||||||
+ scan[i].id = scan_id_keyword_assignment;
|
|
||||||
+ scan[i].line = i;
|
|
||||||
+ scan[i].content.keyword.keyword = scan_keyword_target;
|
|
||||||
+ scan[i++].content.keyword.value = misc_strdup(target);
|
|
||||||
+ scan[i].id = scan_id_keyword_assignment;
|
|
||||||
+ scan[i].line = i;
|
|
||||||
+ scan[i].content.keyword.keyword = scan_keyword_default;
|
|
||||||
+ scan[i++].content.keyword.value = misc_strdup(buf);
|
|
||||||
+ scan[i].id = scan_id_keyword_assignment;
|
|
||||||
+ scan[i].line = i;
|
|
||||||
+ scan[i].content.keyword.keyword = scan_keyword_prompt;
|
|
||||||
+ scan[i++].content.keyword.value = misc_strdup("1");
|
|
||||||
+ scan[i].id = scan_id_keyword_assignment;
|
|
||||||
+ scan[i].line = i;
|
|
||||||
+ scan[i].content.keyword.keyword = scan_keyword_timeout;
|
|
||||||
+ if (timeout)
|
|
||||||
+ scan[i++].content.keyword.value = misc_strdup(timeout);
|
|
||||||
+ else
|
|
||||||
+ scan[i++].content.keyword.value = misc_strdup("15");
|
|
||||||
+
|
|
||||||
+ pos = i;
|
|
||||||
+ for (i = 0; i<numsec; i++) {
|
|
||||||
+ scan[pos].id = scan_id_number_assignment;
|
|
||||||
+ scan[pos].line = pos;
|
|
||||||
+ scan[pos].content.number.number = i+1;
|
|
||||||
+ scan[pos++].content.number.value = misc_strdup(seclist[i]);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return scan;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int
|
|
||||||
get_job_from_config_file(struct command_line* cmdline, struct job_data* job)
|
|
||||||
{
|
|
||||||
- struct scan_token* scan;
|
|
||||||
+ struct scan_token* scan, *nscan;
|
|
||||||
char* filename;
|
|
||||||
char* source;
|
|
||||||
int rc;
|
|
||||||
@@ -1303,9 +1470,22 @@ get_job_from_config_file(struct command_line* cmdline, struct job_data* job)
|
|
||||||
scan_free(scan);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (cmdline->automenu) {
|
|
||||||
+ nscan = create_fake_menu(scan);
|
|
||||||
+ if (nscan == NULL) {
|
|
||||||
+ scan_free(scan);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+ scan = nscan;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Get job from config file data */
|
|
||||||
- if (cmdline->menu != NULL)
|
|
||||||
+ if (cmdline->menu != NULL || cmdline->automenu) {
|
|
||||||
+ if (cmdline->automenu)
|
|
||||||
+ cmdline->menu = misc_strdup("rh-automatic-menu");
|
|
||||||
rc = get_menu_job(scan, cmdline->menu, job);
|
|
||||||
+ }
|
|
||||||
else {
|
|
||||||
rc = get_section_job(scan, cmdline->section, job,
|
|
||||||
cmdline->data[(int) scan_keyword_parameters]);
|
|
||||||
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
|
||||||
index 9948092..caca3cf 100644
|
|
||||||
--- a/zipl/src/scan.c
|
|
||||||
+++ b/zipl/src/scan.c
|
|
||||||
@@ -33,9 +33,9 @@ enum scan_key_state scan_key_table[SCAN_SECTION_NUM][SCAN_KEYWORD_NUM] = {
|
|
||||||
* rs enu
|
|
||||||
*/
|
|
||||||
/* defaultboot */
|
|
||||||
- {opt, inv, inv, inv, inv, inv, inv, inv, inv, inv, inv, opt, inv, inv},
|
|
||||||
+ {opt, inv, inv, inv, inv, inv, inv, inv, req, inv, opt, opt, inv, inv},
|
|
||||||
/* ipl */
|
|
||||||
- {inv, inv, inv, req, opt, opt, opt, inv, req, inv, inv, inv, inv, inv},
|
|
||||||
+ {inv, inv, inv, req, opt, opt, opt, inv, opt, inv, inv, inv, inv, inv},
|
|
||||||
/* segment load */
|
|
||||||
{inv, inv, inv, inv, inv, inv, inv, req, req, inv, inv, inv, inv, inv},
|
|
||||||
/* part dump */
|
|
||||||
diff --git a/zipl/src/zipl.c b/zipl/src/zipl.c
|
|
||||||
index 9cb764c..4d9fd36 100644
|
|
||||||
--- a/zipl/src/zipl.c
|
|
||||||
+++ b/zipl/src/zipl.c
|
|
||||||
@@ -73,6 +73,7 @@ static const char* usage_text[] = {
|
|
||||||
"-n, --noninteractive Answer all confirmation questions with 'yes'",
|
|
||||||
"-V, --verbose Provide more verbose output",
|
|
||||||
"-a, --add-files Add all referenced files to bootmap file",
|
|
||||||
+"-x, --no-automenu Don't autogenerate multiboot menu",
|
|
||||||
" --dry-run Simulate run but don't modify IPL records"
|
|
||||||
};
|
|
||||||
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
From f8acd63e169cdec39c47ac0d8c1b98e115cf24a1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Thu, 23 Apr 2009 11:46:01 +0200
|
|
||||||
Subject: [PATCH 3/9] s390-tools-1.8.1-fdasd-su
|
|
||||||
|
|
||||||
---
|
|
||||||
fdasd/fdasd.c | 10 ++++++----
|
|
||||||
1 files changed, 6 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/fdasd/fdasd.c b/fdasd/fdasd.c
|
|
||||||
index aa16659..3a54968 100644
|
|
||||||
--- a/fdasd/fdasd.c
|
|
||||||
+++ b/fdasd/fdasd.c
|
|
||||||
@@ -2009,10 +2009,12 @@ fdasd_get_geometry (fdasd_anchor_t *anc)
|
|
||||||
if (anc->verbose) printf("disk type check : ok\n");
|
|
||||||
|
|
||||||
if (dasd_info.FBA_layout != 0) {
|
|
||||||
- snprintf(err_str, ERROR_STRING_SIZE,
|
|
||||||
- "%s is not formatted with z/OS compatible "
|
|
||||||
- "disk layout!", options.device);
|
|
||||||
- fdasd_error(anc, wrong_disk_format, err_str);
|
|
||||||
+ if(!anc->silent) {
|
|
||||||
+ snprintf(err_str, ERROR_STRING_SIZE,
|
|
||||||
+ "%s is not formatted with z/OS compatible "
|
|
||||||
+ "disk layout!", options.device);
|
|
||||||
+ fdasd_error(anc, wrong_disk_format, err_str);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (anc->verbose) printf("disk layout check : ok\n");
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,153 +0,0 @@
|
|||||||
From 35298f5f9512835071b8c08e843731bbfbb15b7e Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Thu, 23 Apr 2009 11:46:16 +0200
|
|
||||||
Subject: [PATCH 4/9] s390-tools-1.8.1-fdasd-raid-lvm
|
|
||||||
|
|
||||||
---
|
|
||||||
fdasd/fdasd.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++----------
|
|
||||||
1 files changed, 53 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/fdasd/fdasd.c b/fdasd/fdasd.c
|
|
||||||
index 3a54968..a526d7f 100644
|
|
||||||
--- a/fdasd/fdasd.c
|
|
||||||
+++ b/fdasd/fdasd.c
|
|
||||||
@@ -258,10 +258,10 @@ fdasd_error(fdasd_anchor_t *anc, enum fdasd_failure why, char *str)
|
|
||||||
static int
|
|
||||||
read_line(void)
|
|
||||||
{
|
|
||||||
- bzero(line_buffer, LINE_LENGTH);
|
|
||||||
line_ptr = line_buffer;
|
|
||||||
if (!fgets(line_buffer, LINE_LENGTH, stdin))
|
|
||||||
return 0;
|
|
||||||
+ line_buffer[LINE_LENGTH-1] = 0;
|
|
||||||
while (*line_ptr && !isgraph(*line_ptr))
|
|
||||||
line_ptr++;
|
|
||||||
return *line_ptr;
|
|
||||||
@@ -312,6 +312,10 @@ fdasd_partition_type (char *str)
|
|
||||||
strcpy(str, "Linux native");
|
|
||||||
else if (strncmp("SWAP ", str, 6) == 0)
|
|
||||||
strcpy(str, "Linux swap");
|
|
||||||
+ else if (strncmp("RAID ", str, 6) == 0)
|
|
||||||
+ strcpy(str, "Linux Raid");
|
|
||||||
+ else if (strncmp("LVM ", str, 6) == 0)
|
|
||||||
+ strcpy(str, "Linux LVM");
|
|
||||||
else
|
|
||||||
strcpy(str, "unknown");
|
|
||||||
|
|
||||||
@@ -1122,14 +1126,24 @@ fdasd_write_vtoc_labels (fdasd_anchor_t *anc)
|
|
||||||
strncpy(c1, s2, 31);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
+ char str[20];
|
|
||||||
char *tmp = strstr(ch, "SWAP");
|
|
||||||
+ char *tmp1 = strstr(ch, "RAID");
|
|
||||||
|
|
||||||
/* create a new data set name */
|
|
||||||
while (getpos(anc, k) > -1)
|
|
||||||
k++;
|
|
||||||
|
|
||||||
setpos(anc, k, i-1);
|
|
||||||
-
|
|
||||||
+
|
|
||||||
+ strncpy(s2, ch, 44);
|
|
||||||
+ s2[44]=0;
|
|
||||||
+ vtoc_ebcdic_dec(s2, s2, 44);
|
|
||||||
+ c2 = strstr(s2, "PART");
|
|
||||||
+ if (c2 != NULL) strncpy(str, c2+=9, 6);
|
|
||||||
+ str[6] = '\0';
|
|
||||||
+ fdasd_partition_type(str);
|
|
||||||
+
|
|
||||||
strncpy(ch, "LINUX.V "
|
|
||||||
" ", 44);
|
|
||||||
|
|
||||||
@@ -1145,10 +1159,21 @@ fdasd_write_vtoc_labels (fdasd_anchor_t *anc)
|
|
||||||
strncpy(c1, dsno, 4);
|
|
||||||
|
|
||||||
c1 += 4;
|
|
||||||
- if (tmp)
|
|
||||||
- strncpy(c1, ".SWAP", 5);
|
|
||||||
- else
|
|
||||||
- strncpy(c1, ".NATIVE", 7);
|
|
||||||
+ if (tmp || tmp1) {
|
|
||||||
+ if (tmp)
|
|
||||||
+ strncpy(c1, ".SWAP", 5);
|
|
||||||
+ if (tmp1)
|
|
||||||
+ strncpy(c1, ".RAID", 5);
|
|
||||||
+ } else {
|
|
||||||
+ if (strcmp("unknown", str) == 0) {
|
|
||||||
+ strncpy(c1, ".NATIVE", 7);
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ strncpy(c1, ".", 1);
|
|
||||||
+ strncpy(c1+1, c2, 6);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
}
|
|
||||||
vtoc_ebcdic_enc(ch, ch, 44);
|
|
||||||
if (anc->verbose) printf("%2x ", part_info->f1->DS1FMTID);
|
|
||||||
@@ -1433,9 +1458,10 @@ fdasd_change_part_type (fdasd_anchor_t *anc)
|
|
||||||
|
|
||||||
printf("current partition type is: %s\n\n", fdasd_partition_type(str));
|
|
||||||
printf(" 1 Linux native\n" \
|
|
||||||
- " 2 Linux swap\n\n");
|
|
||||||
+ " 2 Linux swap\n" \
|
|
||||||
+ " 3 Linux raid\n\n");
|
|
||||||
part_type = 0;
|
|
||||||
- while ((part_type < 1) || (part_type > 2)) {
|
|
||||||
+ while ((part_type < 1) || (part_type > 3)) {
|
|
||||||
while (!isdigit(part_type =
|
|
||||||
read_char("new partition type: ")));
|
|
||||||
part_type -= 48;
|
|
||||||
@@ -1448,6 +1474,9 @@ fdasd_change_part_type (fdasd_anchor_t *anc)
|
|
||||||
case 2:
|
|
||||||
strncpy(str, "SWAP ", 6);
|
|
||||||
break;
|
|
||||||
+ case 3:
|
|
||||||
+ strncpy(str, "RAID ", 6);
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
printf("'%d' is not supported!\n", part_type);
|
|
||||||
}
|
|
||||||
@@ -1625,7 +1654,7 @@ fdasd_process_invalid_vtoc(fdasd_anchor_t *anc)
|
|
||||||
static void
|
|
||||||
fdasd_process_valid_vtoc(fdasd_anchor_t *anc, unsigned long blk)
|
|
||||||
{
|
|
||||||
- int f1_counter = 0, f7_counter = 0, f5_counter = 0;
|
|
||||||
+ int f1_counter = 0, f7_counter = 0, f5_counter = 0, oldfmt = 0;
|
|
||||||
int i, part_no, f1_size = sizeof(format1_label_t);
|
|
||||||
partition_info_t *part_info = anc->first;
|
|
||||||
format1_label_t f1_label;
|
|
||||||
@@ -1677,14 +1706,26 @@ fdasd_process_valid_vtoc(fdasd_anchor_t *anc, unsigned long blk)
|
|
||||||
vtoc_ebcdic_enc(part_info->f1->DS1DSNAM,
|
|
||||||
part_info->f1->DS1DSNAM, 44);
|
|
||||||
|
|
||||||
- if ((part_no < 0) || (part_no >= USABLE_PARTITIONS))
|
|
||||||
+ /* this dasd has data set names 0000-0002
|
|
||||||
+ but we use now 0001-0003 */
|
|
||||||
+ if (part_no == -1)
|
|
||||||
+ oldfmt++;
|
|
||||||
+
|
|
||||||
+ if (((oldfmt == 0) && (part_no < 0))
|
|
||||||
+ || (part_no >= USABLE_PARTITIONS))
|
|
||||||
printf("WARNING: partition number (%i) found "
|
|
||||||
"in data set name of an existing "
|
|
||||||
"partition\ndoes not match range of "
|
|
||||||
"possible partition numbers (1-%d)\n\n",
|
|
||||||
part_no + 1, USABLE_PARTITIONS);
|
|
||||||
- else
|
|
||||||
- setpos(anc, part_no, f1_counter);
|
|
||||||
+ else {
|
|
||||||
+ if (oldfmt) /* correct +1 */ {
|
|
||||||
+ setpos(anc, part_no+1, f1_counter);
|
|
||||||
+ printf("Correcting f1 header number!\n");
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ setpos(anc, part_no, f1_counter);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
part_info = part_info->next;
|
|
||||||
f1_counter++;
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
|||||||
From 1efcfe8d7ad20f7a3f584628375da60682b4579c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Thu, 23 Apr 2009 15:28:06 +0200
|
|
||||||
Subject: [PATCH 5/9] don't create automenu when default menu exists
|
|
||||||
|
|
||||||
---
|
|
||||||
zipl/src/job.c | 25 +++++++++++++++----------
|
|
||||||
1 files changed, 15 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/zipl/src/job.c b/zipl/src/job.c
|
|
||||||
index 6a526e4..89c8c23 100644
|
|
||||||
--- a/zipl/src/job.c
|
|
||||||
+++ b/zipl/src/job.c
|
|
||||||
@@ -1441,6 +1441,8 @@ get_job_from_config_file(struct command_line* cmdline, struct job_data* job)
|
|
||||||
struct scan_token* scan, *nscan;
|
|
||||||
char* filename;
|
|
||||||
char* source;
|
|
||||||
+ char* default_section;
|
|
||||||
+ int is_menu;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
/* Read configuration file */
|
|
||||||
@@ -1470,20 +1472,23 @@ get_job_from_config_file(struct command_line* cmdline, struct job_data* job)
|
|
||||||
scan_free(scan);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- if (cmdline->automenu) {
|
|
||||||
- nscan = create_fake_menu(scan);
|
|
||||||
- if (nscan == NULL) {
|
|
||||||
- scan_free(scan);
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
- scan = nscan;
|
|
||||||
- }
|
|
||||||
+
|
|
||||||
+ /* disable automenu iff default menu exists */
|
|
||||||
+ rc = get_default_section(scan, &default_section, &is_menu);
|
|
||||||
+ if (!rc && is_menu)
|
|
||||||
+ cmdline->automenu = 0;
|
|
||||||
|
|
||||||
/* Get job from config file data */
|
|
||||||
if (cmdline->menu != NULL || cmdline->automenu) {
|
|
||||||
- if (cmdline->automenu)
|
|
||||||
+ if (cmdline->automenu) {
|
|
||||||
+ nscan = create_fake_menu(scan);
|
|
||||||
+ if (nscan == NULL) {
|
|
||||||
+ scan_free(scan);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+ scan = nscan;
|
|
||||||
cmdline->menu = misc_strdup("rh-automatic-menu");
|
|
||||||
+ }
|
|
||||||
rc = get_menu_job(scan, cmdline->menu, job);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From 894de5382653e4389dc8490f2ee4a2a9c59eb86d Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Fri, 19 Jun 2009 10:01:30 +0200
|
|
||||||
Subject: [PATCH 6/9] s390-tools-1.8.1-zipl-kdump-man
|
|
||||||
|
|
||||||
Description: Add kdump kernel installation instruction to zipl man page.
|
|
||||||
Symptom: User wants to prepare SCSI disk for dump, but has not installed
|
|
||||||
the kdump kernel rpm.
|
|
||||||
Problem: The installation of the kdump kernel rpm is prereq for preparing
|
|
||||||
a SCSI dump disk for dump.
|
|
||||||
Solution: Document that in the zipl man page.
|
|
||||||
---
|
|
||||||
zipl/man/zipl.8 | 2 ++
|
|
||||||
1 files changed, 2 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/zipl/man/zipl.8 b/zipl/man/zipl.8
|
|
||||||
index 6ebf240..6df6026 100644
|
|
||||||
--- a/zipl/man/zipl.8
|
|
||||||
+++ b/zipl/man/zipl.8
|
|
||||||
@@ -176,6 +176,8 @@ will be incomplete.
|
|
||||||
It is not possible to specify both this parameter and the name of a menu
|
|
||||||
or configuration section on the command line at the same time.
|
|
||||||
|
|
||||||
+.B Note that before using this option the "kernel-kdump" rpm has to be
|
|
||||||
+.B installed.
|
|
||||||
.TP
|
|
||||||
.BR "\-M <DUMPLIST[,SIZE]>" " or " "--mvdump=<DUMPLIST[,SIZE]>"
|
|
||||||
Install a multi-volume dump record on each device associated with one of the
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
From 80e1e88e108b774c7aa7c201326f1a92cf1b7e35 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Wed, 26 Aug 2009 14:21:14 +0200
|
|
||||||
Subject: [PATCH 7/9] s390-tools-1.8.1-lszfcp-perf
|
|
||||||
|
|
||||||
---
|
|
||||||
zconf/lszfcp | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/zconf/lszfcp b/zconf/lszfcp
|
|
||||||
index d0bf84f..a872d05 100755
|
|
||||||
--- a/zconf/lszfcp
|
|
||||||
+++ b/zconf/lszfcp
|
|
||||||
@@ -233,7 +233,7 @@ show_devices()
|
|
||||||
# Differentiate old and new sysfs layout
|
|
||||||
if $FC_CLASS; then
|
|
||||||
SCSI_DEVICE_LIST=`ls -d \
|
|
||||||
- $SYSFS/devices/css0/*/*/host*/rport*/target*/*/ \
|
|
||||||
+ $SYSFS/bus/ccw/drivers/zfcp/*/host*/rport*/target*/*/ \
|
|
||||||
2>/dev/null |grep -P '\d+:\d+:\d+:\d+'`
|
|
||||||
else
|
|
||||||
SCSI_DEVICE_LIST=`ls -d $SYSFS/devices/css0/*/*/host*/*/`
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From d0c06736586d8f85f2e7c64291f3f289c12a0caa Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Thu, 24 Sep 2009 09:12:39 +0200
|
|
||||||
Subject: [PATCH 8/9] fix string overflow in vtoc_volume_label_init
|
|
||||||
|
|
||||||
Originaly it tries to copy a 84B string into 4B field and reset also
|
|
||||||
the other fields thru the overflow. This doesn't work with recent GCC
|
|
||||||
and the security-related compile flags that are used in Fedora.
|
|
||||||
---
|
|
||||||
libvtoc/vtoc.c | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/libvtoc/vtoc.c b/libvtoc/vtoc.c
|
|
||||||
index 62a02a0..cebd5a4 100644
|
|
||||||
--- a/libvtoc/vtoc.c
|
|
||||||
+++ b/libvtoc/vtoc.c
|
|
||||||
@@ -326,7 +326,7 @@ void vtoc_volume_label_init (volume_label_t *vlabel)
|
|
||||||
{
|
|
||||||
sprintf(buffer, "%84s", " ");
|
|
||||||
vtoc_ebcdic_enc(buffer, buffer, 84);
|
|
||||||
- strncpy(vlabel->volkey, buffer, 84);
|
|
||||||
+ memcpy(vlabel, buffer, 84);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From 1697d4f40be133c78cd09fb0af14af22e8c6219e Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Sun, 4 Oct 2009 17:46:16 +0200
|
|
||||||
Subject: [PATCH 9/9] change default load address for ramdisk
|
|
||||||
|
|
||||||
The default load address for the initial ramdisk is changed from
|
|
||||||
0x800000 to 0x2000000 to allow larger kernels to be loaded.
|
|
||||||
---
|
|
||||||
zipl/include/zipl.h | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/zipl/include/zipl.h b/zipl/include/zipl.h
|
|
||||||
index 1f70e48..d2d26dd 100644
|
|
||||||
--- a/zipl/include/zipl.h
|
|
||||||
+++ b/zipl/include/zipl.h
|
|
||||||
@@ -22,7 +22,7 @@
|
|
||||||
#define DEFAULT_PARMFILE_ADDRESS 0x1000LL
|
|
||||||
#define DEFAULT_STAGE3_ADDRESS 0xa000LL
|
|
||||||
#define DEFAULT_IMAGE_ADDRESS 0x10000LL
|
|
||||||
-#define DEFAULT_RAMDISK_ADDRESS 0x800000LL
|
|
||||||
+#define DEFAULT_RAMDISK_ADDRESS 0x2000000LL
|
|
||||||
|
|
||||||
#define PSW_ADDRESS_MASK 0x000000007fffffffLL
|
|
||||||
#define PSW_LOAD 0x0008000080000000LL
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,189 +0,0 @@
|
|||||||
From 7cd1f2254e27cae8e061d1b42fa6c78bc10a5f39 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Thu, 8 Oct 2009 10:29:23 +0200
|
|
||||||
Subject: [PATCH] improve mon_statd init script
|
|
||||||
|
|
||||||
- stop: do not print error messages if a daemon is not configured
|
|
||||||
- start: do not load module if no daemon is configured
|
|
||||||
- remove useless newlines
|
|
||||||
---
|
|
||||||
etc/init.d/mon_statd | 113 ++++++++++++++++++++++++++++----------------------
|
|
||||||
1 files changed, 64 insertions(+), 49 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/etc/init.d/mon_statd b/etc/init.d/mon_statd
|
|
||||||
index 4d84b5b..60bcf00 100755
|
|
||||||
--- a/etc/init.d/mon_statd
|
|
||||||
+++ b/etc/init.d/mon_statd
|
|
||||||
@@ -22,7 +22,6 @@ PROCD_PATH=/usr/sbin/$PROCD
|
|
||||||
CONFIG_FILE=/etc/sysconfig/$DAEMON
|
|
||||||
FSSTATD_PID_FILE=/var/run/$FSSTATD.pid
|
|
||||||
PROCD_PID_FILE=/var/run/$PROCD.pid
|
|
||||||
-RETVAL=0
|
|
||||||
|
|
||||||
# source function library
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
@@ -32,68 +31,81 @@ if [ -f $CONFIG_FILE ]; then
|
|
||||||
. $CONFIG_FILE
|
|
||||||
fi
|
|
||||||
|
|
||||||
-start()
|
|
||||||
+load_kernel_module()
|
|
||||||
{
|
|
||||||
if [ ! -e /dev/monwriter ]; then
|
|
||||||
echo "Loading monwriter module..."
|
|
||||||
modprobe monwriter 2>&1
|
|
||||||
- if [ "$?" -ne 0 ]; then
|
|
||||||
+ if [ $? -ne 0 ]; then
|
|
||||||
+ exit 1
|
|
||||||
+ fi
|
|
||||||
+ udevsettle
|
|
||||||
+ if [ $? -ne 0 ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
- while [ ! -e /dev/monwriter ]; do
|
|
||||||
- sleep 0
|
|
||||||
- done
|
|
||||||
fi
|
|
||||||
+}
|
|
||||||
|
|
||||||
- if [ ! -f $FSSTATD_PID_FILE -a "$FSSTAT" = "yes" ]; then
|
|
||||||
- echo -n $"Starting $FSSTATD:"
|
|
||||||
- $FSSTATD_PATH -i $FSSTAT_INTERVAL
|
|
||||||
- if [ $? == 0 ]; then
|
|
||||||
+start_daemon()
|
|
||||||
+{
|
|
||||||
+ local daemon_name=$1
|
|
||||||
+ local daemon_interval=$2
|
|
||||||
+ local daemon_pid_file=$3
|
|
||||||
+ local daemon_path=$4
|
|
||||||
+
|
|
||||||
+ if [ ! -f $daemon_pid_file ]; then
|
|
||||||
+ load_kernel_module
|
|
||||||
+ echo -n "Starting $daemon_name:"
|
|
||||||
+ $daemon_path -i $daemon_interval
|
|
||||||
+ if [ $? -eq 0 ]; then
|
|
||||||
touch /var/lock/subsys/mon_statd
|
|
||||||
log_success_msg
|
|
||||||
else
|
|
||||||
log_failure_msg
|
|
||||||
fi
|
|
||||||
- elif [ "$FSSTAT" = "yes" ]; then
|
|
||||||
- echo "$FSSTATD (pid $(cat $FSSTATD_PID_FILE)) is already running..."
|
|
||||||
+ else
|
|
||||||
+ echo "$daemon_name (pid $(cat $daemon_pid_file)) is already running..."
|
|
||||||
+ fi
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+start()
|
|
||||||
+{
|
|
||||||
+ if [ "$FSSTAT" = "yes" ]; then
|
|
||||||
+ start_daemon $FSSTATD $FSSTAT_INTERVAL $FSSTATD_PID_FILE \
|
|
||||||
+ $FSSTATD_PATH
|
|
||||||
fi
|
|
||||||
|
|
||||||
- if [ ! -f $PROCD_PID_FILE -a "$PROC" = "yes" ]; then
|
|
||||||
- echo -n $"Starting $PROCD:"
|
|
||||||
- $PROCD_PATH -i $PROC_INTERVAL
|
|
||||||
- if [ $? == 0 ]; then
|
|
||||||
- touch /var/lock/subsys/mon_statd
|
|
||||||
- log_success_msg
|
|
||||||
- else
|
|
||||||
- log_failure_msg
|
|
||||||
- fi
|
|
||||||
- elif [ "$PROC" = "yes" ]; then
|
|
||||||
- echo "$PROCD (pid $(cat $PROCD_PID_FILE)) is already running..."
|
|
||||||
+ if [ "$PROC" = "yes" ]; then
|
|
||||||
+ start_daemon $PROCD $PROC_INTERVAL $PROCD_PID_FILE \
|
|
||||||
+ $PROCD_PATH
|
|
||||||
fi
|
|
||||||
- echo
|
|
||||||
}
|
|
||||||
|
|
||||||
-stop()
|
|
||||||
+stop_daemon()
|
|
||||||
{
|
|
||||||
- echo -n $"Stopping $FSSTATD:"
|
|
||||||
- if [ -f $FSSTATD_PID_FILE ]; then
|
|
||||||
- killproc $FSSTATD_PATH -TERM
|
|
||||||
+ local daemon_name=$1
|
|
||||||
+ local daemon_pid_file=$2
|
|
||||||
+ local daemon_path=$3
|
|
||||||
+
|
|
||||||
+ echo -n "Stopping $daemon_name:"
|
|
||||||
+ if [ -f $daemon_pid_file ]; then
|
|
||||||
+ killproc $daemon_path -TERM
|
|
||||||
log_success_msg
|
|
||||||
- rm -f $FSSTATD_PID_FILE
|
|
||||||
+ rm -f $daemon_pid_file
|
|
||||||
else
|
|
||||||
log_failure_msg
|
|
||||||
fi
|
|
||||||
+}
|
|
||||||
|
|
||||||
- echo -n $"Stopping $PROCD:"
|
|
||||||
- if [ -f $PROCD_PID_FILE ]; then
|
|
||||||
- killproc $PROCD_PATH -TERM
|
|
||||||
- log_success_msg
|
|
||||||
- rm -f $PROCD_PID_FILE
|
|
||||||
- else
|
|
||||||
- log_failure_msg
|
|
||||||
+stop()
|
|
||||||
+{
|
|
||||||
+ if [ "$FSSTAT" = "yes" ]; then
|
|
||||||
+ stop_daemon $FSSTATD $FSSTATD_PID_FILE $FSSTATD_PATH
|
|
||||||
+ fi
|
|
||||||
+ if [ "$PROC" = "yes" ]; then
|
|
||||||
+ stop_daemon $PROCD $PROCD_PID_FILE $PROCD_PATH
|
|
||||||
fi
|
|
||||||
rm -f /var/lock/subsys/mon_statd
|
|
||||||
- echo
|
|
||||||
}
|
|
||||||
|
|
||||||
restart() {
|
|
||||||
@@ -101,20 +113,23 @@ restart() {
|
|
||||||
start
|
|
||||||
}
|
|
||||||
|
|
||||||
-status()
|
|
||||||
+status_daemon()
|
|
||||||
{
|
|
||||||
- if [ ! -f $FSSTATD_PID_FILE ]; then
|
|
||||||
- echo "$FSSTATD is not running."
|
|
||||||
- else
|
|
||||||
- echo "$FSSTATD (pid $(cat $FSSTATD_PID_FILE), interval: $FSSTAT_INTERVAL) is running."
|
|
||||||
- fi
|
|
||||||
+ local daemon_name=$1
|
|
||||||
+ local daemon_pid_file=$2
|
|
||||||
+ local daemon_interval=$3
|
|
||||||
|
|
||||||
- if [ ! -f $PROCD_PID_FILE ]; then
|
|
||||||
- echo "$PROCD is not running."
|
|
||||||
+ if [ ! -f $daemon_pid_file ]; then
|
|
||||||
+ echo "$daemon_name is not running."
|
|
||||||
else
|
|
||||||
- echo "$PROCD (pid $(cat $PROCD_PID_FILE), interval: $PROC_INTERVAL) is running."
|
|
||||||
+ echo "$daemon_name (pid $(cat $daemon_pid_file), interval: $daemon_interval) is running."
|
|
||||||
fi
|
|
||||||
- echo
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+status()
|
|
||||||
+{
|
|
||||||
+ status_daemon $FSSTATD $FSSTATD_PID_FILE $FSSTAT_INTERVAL
|
|
||||||
+ status_daemon $PROCD $PROCD_PID_FILE $PROC_INTERVAL
|
|
||||||
}
|
|
||||||
|
|
||||||
# How are we called?
|
|
||||||
@@ -133,7 +148,7 @@ case "$1" in
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: $DAEMON {start|stop|status|restart|reload}"
|
|
||||||
- RETVAL=1
|
|
||||||
+ exit 1
|
|
||||||
esac
|
|
||||||
|
|
||||||
-exit $RETVAL
|
|
||||||
+exit 0
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
From 5707bfdf0aac985e8e82c9a5004eb458d1d79801 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Fri, 30 Oct 2009 11:23:08 +0100
|
|
||||||
Subject: [PATCH] update readahead value for better performance
|
|
||||||
|
|
||||||
Description: dasd,zfcp: Add udev rule to set increased "default max readahead"
|
|
||||||
Symptom: Sequential read performance on disks is not as good as it could be.
|
|
||||||
Problem: The current "default max readahead" defined by the kernel is too
|
|
||||||
small for s390 (128 kb).
|
|
||||||
Solution: Add udev rule to set a better default value (512 kb). This will
|
|
||||||
increase sequential read performance up to 40%.
|
|
||||||
---
|
|
||||||
etc/udev/rules.d/60-readahead.rules | 13 +++++++++++++
|
|
||||||
1 files changed, 13 insertions(+), 0 deletions(-)
|
|
||||||
create mode 100644 etc/udev/rules.d/60-readahead.rules
|
|
||||||
|
|
||||||
diff --git a/etc/udev/rules.d/60-readahead.rules b/etc/udev/rules.d/60-readahead.rules
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..3133c66
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/etc/udev/rules.d/60-readahead.rules
|
|
||||||
@@ -0,0 +1,13 @@
|
|
||||||
+#
|
|
||||||
+# Rules to set an increased default max readahead size for s390 disk devices
|
|
||||||
+# This file should be installed in /etc/udev/rules.d
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+SUBSYSTEM!="block", GOTO="ra_end"
|
|
||||||
+
|
|
||||||
+ACTION!="add", GOTO="ra_end"
|
|
||||||
+# on device add set initial readahead to 512 (instead of in kernel 128)
|
|
||||||
+KERNEL=="sd*[!0-9]", ATTR{queue/read_ahead_kb}="512"
|
|
||||||
+KERNEL=="dasd*[!0-9]", ATTR{queue/read_ahead_kb}="512"
|
|
||||||
+
|
|
||||||
+LABEL="ra_end"
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
From e9c5f5e15122b143f5f202e9782773321f8cf6b9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Fri, 13 Nov 2009 10:46:57 +0100
|
|
||||||
Subject: [PATCH 12/14] fix multipath device detection in ziomon
|
|
||||||
|
|
||||||
Description: ziomon: Fix multipath device detection
|
|
||||||
Symptom: Running ziomon with a valid multipath device like
|
|
||||||
/dev/mapper/36005076303ffc56200000000000010cc
|
|
||||||
fails with "ziomon: The following devices do not seem
|
|
||||||
to exist:".
|
|
||||||
Problem: The output from multipath -l is not appended correctly to
|
|
||||||
the mp_arr array.
|
|
||||||
Solution: Properly initializing mp_arr to an empty array fixes this.
|
|
||||||
---
|
|
||||||
ziomon/ziomon | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/ziomon/ziomon b/ziomon/ziomon
|
|
||||||
index 7449843..924c1dd 100755
|
|
||||||
--- a/ziomon/ziomon
|
|
||||||
+++ b/ziomon/ziomon
|
|
||||||
@@ -471,7 +471,7 @@ function clean_devices() {
|
|
||||||
function check_for_multipath_devices() {
|
|
||||||
local i;
|
|
||||||
local j;
|
|
||||||
- local mp_arr;
|
|
||||||
+ local mp_arr=();
|
|
||||||
local line;
|
|
||||||
local devices_basenames;
|
|
||||||
local tmp;
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,119 +0,0 @@
|
|||||||
From 4770ba2827a5c582c6376139f1ec2d10519779e2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Fri, 13 Nov 2009 10:48:17 +0100
|
|
||||||
Subject: [PATCH 13/14] zipl - handle status during ipl
|
|
||||||
|
|
||||||
Description: zipl: handle status during ipl
|
|
||||||
Symptom: You encounter an error during IPL with "disabled wait" message.
|
|
||||||
Problem: During the IPL sequence the subchannel of the IPL device has
|
|
||||||
to be enabled. If there is a status pending or busy condition
|
|
||||||
on the subchannel the IPL code abborts the IPL and goes into
|
|
||||||
disabled wait.
|
|
||||||
Solution: To resolve the problem the IPL code accepts the status pending
|
|
||||||
or busy condition on the subchannel and does up to 256 retries.
|
|
||||||
---
|
|
||||||
zipl/boot/common.S | 65 ++++++++++++++++++++++++++++++++++-----------------
|
|
||||||
1 files changed, 43 insertions(+), 22 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/zipl/boot/common.S b/zipl/boot/common.S
|
|
||||||
index 620fed9..fa45e5a 100644
|
|
||||||
--- a/zipl/boot/common.S
|
|
||||||
+++ b/zipl/boot/common.S
|
|
||||||
@@ -6,6 +6,7 @@
|
|
||||||
#
|
|
||||||
|
|
||||||
# some definitions from kernel land
|
|
||||||
+__LC_IRB = 0x0300
|
|
||||||
__LC_IPLDEV = 0xC6C
|
|
||||||
__LC_PANIC_MAGIC= 0xE00
|
|
||||||
|
|
||||||
@@ -186,23 +187,33 @@ _load_blocklist:
|
|
||||||
_enable_device:
|
|
||||||
stm %r6,%r15,24(%r15)
|
|
||||||
basr %r13,0 # base register
|
|
||||||
-0: s %r15,1f-0b(%r13)
|
|
||||||
+0: s %r15,4f-0b(%r13)
|
|
||||||
lr %r1,%r2
|
|
||||||
- l %r2,4f-0b(%r13) # set panik code early
|
|
||||||
- stsch 2f-0b(%r13)
|
|
||||||
- oi 2f-0b+5(%r13),0x84 # enable ssch and multipath mode
|
|
||||||
- msch 2f-0b(%r13)
|
|
||||||
- bnz _panik-0b(%r13) # subchannel busy or in error ?
|
|
||||||
- lctl %c6,%c6,3f-0b(%r13) # enable all interrupt classes
|
|
||||||
+ l %r2,7f-0b(%r13) # set panik code early
|
|
||||||
+ stsch 5f-0b(%r13)
|
|
||||||
+ brc 1,3f # panic if not operational
|
|
||||||
+ oi 5f-0b+5(%r13),0x80 # enable subchannel
|
|
||||||
+ lhi %r6,256 # r6 retry counter
|
|
||||||
+1: # modify subchannel
|
|
||||||
+ msch 5f-0b(%r13)
|
|
||||||
+ brc 6,2f # status pending or busy
|
|
||||||
+ brc 1,3f # panic if not operational
|
|
||||||
+ lctl %c6,%c6,6f-0b(%r13) # enable all interrupt classes
|
|
||||||
sr %r2,%r2
|
|
||||||
- ic %r2,10+2f-0b(%r13) # return lpum in r2
|
|
||||||
+ ic %r2,10+5f-0b(%r13) # return lpum in r2
|
|
||||||
lm %r6,%r15,120(%r15)
|
|
||||||
br %r14
|
|
||||||
-1: .long 96
|
|
||||||
+2: # clear status and retry
|
|
||||||
+ tsch __LC_IRB
|
|
||||||
+ brc 1,3f # panic if not operational
|
|
||||||
+ brct %r6,1b # retry
|
|
||||||
+3: # panic
|
|
||||||
+ b _panik-0b(%r13) # panic
|
|
||||||
+4: .long 96
|
|
||||||
.align 8
|
|
||||||
-2: .fill 64,1,0
|
|
||||||
-3: .long 0xff000000 # CR6 initial value
|
|
||||||
-4: .long EENABLE_DEV
|
|
||||||
+5: .fill 64,1,0
|
|
||||||
+6: .long 0xff000000 # CR6 initial value
|
|
||||||
+7: .long EENABLE_DEV
|
|
||||||
|
|
||||||
#
|
|
||||||
# Disable I/O on the ipl device.
|
|
||||||
@@ -211,20 +222,30 @@ _enable_device:
|
|
||||||
_disable_device:
|
|
||||||
stm %r6,%r15,24(%r15)
|
|
||||||
basr %r13,0 # base register
|
|
||||||
-0: s %r15,1f-0b(%r13)
|
|
||||||
+0: s %r15,4f-0b(%r13)
|
|
||||||
lr %r1,%r2
|
|
||||||
- l %r2,3f-0b(%r13) # set panik code early
|
|
||||||
- lctl %c6,%c6,2f-0b(%r13) # disable all interrupt classes
|
|
||||||
- stsch 2f-0b(%r13)
|
|
||||||
- ni 2f-0b+5(%r13),0x7B # disable ssch and multipath mode
|
|
||||||
- msch 2f-0b(%r13)
|
|
||||||
- bnz _panik-0b(%r13) # subchannel busy or in error ?
|
|
||||||
+ l %r2,6f-0b(%r13) # set panik code early
|
|
||||||
+ lctl %c6,%c6,5f-0b(%r13) # disable all interrupt classes
|
|
||||||
+ stsch 5f-0b(%r13)
|
|
||||||
+ brc 1,3f # panic if not operational
|
|
||||||
+ ni 5f-0b+5(%r13),0x7F # disable subchannel
|
|
||||||
+ lhi %r6,256 # r6 retry counter
|
|
||||||
+1: # modify subchannel
|
|
||||||
+ msch 5f-0b(%r13)
|
|
||||||
+ brc 6,2f # status pending or busy
|
|
||||||
+ brc 1,3f # panic if not operational
|
|
||||||
lm %r6,%r15,120(%r15)
|
|
||||||
br %r14
|
|
||||||
-1: .long 96
|
|
||||||
+2: # clear status and retry
|
|
||||||
+ tsch __LC_IRB
|
|
||||||
+ brc 1,3f # panic if not operational
|
|
||||||
+ brct %r6,1b
|
|
||||||
+3: # panic
|
|
||||||
+ b _panik-0b(%r13) # panic
|
|
||||||
+4: .long 96
|
|
||||||
.align 8
|
|
||||||
-2: .long 0x00000000 # CR6 (all interrupts classes disabled)
|
|
||||||
-3: .long EDISABLE_DEV
|
|
||||||
+5: .long 0x00000000 # CR6 (all interrupts classes disabled)
|
|
||||||
+6: .long EDISABLE_DEV
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro io_subroutines
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
@ -1,285 +0,0 @@
|
|||||||
From 72168f2269dac94d25112e0ad548bd3fcdf907d9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Fri, 13 Nov 2009 10:49:37 +0100
|
|
||||||
Subject: [PATCH 14/14] dasdview, fdasd: fix floating point error for unformatted devices
|
|
||||||
|
|
||||||
When executed on an unformatted device the tools dasdview and fdasd
|
|
||||||
will end with an floating point exception error.
|
|
||||||
The reason for the error lies in the fact that we cannot rely on the
|
|
||||||
HDIO_GETGEO ioctl to report a correct number of cylinders and so we
|
|
||||||
compute the number of cylinders from the device size. However,
|
|
||||||
for unformatted devices the device size is zero and thus our
|
|
||||||
computation ends with a floating point exception.
|
|
||||||
To solve this issue read the correct number of cylinders from
|
|
||||||
the DASD device characteristics, which can be found in the data
|
|
||||||
returned by the BIODASDINFO ioctl.
|
|
||||||
---
|
|
||||||
dasdview/dasdview.c | 22 +++++++-------
|
|
||||||
dasdview/dasdview.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
fdasd/fdasd.c | 18 ++++++------
|
|
||||||
fdasd/fdasd.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
4 files changed, 168 insertions(+), 20 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/dasdview/dasdview.c b/dasdview/dasdview.c
|
|
||||||
index a74ae33..2909b16 100644
|
|
||||||
--- a/dasdview/dasdview.c
|
|
||||||
+++ b/dasdview/dasdview.c
|
|
||||||
@@ -169,7 +169,7 @@ static void
|
|
||||||
dasdview_get_info(dasdview_info_t *info)
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
- u_int64_t device_size;
|
|
||||||
+ struct dasd_eckd_characteristics *characteristics;
|
|
||||||
|
|
||||||
fd = open(info->device, O_RDONLY);
|
|
||||||
if (fd == -1)
|
|
||||||
@@ -201,16 +201,6 @@ dasdview_get_info(dasdview_info_t *info)
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (ioctl(fd, BLKGETSIZE64, &device_size) != 0) {
|
|
||||||
- close(fd);
|
|
||||||
- zt_error_print("dasdview: ioctl error\n" \
|
|
||||||
- "Could not retrieve device size information.\n");
|
|
||||||
- exit(-1);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- info->hw_cylinders = ((device_size / info->blksize)
|
|
||||||
- / info->geo.sectors) / info->geo.heads;
|
|
||||||
-
|
|
||||||
/* get disk information */
|
|
||||||
if (ioctl(fd, BIODASDINFO2, &info->dasd_info) == 0) {
|
|
||||||
info->dasd_info_version = 2;
|
|
||||||
@@ -223,6 +213,16 @@ dasdview_get_info(dasdview_info_t *info)
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ characteristics = (struct dasd_eckd_characteristics *)
|
|
||||||
+ &info->dasd_info.characteristics;
|
|
||||||
+ if (characteristics->no_cyl == LV_COMPAT_CYL &&
|
|
||||||
+ characteristics->long_no_cyl)
|
|
||||||
+ info->hw_cylinders = characteristics->long_no_cyl;
|
|
||||||
+ else
|
|
||||||
+ info->hw_cylinders = characteristics->no_cyl;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/dasdview/dasdview.h b/dasdview/dasdview.h
|
|
||||||
index 39e1228..5388592 100644
|
|
||||||
--- a/dasdview/dasdview.h
|
|
||||||
+++ b/dasdview/dasdview.h
|
|
||||||
@@ -72,6 +72,80 @@ typedef struct dasd_information2_t {
|
|
||||||
unsigned int reserved7; /* reserved for further use ,... */
|
|
||||||
} dasd_information2_t;
|
|
||||||
|
|
||||||
+struct dasd_eckd_characteristics {
|
|
||||||
+ unsigned short cu_type;
|
|
||||||
+ struct {
|
|
||||||
+ unsigned char support:2;
|
|
||||||
+ unsigned char async:1;
|
|
||||||
+ unsigned char reserved:1;
|
|
||||||
+ unsigned char cache_info:1;
|
|
||||||
+ unsigned char model:3;
|
|
||||||
+ } __attribute__ ((packed)) cu_model;
|
|
||||||
+ unsigned short dev_type;
|
|
||||||
+ unsigned char dev_model;
|
|
||||||
+ struct {
|
|
||||||
+ unsigned char mult_burst:1;
|
|
||||||
+ unsigned char RT_in_LR:1;
|
|
||||||
+ unsigned char reserved1:1;
|
|
||||||
+ unsigned char RD_IN_LR:1;
|
|
||||||
+ unsigned char reserved2:4;
|
|
||||||
+ unsigned char reserved3:8;
|
|
||||||
+ unsigned char defect_wr:1;
|
|
||||||
+ unsigned char XRC_supported:1;
|
|
||||||
+ unsigned char reserved4:1;
|
|
||||||
+ unsigned char striping:1;
|
|
||||||
+ unsigned char reserved5:4;
|
|
||||||
+ unsigned char cfw:1;
|
|
||||||
+ unsigned char reserved6:2;
|
|
||||||
+ unsigned char cache:1;
|
|
||||||
+ unsigned char dual_copy:1;
|
|
||||||
+ unsigned char dfw:1;
|
|
||||||
+ unsigned char reset_alleg:1;
|
|
||||||
+ unsigned char sense_down:1;
|
|
||||||
+ } __attribute__ ((packed)) facilities;
|
|
||||||
+ unsigned char dev_class;
|
|
||||||
+ unsigned char unit_type;
|
|
||||||
+ unsigned short no_cyl;
|
|
||||||
+ unsigned short trk_per_cyl;
|
|
||||||
+ unsigned char sec_per_trk;
|
|
||||||
+ unsigned char byte_per_track[3];
|
|
||||||
+ unsigned short home_bytes;
|
|
||||||
+ unsigned char formula;
|
|
||||||
+ union {
|
|
||||||
+ struct {
|
|
||||||
+ unsigned char f1;
|
|
||||||
+ unsigned short f2;
|
|
||||||
+ unsigned short f3;
|
|
||||||
+ } __attribute__ ((packed)) f_0x01;
|
|
||||||
+ struct {
|
|
||||||
+ unsigned char f1;
|
|
||||||
+ unsigned char f2;
|
|
||||||
+ unsigned char f3;
|
|
||||||
+ unsigned char f4;
|
|
||||||
+ unsigned char f5;
|
|
||||||
+ } __attribute__ ((packed)) f_0x02;
|
|
||||||
+ } __attribute__ ((packed)) factors;
|
|
||||||
+ unsigned short first_alt_trk;
|
|
||||||
+ unsigned short no_alt_trk;
|
|
||||||
+ unsigned short first_dia_trk;
|
|
||||||
+ unsigned short no_dia_trk;
|
|
||||||
+ unsigned short first_sup_trk;
|
|
||||||
+ unsigned short no_sup_trk;
|
|
||||||
+ unsigned char MDR_ID;
|
|
||||||
+ unsigned char OBR_ID;
|
|
||||||
+ unsigned char director;
|
|
||||||
+ unsigned char rd_trk_set;
|
|
||||||
+ unsigned short max_rec_zero;
|
|
||||||
+ unsigned char reserved1;
|
|
||||||
+ unsigned char RWANY_in_LR;
|
|
||||||
+ unsigned char factor6;
|
|
||||||
+ unsigned char factor7;
|
|
||||||
+ unsigned char factor8;
|
|
||||||
+ unsigned char reserved2[3];
|
|
||||||
+ unsigned char reserved3[6];
|
|
||||||
+ unsigned int long_no_cyl;
|
|
||||||
+} __attribute__ ((packed));
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* values to be used for dasd_information2_t.format
|
|
||||||
* 0x00: NOT formatted
|
|
||||||
diff --git a/fdasd/fdasd.c b/fdasd/fdasd.c
|
|
||||||
index a526d7f..8f7f5aa 100644
|
|
||||||
--- a/fdasd/fdasd.c
|
|
||||||
+++ b/fdasd/fdasd.c
|
|
||||||
@@ -2002,7 +2002,7 @@ fdasd_get_geometry (fdasd_anchor_t *anc)
|
|
||||||
int fd, blksize = 0;
|
|
||||||
dasd_information_t dasd_info;
|
|
||||||
char err_str[ERROR_STRING_SIZE];
|
|
||||||
- u_int64_t device_size;
|
|
||||||
+ struct dasd_eckd_characteristics *characteristics;
|
|
||||||
|
|
||||||
if ((fd = open(options.device,O_RDONLY)) < 0) {
|
|
||||||
snprintf(err_str, ERROR_STRING_SIZE,
|
|
||||||
@@ -2023,14 +2023,6 @@ fdasd_get_geometry (fdasd_anchor_t *anc)
|
|
||||||
"Could not retrieve blocksize information.");
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (ioctl(fd, BLKGETSIZE64, &device_size) != 0) {
|
|
||||||
- close(fd);
|
|
||||||
- fdasd_error(anc, unable_to_ioctl,
|
|
||||||
- "Could not retrieve device size information.");
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- anc->hw_cylinders = ((device_size / blksize) / geo.sectors) / geo.heads;
|
|
||||||
-
|
|
||||||
/* get disk type */
|
|
||||||
if (ioctl(fd, BIODASDINFO, &dasd_info) != 0) {
|
|
||||||
close(fd);
|
|
||||||
@@ -2038,6 +2030,14 @@ fdasd_get_geometry (fdasd_anchor_t *anc)
|
|
||||||
"Could not retrieve disk information.");
|
|
||||||
}
|
|
||||||
|
|
||||||
+ characteristics =
|
|
||||||
+ (struct dasd_eckd_characteristics *) &dasd_info.characteristics;
|
|
||||||
+ if (characteristics->no_cyl == LV_COMPAT_CYL &&
|
|
||||||
+ characteristics->long_no_cyl)
|
|
||||||
+ anc->hw_cylinders = characteristics->long_no_cyl;
|
|
||||||
+ else
|
|
||||||
+ anc->hw_cylinders = characteristics->no_cyl;
|
|
||||||
+
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
if (strncmp(dasd_info.type, "ECKD", 4) != 0) {
|
|
||||||
diff --git a/fdasd/fdasd.h b/fdasd/fdasd.h
|
|
||||||
index 107e486..8a1bfd0 100644
|
|
||||||
--- a/fdasd/fdasd.h
|
|
||||||
+++ b/fdasd/fdasd.h
|
|
||||||
@@ -43,6 +43,80 @@ typedef struct dasd_information_t {
|
|
||||||
char configuration_data[256]; /* from read_configuration_data */
|
|
||||||
} dasd_information_t;
|
|
||||||
|
|
||||||
+struct dasd_eckd_characteristics {
|
|
||||||
+ unsigned short cu_type;
|
|
||||||
+ struct {
|
|
||||||
+ unsigned char support:2;
|
|
||||||
+ unsigned char async:1;
|
|
||||||
+ unsigned char reserved:1;
|
|
||||||
+ unsigned char cache_info:1;
|
|
||||||
+ unsigned char model:3;
|
|
||||||
+ } __attribute__ ((packed)) cu_model;
|
|
||||||
+ unsigned short dev_type;
|
|
||||||
+ unsigned char dev_model;
|
|
||||||
+ struct {
|
|
||||||
+ unsigned char mult_burst:1;
|
|
||||||
+ unsigned char RT_in_LR:1;
|
|
||||||
+ unsigned char reserved1:1;
|
|
||||||
+ unsigned char RD_IN_LR:1;
|
|
||||||
+ unsigned char reserved2:4;
|
|
||||||
+ unsigned char reserved3:8;
|
|
||||||
+ unsigned char defect_wr:1;
|
|
||||||
+ unsigned char XRC_supported:1;
|
|
||||||
+ unsigned char reserved4:1;
|
|
||||||
+ unsigned char striping:1;
|
|
||||||
+ unsigned char reserved5:4;
|
|
||||||
+ unsigned char cfw:1;
|
|
||||||
+ unsigned char reserved6:2;
|
|
||||||
+ unsigned char cache:1;
|
|
||||||
+ unsigned char dual_copy:1;
|
|
||||||
+ unsigned char dfw:1;
|
|
||||||
+ unsigned char reset_alleg:1;
|
|
||||||
+ unsigned char sense_down:1;
|
|
||||||
+ } __attribute__ ((packed)) facilities;
|
|
||||||
+ unsigned char dev_class;
|
|
||||||
+ unsigned char unit_type;
|
|
||||||
+ unsigned short no_cyl;
|
|
||||||
+ unsigned short trk_per_cyl;
|
|
||||||
+ unsigned char sec_per_trk;
|
|
||||||
+ unsigned char byte_per_track[3];
|
|
||||||
+ unsigned short home_bytes;
|
|
||||||
+ unsigned char formula;
|
|
||||||
+ union {
|
|
||||||
+ struct {
|
|
||||||
+ unsigned char f1;
|
|
||||||
+ unsigned short f2;
|
|
||||||
+ unsigned short f3;
|
|
||||||
+ } __attribute__ ((packed)) f_0x01;
|
|
||||||
+ struct {
|
|
||||||
+ unsigned char f1;
|
|
||||||
+ unsigned char f2;
|
|
||||||
+ unsigned char f3;
|
|
||||||
+ unsigned char f4;
|
|
||||||
+ unsigned char f5;
|
|
||||||
+ } __attribute__ ((packed)) f_0x02;
|
|
||||||
+ } __attribute__ ((packed)) factors;
|
|
||||||
+ unsigned short first_alt_trk;
|
|
||||||
+ unsigned short no_alt_trk;
|
|
||||||
+ unsigned short first_dia_trk;
|
|
||||||
+ unsigned short no_dia_trk;
|
|
||||||
+ unsigned short first_sup_trk;
|
|
||||||
+ unsigned short no_sup_trk;
|
|
||||||
+ unsigned char MDR_ID;
|
|
||||||
+ unsigned char OBR_ID;
|
|
||||||
+ unsigned char director;
|
|
||||||
+ unsigned char rd_trk_set;
|
|
||||||
+ unsigned short max_rec_zero;
|
|
||||||
+ unsigned char reserved1;
|
|
||||||
+ unsigned char RWANY_in_LR;
|
|
||||||
+ unsigned char factor6;
|
|
||||||
+ unsigned char factor7;
|
|
||||||
+ unsigned char factor8;
|
|
||||||
+ unsigned char reserved2[3];
|
|
||||||
+ unsigned char reserved3[6];
|
|
||||||
+ unsigned int long_no_cyl;
|
|
||||||
+} __attribute__ ((packed));
|
|
||||||
+
|
|
||||||
/* Get information on a dasd device (enhanced) */
|
|
||||||
#define BIODASDINFO _IOR(DASD_IOCTL_LETTER,1,dasd_information_t)
|
|
||||||
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,376 +0,0 @@
|
|||||||
From 62fb535a68f1df693869e4361150259b42c6f211 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Thu, 10 Dec 2009 18:30:52 +0100
|
|
||||||
Subject: [PATCH 16/16] s390tools-1.8.2-lsreipl-nss
|
|
||||||
|
|
||||||
---
|
|
||||||
ipl_tools/ccw.c | 42 ++++++++++++++++---------------------
|
|
||||||
ipl_tools/chreipl.h | 9 +++++--
|
|
||||||
ipl_tools/fcp.c | 13 ++++++-----
|
|
||||||
ipl_tools/ipl.c | 57 +++++++++++++++++++++++++++++++-------------------
|
|
||||||
ipl_tools/main.c | 25 +++++++++++++++++-----
|
|
||||||
ipl_tools/system.c | 3 +-
|
|
||||||
6 files changed, 87 insertions(+), 62 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/ipl_tools/ccw.c b/ipl_tools/ccw.c
|
|
||||||
index 7959831..eef4550 100644
|
|
||||||
--- a/ipl_tools/ccw.c
|
|
||||||
+++ b/ipl_tools/ccw.c
|
|
||||||
@@ -52,22 +52,19 @@ int isccwdev(const char *devno)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-int get_ccw_devno_old_sysfs(char *device, char *devno)
|
|
||||||
+int get_ccw_devno_old_sysfs(char *device)
|
|
||||||
{
|
|
||||||
FILE *filp;
|
|
||||||
- int len, errorpath, rc;
|
|
||||||
+ int errorpath;
|
|
||||||
char path1[4096];
|
|
||||||
char buf[4096];
|
|
||||||
- char *match, *s1, *s2;
|
|
||||||
+ char *match = NULL, *s1, *s2;
|
|
||||||
|
|
||||||
errorpath = 1;
|
|
||||||
- rc = 0;
|
|
||||||
sprintf(path1, "/sys/block/%s/uevent", device);
|
|
||||||
filp = fopen(path1, "r");
|
|
||||||
- if (!filp) {
|
|
||||||
- rc = -1;
|
|
||||||
- return rc;
|
|
||||||
- }
|
|
||||||
+ if (!filp)
|
|
||||||
+ return -1;
|
|
||||||
/*
|
|
||||||
* the uevent file contains an entry like this:
|
|
||||||
* PHYSDEVPATH=/devices/css0/0.0.206a/0.0.7e78
|
|
||||||
@@ -77,16 +74,16 @@ int get_ccw_devno_old_sysfs(char *device, char *devno)
|
|
||||||
if (match != NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
+ fclose(filp);
|
|
||||||
+ if (!match)
|
|
||||||
+ return -1;
|
|
||||||
s1 = strchr(buf, '/');
|
|
||||||
s2 = strrchr(buf, '/');
|
|
||||||
- len = s2-s1;
|
|
||||||
- strncpy(devno, s2 + 1, sizeof(devno));
|
|
||||||
- devno[len] = '\0';
|
|
||||||
- fclose(filp);
|
|
||||||
+ strncpy(devno, s2 + 1, sizeof(devno) - 1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int get_ccw_devno_new_sysfs(char *device, char *devno)
|
|
||||||
+int get_ccw_devno_new_sysfs(char *device)
|
|
||||||
{
|
|
||||||
int len, errorpath, rc;
|
|
||||||
char path2[4096];
|
|
||||||
@@ -119,8 +116,7 @@ int get_ccw_devno_new_sysfs(char *device, char *devno)
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- strncpy(devno, s2 + 1, sizeof(devno));
|
|
||||||
- devno[len] = '\0';
|
|
||||||
+ strncpy(devno, s2 + 1, sizeof(devno) - 1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -134,16 +130,14 @@ int get_ccw_devno_new_sysfs(char *device, char *devno)
|
|
||||||
*
|
|
||||||
* This does not work when booting from tape
|
|
||||||
*/
|
|
||||||
-int get_ccw_devno(char *device, char *devno)
|
|
||||||
+int get_ccw_devno(char *device)
|
|
||||||
{
|
|
||||||
- if (get_ccw_devno_old_sysfs(device, devno) != 0) {
|
|
||||||
- if (get_ccw_devno_new_sysfs(device, devno) != 0) {
|
|
||||||
- fprintf(stderr, "%s: Failed to lookup the device number\n",
|
|
||||||
- name);
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- return 0;
|
|
||||||
+ if (get_ccw_devno_old_sysfs(device) == 0)
|
|
||||||
+ return 0;
|
|
||||||
+ if (get_ccw_devno_new_sysfs(device) == 0)
|
|
||||||
+ return 0;
|
|
||||||
+ fprintf(stderr, "%s: Failed to lookup the device number\n", name);
|
|
||||||
+ return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int get_ccw_dev(char *partition, char *device)
|
|
||||||
diff --git a/ipl_tools/chreipl.h b/ipl_tools/chreipl.h
|
|
||||||
index 19a83eb..37807a7 100644
|
|
||||||
--- a/ipl_tools/chreipl.h
|
|
||||||
+++ b/ipl_tools/chreipl.h
|
|
||||||
@@ -34,6 +34,9 @@ extern char saction[8];
|
|
||||||
extern char name[256];
|
|
||||||
extern int action;
|
|
||||||
|
|
||||||
+#define IPL_TYPE_LEN_MAX 100
|
|
||||||
+#define NSS_NAME_LEN_MAX 8
|
|
||||||
+
|
|
||||||
#define ACT_CCW 1
|
|
||||||
#define ACT_FCP 2
|
|
||||||
#define ACT_NODE 3
|
|
||||||
@@ -63,10 +66,10 @@ int is_valid_case(char *c);
|
|
||||||
int is_valid_action(char *action);
|
|
||||||
void parse_shutdown_options(int argc, char **argv);
|
|
||||||
void strlow(char *s);
|
|
||||||
-int get_ccw_devno(char *device, char *devno);
|
|
||||||
-int get_reipl_type(void);
|
|
||||||
+int get_ccw_devno(char *device);
|
|
||||||
+int get_reipl_type(char *reipltype);
|
|
||||||
void parse_lsreipl_options(int argc, char **argv);
|
|
||||||
-int get_ipl_type();
|
|
||||||
+int get_ipl_type(char *reipltype);
|
|
||||||
int get_ipl_loadparam(void);
|
|
||||||
void print_ipl_settings(void);
|
|
||||||
int get_sa(char *action, char *file);
|
|
||||||
diff --git a/ipl_tools/fcp.c b/ipl_tools/fcp.c
|
|
||||||
index 86fa95b..7a8b4c5 100644
|
|
||||||
--- a/ipl_tools/fcp.c
|
|
||||||
+++ b/ipl_tools/fcp.c
|
|
||||||
@@ -33,12 +33,11 @@
|
|
||||||
|
|
||||||
/*
|
|
||||||
* return the current reipl type from /sys/firmware/reipl/reipl_type
|
|
||||||
- * 0 = fcp, 1 = ccw, -1, error
|
|
||||||
+ * 0 = fcp, 1 = ccw, 2 = nss, -1 = unknown
|
|
||||||
*/
|
|
||||||
-int get_reipl_type(void)
|
|
||||||
+int get_reipl_type(char *reipltype)
|
|
||||||
{
|
|
||||||
FILE *filp;
|
|
||||||
- char reipltype[4];
|
|
||||||
char path[4096];
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
@@ -49,7 +48,7 @@ int get_reipl_type(void)
|
|
||||||
fprintf(stderr, "%s: Can not open /sys/firmware/"
|
|
||||||
"reipl/reipl_type: ", name);
|
|
||||||
fprintf(stderr, "%s\n", strerror(errno));
|
|
||||||
- return -1;
|
|
||||||
+ exit(1);
|
|
||||||
}
|
|
||||||
rc = fscanf(filp, "%s", reipltype);
|
|
||||||
fclose(filp);
|
|
||||||
@@ -57,17 +56,19 @@ int get_reipl_type(void)
|
|
||||||
fprintf(stderr, "%s: Failed to read "
|
|
||||||
"/sys/firmware/reipl/reipl_type:", name);
|
|
||||||
fprintf(stderr, "%s\n", strerror(errno));
|
|
||||||
- return -1;
|
|
||||||
+ exit(1);
|
|
||||||
}
|
|
||||||
if (strncmp(reipltype, "fcp", strlen("fcp")) == 0)
|
|
||||||
return T_FCP;
|
|
||||||
else if (strncmp(reipltype, "ccw", strlen("ccw")) == 0)
|
|
||||||
return T_CCW;
|
|
||||||
- /* TODO: add NSS support */
|
|
||||||
+ else if (strncmp(reipltype, "nss", strlen("nss")) == 0)
|
|
||||||
+ return T_NSS;
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "%s: Can not open /sys/firmware/reipl/"
|
|
||||||
"reipl_type:", name);
|
|
||||||
fprintf(stderr, " %s\n", strerror(errno));
|
|
||||||
+ exit(1);
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
diff --git a/ipl_tools/ipl.c b/ipl_tools/ipl.c
|
|
||||||
index 2bf817a..8cca700 100644
|
|
||||||
--- a/ipl_tools/ipl.c
|
|
||||||
+++ b/ipl_tools/ipl.c
|
|
||||||
@@ -33,12 +33,11 @@
|
|
||||||
|
|
||||||
/*
|
|
||||||
* return the ipl type based on /sys/firmware/ipl/ipl_type
|
|
||||||
- * returns 0 in case of fcp and 1 in case of ccw, -1 otherwise
|
|
||||||
+ * returns 0 in case of fcp and 1 in case of ccw, 2 for nss and -1 otherwise
|
|
||||||
*/
|
|
||||||
-int get_ipl_type()
|
|
||||||
+int get_ipl_type(char *reipltype)
|
|
||||||
{
|
|
||||||
FILE *filp;
|
|
||||||
- char reipltype[4];
|
|
||||||
char path[4096];
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
@@ -49,7 +48,7 @@ int get_ipl_type()
|
|
||||||
fprintf(stderr, "%s: Can not open /sys/firmware/ipl/"
|
|
||||||
"ipl_type: ", name);
|
|
||||||
fprintf(stderr, "%s\n", strerror(errno));
|
|
||||||
- return -1;
|
|
||||||
+ exit(1);
|
|
||||||
}
|
|
||||||
rc = fscanf(filp, "%s", reipltype);
|
|
||||||
fclose(filp);
|
|
||||||
@@ -57,12 +56,14 @@ int get_ipl_type()
|
|
||||||
fprintf(stderr, "%s: Failed to read "
|
|
||||||
"/sys/firmware/ipl/ipl_type: ", name);
|
|
||||||
fprintf(stderr, "%s\n", strerror(errno));
|
|
||||||
- return -1;
|
|
||||||
+ exit(1);
|
|
||||||
}
|
|
||||||
if (strncmp(reipltype, "fcp", strlen("fcp")) == 0)
|
|
||||||
return T_FCP;
|
|
||||||
else if (strncmp(reipltype, "ccw", strlen("ccw")) == 0)
|
|
||||||
return T_CCW;
|
|
||||||
+ else if (strncmp(reipltype, "nss", strlen("nss")) == 0)
|
|
||||||
+ return T_NSS;
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "%s: Can not open /sys/firmware/ipl/"
|
|
||||||
"ipl_type:", name);
|
|
||||||
@@ -111,30 +112,38 @@ int get_ipl_loadparam(void)
|
|
||||||
void print_ipl_settings(void)
|
|
||||||
{
|
|
||||||
int rc, type;
|
|
||||||
- char bootprog[1024], lba[1024];
|
|
||||||
+ char bootprog[1024], lba[1024], nss_name[NSS_NAME_LEN_MAX + 1];
|
|
||||||
+ char reipltype[IPL_TYPE_LEN_MAX + 1];
|
|
||||||
|
|
||||||
- type = get_ipl_type();
|
|
||||||
- /*
|
|
||||||
- * TODO: add nss support
|
|
||||||
- */
|
|
||||||
- if (type == 1)
|
|
||||||
+ type = get_ipl_type(reipltype);
|
|
||||||
+ switch (type) {
|
|
||||||
+ case T_NSS:
|
|
||||||
+ printf("IPL type: nss\n");
|
|
||||||
+ rc = strrd(nss_name, "/sys/firmware/ipl/name");
|
|
||||||
+ if (rc != 0)
|
|
||||||
+ exit(1);
|
|
||||||
+ printf("Name: %s\n", nss_name);
|
|
||||||
+ break;
|
|
||||||
+ case T_CCW:
|
|
||||||
printf("IPL type: ccw\n");
|
|
||||||
- if (type == 0)
|
|
||||||
- printf("IPL type: fcp\n");
|
|
||||||
- rc = strrd(devno, "/sys/firmware/ipl/device");
|
|
||||||
- if (rc != 0)
|
|
||||||
- exit(1) /* the error msg comes from get_ipl_device */;
|
|
||||||
- if (strlen(devno) > 0)
|
|
||||||
- printf("Device: %s\n", devno);
|
|
||||||
- if (type == 1) {
|
|
||||||
+ rc = strrd(devno, "/sys/firmware/ipl/device");
|
|
||||||
+ if (rc != 0)
|
|
||||||
+ exit(1);
|
|
||||||
+ if (strlen(devno) > 0)
|
|
||||||
+ printf("Device: %s\n", devno);
|
|
||||||
rc = get_ipl_loadparam();
|
|
||||||
if (rc != -1)
|
|
||||||
printf("Loadparm: %d\n", rc);
|
|
||||||
else
|
|
||||||
printf("Loadparm: \n");
|
|
||||||
- }
|
|
||||||
- if (type == 0) {
|
|
||||||
- /* these settings are only available for fcp */
|
|
||||||
+ break;
|
|
||||||
+ case T_FCP:
|
|
||||||
+ printf("IPL type: fcp\n");
|
|
||||||
+ rc = strrd(devno, "/sys/firmware/ipl/device");
|
|
||||||
+ if (rc != 0)
|
|
||||||
+ exit(1);
|
|
||||||
+ if (strlen(devno) > 0)
|
|
||||||
+ printf("Device: %s\n", devno);
|
|
||||||
rc = strrd(wwpn, "/sys/firmware/reipl/fcp/wwpn");
|
|
||||||
if (rc != -1 && strlen(wwpn) > 0)
|
|
||||||
printf("WWPN: %s\n", wwpn);
|
|
||||||
@@ -147,6 +156,10 @@ void print_ipl_settings(void)
|
|
||||||
rc = strrd(lba, "/sys/firmware/ipl/br_lba");
|
|
||||||
if (rc != -1 && strlen(lba) > 0)
|
|
||||||
printf("br_lba: %s\n", lba);
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ printf("IPL type: %s (unknown)\n", reipltype);
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
diff --git a/ipl_tools/main.c b/ipl_tools/main.c
|
|
||||||
index 2eaa043..bcebabe 100644
|
|
||||||
--- a/ipl_tools/main.c
|
|
||||||
+++ b/ipl_tools/main.c
|
|
||||||
@@ -57,13 +57,22 @@ int action; /* either CCW, FCP or NODE */
|
|
||||||
int lsreipl(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
- char bootprog[1024], lba[1024], val[9];
|
|
||||||
+ char bootprog[1024], lba[1024], val[9], reipltype[IPL_TYPE_LEN_MAX + 1];
|
|
||||||
+ char nss_name[NSS_NAME_LEN_MAX + 1];
|
|
||||||
|
|
||||||
/* parse the command line options in getop.c */
|
|
||||||
parse_lsreipl_options(argc, argv);
|
|
||||||
|
|
||||||
- rc = get_reipl_type();
|
|
||||||
- if (rc == 0) {
|
|
||||||
+ rc = get_reipl_type(reipltype);
|
|
||||||
+ switch (rc) {
|
|
||||||
+ case T_NSS:
|
|
||||||
+ printf("Re-IPL type: nss\n");
|
|
||||||
+ rc = strrd(nss_name, "/sys/firmware/reipl/nss/name");
|
|
||||||
+ if (rc != 0)
|
|
||||||
+ exit(1);
|
|
||||||
+ printf("Name: %s\n", nss_name);
|
|
||||||
+ break;
|
|
||||||
+ case T_FCP:
|
|
||||||
printf("Re-IPL type: fcp\n");
|
|
||||||
rc = strrd(wwpn, "/sys/firmware/reipl/fcp/wwpn");
|
|
||||||
if (rc != 0)
|
|
||||||
@@ -90,8 +99,8 @@ int lsreipl(int argc, char *argv[])
|
|
||||||
printf("bootprog: %s\n", bootprog);
|
|
||||||
if (strlen(lba) > 0)
|
|
||||||
printf("br_lba: %s\n", lba);
|
|
||||||
- }
|
|
||||||
- if (rc == 1) {
|
|
||||||
+ break;
|
|
||||||
+ case T_CCW:
|
|
||||||
printf("Re-IPL type: ccw\n");
|
|
||||||
rc = strrd(devno, "/sys/firmware/reipl/ccw/device");
|
|
||||||
if (rc != 0)
|
|
||||||
@@ -106,6 +115,10 @@ int lsreipl(int argc, char *argv[])
|
|
||||||
printf("Loadparm: %s\n", val);
|
|
||||||
else
|
|
||||||
printf("Loadparm: \n");
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ printf("Re-IPL type: %s (unknown)\n", reipltype);
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -134,7 +147,7 @@ int reipl(int argc, char *argv[])
|
|
||||||
"partition: %s\n", name, partition);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
- rc = get_ccw_devno(device, devno);
|
|
||||||
+ rc = get_ccw_devno(device);
|
|
||||||
if (rc != 0) {
|
|
||||||
fprintf(stderr, "%s: Unable to lookup device"
|
|
||||||
" number for device %s\n", name,
|
|
||||||
diff --git a/ipl_tools/system.c b/ipl_tools/system.c
|
|
||||||
index fd5b76b..ca6c5af 100644
|
|
||||||
--- a/ipl_tools/system.c
|
|
||||||
+++ b/ipl_tools/system.c
|
|
||||||
@@ -174,7 +174,7 @@ int strrd(char *string, char *file)
|
|
||||||
fprintf(stderr, "%s\n", strerror(errno));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
- rc = fread(string, 4096, 1, filp);
|
|
||||||
+ rc = fread(string, 1, 4096, filp);
|
|
||||||
fclose(filp);
|
|
||||||
/*
|
|
||||||
* special handling is required for
|
|
||||||
@@ -193,6 +193,7 @@ int strrd(char *string, char *file)
|
|
||||||
fprintf(stderr, "%s\n", strerror(errno));
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
+ string[rc] = 0;
|
|
||||||
if (string[strlen(string) - 1] == '\n')
|
|
||||||
string[strlen(string) - 1] = 0;
|
|
||||||
return 0;
|
|
||||||
--
|
|
||||||
1.6.3.3
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,38 +0,0 @@
|
|||||||
From a8bcc744ec941c3b34c22c7a7729b52a390c7a08 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Wed, 13 Jan 2010 08:39:09 +0100
|
|
||||||
Subject: [PATCH] fix uppercase conversion in lscss
|
|
||||||
|
|
||||||
Description: lscss: fix uppercase conversion
|
|
||||||
Symptom: when invoking the -u option, lscss will fail with the message "tr: missing operand"
|
|
||||||
Problem: the bash option "nullglob" interferes with the tr operands
|
|
||||||
Solution: avoid expanding of those operands by placing quotes around them
|
|
||||||
---
|
|
||||||
zconf/lscss | 4 ++--
|
|
||||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/zconf/lscss b/zconf/lscss
|
|
||||||
index efdb9ca..fc40fe6 100755
|
|
||||||
--- a/zconf/lscss
|
|
||||||
+++ b/zconf/lscss
|
|
||||||
@@ -354,7 +354,7 @@ if [ $SCH_IO ] ;then
|
|
||||||
echo "----------------------------------------------------------------------"
|
|
||||||
fi
|
|
||||||
print_io | if [ $UPPERCASE ] ;then
|
|
||||||
- tr [:lower:] [:upper:]
|
|
||||||
+ tr "[:lower:]" "[:upper:]"
|
|
||||||
else
|
|
||||||
cat -
|
|
||||||
fi
|
|
||||||
@@ -368,7 +368,7 @@ if [ $SCH_CHSC ] ;then
|
|
||||||
echo "Device Subchan."
|
|
||||||
echo "-----------------"
|
|
||||||
print_chsc | if [ $UPPERCASE ] ;then
|
|
||||||
- tr [:lower:] [:upper:]
|
|
||||||
+ tr "[:lower:]" "[:upper:]"
|
|
||||||
else
|
|
||||||
cat -
|
|
||||||
fi
|
|
||||||
--
|
|
||||||
1.6.5.2
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
From a8ffd7242da2adcc4ab5b0f23193cfe764dc376d Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Wed, 20 Jan 2010 08:42:52 +0100
|
|
||||||
Subject: [PATCH 19/22] ziorep: fix return codes
|
|
||||||
|
|
||||||
Description: ziomon: ziorep tools return 1 when using options -h and -v
|
|
||||||
Symptom: Using ziorep_traffic/utilization with these options give an
|
|
||||||
error.
|
|
||||||
Problem: 1 as been introduced as rc for parse_parms besides error codes,
|
|
||||||
but is not distinguished from them when parse_params is called.
|
|
||||||
Solution: After calling parse_parms check for rc 1 and substitute through 0.
|
|
||||||
---
|
|
||||||
ziomon/ziorep_traffic.cpp | 5 ++++-
|
|
||||||
ziomon/ziorep_utilization.cpp | 5 ++++-
|
|
||||||
2 files changed, 8 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/ziomon/ziorep_traffic.cpp b/ziomon/ziorep_traffic.cpp
|
|
||||||
index 1461e55..20ee32f 100644
|
|
||||||
--- a/ziomon/ziorep_traffic.cpp
|
|
||||||
+++ b/ziomon/ziorep_traffic.cpp
|
|
||||||
@@ -529,8 +529,11 @@ int main(int argc, char **argv)
|
|
||||||
verbose = 0;
|
|
||||||
|
|
||||||
init_opts(&opts);
|
|
||||||
- if ( (rc = parse_params(argc, argv, &opts)) )
|
|
||||||
+ if ( (rc = parse_params(argc, argv, &opts)) ) {
|
|
||||||
+ if (rc == 1)
|
|
||||||
+ rc = 0;
|
|
||||||
goto out;
|
|
||||||
+ }
|
|
||||||
if ( (rc = check_opts(&opts, &cfg)) )
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
diff --git a/ziomon/ziorep_utilization.cpp b/ziomon/ziorep_utilization.cpp
|
|
||||||
index 3f57a47..ac4576f 100644
|
|
||||||
--- a/ziomon/ziorep_utilization.cpp
|
|
||||||
+++ b/ziomon/ziorep_utilization.cpp
|
|
||||||
@@ -352,8 +352,11 @@ int main(int argc, char **argv)
|
|
||||||
verbose = 0;
|
|
||||||
|
|
||||||
init_opts(&opts);
|
|
||||||
- if ( (rc = parse_params(argc, argv, &opts)) )
|
|
||||||
+ if ( (rc = parse_params(argc, argv, &opts)) ) {
|
|
||||||
+ if (rc == 1)
|
|
||||||
+ rc = 0;
|
|
||||||
goto out;
|
|
||||||
+ }
|
|
||||||
if ( (rc = check_opts(&opts, &cfg)) )
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
--
|
|
||||||
1.6.5.2
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From 72ec5b5bd9a7fd23e2d1aaed455df8f2bda952ca Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Wed, 20 Jan 2010 08:44:43 +0100
|
|
||||||
Subject: [PATCH 20/22] lstape: fix return code
|
|
||||||
|
|
||||||
Description: lstape: help function returns 1, although it was successful
|
|
||||||
Symptom: Issuing "lstape -h" or "lstape --help" and then looking for the
|
|
||||||
error code on the console through e.g. "echo $?" shows 1. Which
|
|
||||||
looks like an error.
|
|
||||||
Problem: exit 1, where we chould have exit 0.
|
|
||||||
Solution: Return 0 after calling the help function with exit 0.
|
|
||||||
---
|
|
||||||
zconf/lstape | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/zconf/lstape b/zconf/lstape
|
|
||||||
index efacfc9..5671315 100755
|
|
||||||
--- a/zconf/lstape
|
|
||||||
+++ b/zconf/lstape
|
|
||||||
@@ -90,7 +90,7 @@ while [ $# -ne 0 ]; do
|
|
||||||
case $1 in
|
|
||||||
-h|--help)
|
|
||||||
PrintUsage
|
|
||||||
- exit 1
|
|
||||||
+ exit 0
|
|
||||||
;;
|
|
||||||
-t|--type)
|
|
||||||
if [ $# -lt 2 ]; then
|
|
||||||
--
|
|
||||||
1.6.5.2
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From d3c4eb2ced3a8e3c8f7a528f88721324028534e9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Wed, 20 Jan 2010 08:46:14 +0100
|
|
||||||
Subject: [PATCH 21/22] cpuplugd: fix reading the size of /proc/sys/vm/cmm_pages
|
|
||||||
|
|
||||||
Description: cpuplugd: fix fscanf file handling in get_cmmpages_size
|
|
||||||
Symptom: cpuplugd was not able to correctly read the size of the
|
|
||||||
/proc/sys/vm/cmm_pages file. This prevented cpuplugd from using
|
|
||||||
the cmm feature correctly.
|
|
||||||
Problem: The code checked for the wrong return code (!= 0 instead of ==0)
|
|
||||||
Solution: Check for the right return code in the get_cmmpages_size error
|
|
||||||
handling function.
|
|
||||||
---
|
|
||||||
cpuplugd/mem.c | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cpuplugd/mem.c b/cpuplugd/mem.c
|
|
||||||
index a8f2a8e..8d5f05f 100644
|
|
||||||
--- a/cpuplugd/mem.c
|
|
||||||
+++ b/cpuplugd/mem.c
|
|
||||||
@@ -230,7 +230,7 @@ int get_cmmpages_size()
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
rc = fscanf(filp, "%d", &size);
|
|
||||||
- if (rc != 0) {
|
|
||||||
+ if (rc == 0) {
|
|
||||||
fprintf(stderr, "Can not read /proc/sys/vm/cmm_pages: %s\n",
|
|
||||||
strerror(errno));
|
|
||||||
if (foreground == 0)
|
|
||||||
--
|
|
||||||
1.6.5.2
|
|
||||||
|
|
@ -1,74 +0,0 @@
|
|||||||
From c986172e782ae2afa41209e7c238315175d589e1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Wed, 20 Jan 2010 08:48:52 +0100
|
|
||||||
Subject: [PATCH 22/22] lsqeth: support new attributes
|
|
||||||
|
|
||||||
Description: lsqeth: add recent qeth attributes
|
|
||||||
Symptom: no information about "isolation" and "sniffer" values
|
|
||||||
Problem: new sysfs attributes "isolation" and "sniffer" not mentioned in
|
|
||||||
lsqeth output.
|
|
||||||
Solution: add attributes "isolation" and "sniffer" to lsqeth.
|
|
||||||
---
|
|
||||||
README | 2 ++
|
|
||||||
zconf/lsqeth | 11 +++++++----
|
|
||||||
2 files changed, 9 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/README b/README
|
|
||||||
index 30ba06f..7c75563 100644
|
|
||||||
--- a/README
|
|
||||||
+++ b/README
|
|
||||||
@@ -192,6 +192,8 @@ Release History:
|
|
||||||
|
|
||||||
- lscss: Also show devices on the defunct subchannel.
|
|
||||||
|
|
||||||
+ - lsqeth: add attributes "isolation" and "sniffer"
|
|
||||||
+
|
|
||||||
- all: Reworked s390-tools build process.
|
|
||||||
|
|
||||||
Bug Fixes:
|
|
||||||
diff --git a/zconf/lsqeth b/zconf/lsqeth
|
|
||||||
index 9b155e9..b1c2809 100755
|
|
||||||
--- a/zconf/lsqeth
|
|
||||||
+++ b/zconf/lsqeth
|
|
||||||
@@ -3,7 +3,7 @@
|
|
||||||
# File...........: lsqeth
|
|
||||||
# Author(s)......: Steffen Thoss <thoss@de.ibm.com>
|
|
||||||
# Peter Tiedemann <ptiedem@de.ibm.com>
|
|
||||||
-# Copyright IBM Corp. 2004, 2009
|
|
||||||
+# Copyright IBM Corp. 2004, 2010
|
|
||||||
#
|
|
||||||
# History of changes:
|
|
||||||
#
|
|
||||||
@@ -63,7 +63,9 @@ output_array=( if_name
|
|
||||||
buffer_count
|
|
||||||
add_hhlen
|
|
||||||
layer2
|
|
||||||
- large_send )
|
|
||||||
+ large_send
|
|
||||||
+ isolation
|
|
||||||
+ sniffer )
|
|
||||||
# Array for sysfs values
|
|
||||||
sysfs_entries=( "sw checksumming" "hw checksumming" "no checksumming"
|
|
||||||
"always queue 0" "always queue 1"
|
|
||||||
@@ -87,7 +89,7 @@ parp_array=0
|
|
||||||
function PrintVersion
|
|
||||||
{
|
|
||||||
echo "$script_name: version %S390_TOOLS_VERSION%"
|
|
||||||
- echo "Copyright IBM Corp. 2003, 2009"
|
|
||||||
+ echo "Copyright IBM Corp. 2003, 2010"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -308,7 +310,8 @@ function __print_normal_format
|
|
||||||
function __layer2_print
|
|
||||||
{
|
|
||||||
del_layer2=( route4 route6
|
|
||||||
- fake_ll fake_broadcast )
|
|
||||||
+ fake_ll fake_broadcast
|
|
||||||
+ sniffer )
|
|
||||||
|
|
||||||
for l in ${del_layer2[@]}
|
|
||||||
do
|
|
||||||
--
|
|
||||||
1.6.5.2
|
|
||||||
|
|
183
20-zipl-kernel.install
Executable file
183
20-zipl-kernel.install
Executable file
@ -0,0 +1,183 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -f /etc/sysconfig/kernel ]] && . /etc/sysconfig/kernel
|
||||||
|
|
||||||
|
COMMAND="$1"
|
||||||
|
KERNEL_VERSION="$2"
|
||||||
|
BOOT_DIR_ABS="$3"
|
||||||
|
KERNEL_IMAGE="$4"
|
||||||
|
|
||||||
|
KERNEL_DIR="${KERNEL_IMAGE%/*}"
|
||||||
|
|
||||||
|
MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
|
||||||
|
|
||||||
|
BLS_DIR="/boot/loader/entries"
|
||||||
|
ZIPLCFG="/etc/zipl.conf"
|
||||||
|
CMDLINE_LINUX_DEBUG=" systemd.log_level=debug systemd.log_target=kmsg"
|
||||||
|
LINUX_DEBUG_VERSION_POSTFIX="_with_debugging"
|
||||||
|
LINUX_DEBUG_TITLE_POSTFIX=" with debugging"
|
||||||
|
|
||||||
|
mkbls() {
|
||||||
|
local kernelver=$1 && shift
|
||||||
|
local datetime=$1 && shift
|
||||||
|
local kernelopts=$1 && shift
|
||||||
|
|
||||||
|
local debugname=""
|
||||||
|
local flavor=""
|
||||||
|
|
||||||
|
if [[ "$kernelver" == *\+* ]] ; then
|
||||||
|
local flavor=-"${kernelver##*+}"
|
||||||
|
if [[ "${flavor}" == "-debug" ]]; then
|
||||||
|
local debugname=" with debugging"
|
||||||
|
local debugid="-debug"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
title ${NAME} (${kernelver}) ${VERSION}${debugname}
|
||||||
|
version ${kernelver}${debugid}
|
||||||
|
linux /boot/vmlinuz-${kernelver}
|
||||||
|
initrd /boot/initramfs-${kernelver}.img
|
||||||
|
options ${kernelopts}
|
||||||
|
id ${ID}-${datetime}-${kernelver}${debugid}
|
||||||
|
grub_users \$grub_users
|
||||||
|
grub_arg --unrestricted
|
||||||
|
grub_class kernel${flavor}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ "$KERNEL_VERSION" == *\+* ]] && flavor=-"${KERNEL_VERSION##*+}"
|
||||||
|
case "$COMMAND" in
|
||||||
|
add)
|
||||||
|
if [[ "${KERNEL_DIR}" != "/boot" ]]; then
|
||||||
|
# rename to match the name used in the pseudo-BLS snippet above
|
||||||
|
cp --remove-destination --preserve=timestamps -T "${KERNEL_IMAGE}" "/boot/vmlinuz-${KERNEL_VERSION}"
|
||||||
|
command -v restorecon &>/dev/null && \
|
||||||
|
restorecon -R "/boot/vmlinuz-${KERNEL_VERSION}"
|
||||||
|
|
||||||
|
for i in \
|
||||||
|
"$KERNEL_DIR"/System.map \
|
||||||
|
"$KERNEL_DIR"/config \
|
||||||
|
"$KERNEL_DIR"/zImage.stub
|
||||||
|
do
|
||||||
|
[[ -e "$i" ]] || continue
|
||||||
|
cp --preserve=timestamps -T "$i" "/boot/${i##*/}-${KERNEL_VERSION}"
|
||||||
|
command -v restorecon &>/dev/null && \
|
||||||
|
restorecon -R "/boot/${i##*/}-${KERNEL_VERSION}"
|
||||||
|
done
|
||||||
|
# hmac is .vmlinuz-<version>.hmac so needs a special treatment
|
||||||
|
i="$KERNEL_DIR/.${KERNEL_IMAGE##*/}.hmac"
|
||||||
|
if [[ -e "$i" ]]; then
|
||||||
|
cp --preserve=timestamps "$i" "/boot/.${KERNEL_IMAGE##*/}-${KERNEL_VERSION}.hmac"
|
||||||
|
command -v restorecon &>/dev/null && \
|
||||||
|
restorecon "/boot/.${KERNEL_IMAGE##*/}-${KERNEL_VERSION}.hmac"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f /sbin/new-kernel-pkg || -d "${BLS_DIR}" ]]; then
|
||||||
|
declare -a BOOT_OPTIONS
|
||||||
|
if [[ -f /etc/kernel/cmdline ]]; then
|
||||||
|
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ ${BOOT_OPTIONS[*]} ]]; then
|
||||||
|
read -r -d '' -a line < /proc/cmdline
|
||||||
|
for i in "${line[@]}"; do
|
||||||
|
[[ "${i#initrd=*}" != "$i" || "${i#BOOT_IMAGE=*}" != "$i" ]] && continue
|
||||||
|
BOOT_OPTIONS+=("$i")
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -d "$BLS_DIR" ]] || mkdir -m 0700 -p "$BLS_DIR"
|
||||||
|
BLS_TARGET="${BLS_DIR}/${MACHINE_ID}-${KERNEL_VERSION}.conf"
|
||||||
|
if [[ -f "${KERNEL_DIR}/bls.conf" ]]; then
|
||||||
|
cp --preserve=timestamps -T "${KERNEL_DIR}/bls.conf" "${BLS_TARGET}" || exit $?
|
||||||
|
sed -i -e "s,^linux.*,linux /boot/vmlinuz-${KERNEL_VERSION},g" "${BLS_TARGET}"
|
||||||
|
sed -i -e "s,^initrd.*,initrd /boot/initramfs-${KERNEL_VERSION}.img,g" "${BLS_TARGET}"
|
||||||
|
sed -i -e "s#^options.*#options ${BOOT_OPTIONS[*]}#g" "${BLS_TARGET}"
|
||||||
|
else
|
||||||
|
mkbls "${KERNEL_VERSION}" \
|
||||||
|
"$(date -u +%Y%m%d%H%M%S -d "$(stat -c '%y' "${KERNEL_DIR}")")" \
|
||||||
|
"${BOOT_OPTIONS[*]}" >"${BLS_TARGET}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$KERNEL_VERSION" == *\+* ]] && [ "x$DEFAULTDEBUG" != "xyes" ]; then
|
||||||
|
UPDATEDEFAULT="no"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "x$UPDATEDEFAULT" = "xyes" ]]; then
|
||||||
|
TITLE="$(grep '^title[ \t]' "${BLS_TARGET}" | sed -e 's/^title[ \t]*//')"
|
||||||
|
NEWDEFAULT="${TITLE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "x${MAKEDEBUG}" = "xyes" ]; then
|
||||||
|
BLS_DEBUG="$(echo ${BLS_TARGET} | sed -e "s/${KERNEL_VERSION}/${KERNEL_VERSION}~debug/")"
|
||||||
|
cp --preserve=timestamps -T "${BLS_TARGET}" "${BLS_DEBUG}"
|
||||||
|
TITLE="$(grep '^title[ \t]' "${BLS_DEBUG}" | sed -e 's/^title[ \t]*//')"
|
||||||
|
VERSION="$(grep '^version[ \t]' "${BLS_DEBUG}" | sed -e 's/^version[ \t]*//')"
|
||||||
|
BLSID="$(grep '^id[ \t]' "${BLS_DEBUG}" | sed -e "s/${KERNEL_VERSION}/${KERNEL_VERSION}~debug/")"
|
||||||
|
sed -i -e "s/^title.*/title ${TITLE}${LINUX_DEBUG_TITLE_POSTFIX}/" "${BLS_DEBUG}"
|
||||||
|
sed -i -e "s/^version.*/version ${VERSION}${LINUX_DEBUG_VERSION_POSTFIX}/" "${BLS_DEBUG}"
|
||||||
|
sed -i -e "s/^id.*/${BLSID}/" "${BLS_DEBUG}"
|
||||||
|
sed -i -e "s#^options.*#options ${BOOT_OPTIONS[*]}${CMDLINE_LINUX_DEBUG}#" "${BLS_DEBUG}"
|
||||||
|
if [ -n "$NEWDEFAULT" -a "x$DEFAULTDEBUG" = "xyes" ]; then
|
||||||
|
TITLE="$(grep '^title[ \t]' "${BLS_DEBUG}" | sed -e 's/^title[ \t]*//')"
|
||||||
|
NEWDEFAULT="${TITLE}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$NEWDEFAULT" ] && [ -f "${ZIPLCFG}" ]; then
|
||||||
|
if grep -q "^default=" "${ZIPLCFG}"; then
|
||||||
|
sed -i -e "s,^default=.*,default=${NEWDEFAULT}," "${ZIPLCFG}"
|
||||||
|
else
|
||||||
|
echo "default=${NEWDEFAULT}" >> "${ZIPLCFG}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
/sbin/new-kernel-pkg --package "kernel${flavor}" --install "$KERNEL_VERSION" || exit $?
|
||||||
|
/sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$KERNEL_VERSION" || exit $?
|
||||||
|
/sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$KERNEL_VERSION" || exit $?
|
||||||
|
# If grubby is used there's no need to run other installation plugins
|
||||||
|
exit 77
|
||||||
|
;;
|
||||||
|
remove)
|
||||||
|
if [[ ! -f /sbin/new-kernel-pkg || -d "${BLS_DIR}" ]]; then
|
||||||
|
ARCH="$(uname -m)"
|
||||||
|
BLS_TARGET="${BLS_DIR}/${MACHINE_ID}-${KERNEL_VERSION}.conf"
|
||||||
|
BLS_DEBUG="$(echo ${BLS_TARGET} | sed -e "s/${KERNEL_VERSION}/${KERNEL_VERSION}~debug/")"
|
||||||
|
|
||||||
|
if [ -f "${BLS_TARGET}" ] && [ -f "${ZIPLCFG}" ]; then
|
||||||
|
TITLE="$(grep '^title[ \t]' "${BLS_TARGET}" | sed -e 's/^title[ \t]*//')"
|
||||||
|
sed -i -e "/^default=${TITLE}/d" "${ZIPLCFG}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f "${BLS_DEBUG}" ]]; then
|
||||||
|
TITLE="$(grep '^title[ \t]' "${BLS_DEBUG}" | sed -e 's/^title[ \t]*//')"
|
||||||
|
sed -i -e "/^default=${TITLE}/d" "${ZIPLCFG}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "${BLS_TARGET}" "${BLS_DEBUG}"
|
||||||
|
|
||||||
|
for i in vmlinuz System.map config zImage.stub dtb; do
|
||||||
|
rm -rf "/boot/${i}-${KERNEL_VERSION}"
|
||||||
|
done
|
||||||
|
# hmac is .vmlinuz-<version>.hmac so needs a special treatment
|
||||||
|
rm -f "/boot/.vmlinuz-${KERNEL_VERSION}.hmac"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
/sbin/new-kernel-pkg --package "kernel${flavor+-$flavor}" --rminitrd --rmmoddep --remove "$KERNEL_VERSION" || exit $?
|
||||||
|
# If grubby is used there's no need to run other installation plugins
|
||||||
|
exit 77
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
42
52-zipl-rescue.install
Executable file
42
52-zipl-rescue.install
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
[[ -f /etc/os-release ]] && . /etc/os-release
|
||||||
|
[[ -f /etc/sysconfig/kernel ]] && . /etc/sysconfig/kernel
|
||||||
|
|
||||||
|
COMMAND="$1"
|
||||||
|
KERNEL_VERSION="$2"
|
||||||
|
BOOT_DIR_ABS="$3"
|
||||||
|
KERNEL_IMAGE="$4"
|
||||||
|
|
||||||
|
MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
|
||||||
|
|
||||||
|
BLS_DIR="/boot/loader/entries"
|
||||||
|
|
||||||
|
[[ "$KERNEL_VERSION" == *\+* ]] && flavor=-"${KERNEL_VERSION##*+}"
|
||||||
|
case "$COMMAND" in
|
||||||
|
add)
|
||||||
|
if [[ ! -f /sbin/new-kernel-pkg || -d "${BLS_DIR}" ]]; then
|
||||||
|
declare -a BOOT_OPTIONS
|
||||||
|
if [[ -f /etc/kernel/cmdline ]]; then
|
||||||
|
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ ${BOOT_OPTIONS[*]} ]]; then
|
||||||
|
read -r -d '' -a line < /proc/cmdline
|
||||||
|
for i in "${line[@]}"; do
|
||||||
|
[[ "${i#initrd=*}" != "$i" ]] && continue
|
||||||
|
BOOT_OPTIONS+=("$i")
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
BLS_RESCUE="${BLS_DIR}/${MACHINE_ID}-0-rescue.conf"
|
||||||
|
if [[ -f "${BLS_RESCUE}" ]] && grep -q '^options.*$kernelopts' "${BLS_RESCUE}"; then
|
||||||
|
sed -i -e "s,^linux.*,linux /boot/vmlinuz-0-rescue-${MACHINE_ID},g" "${BLS_RESCUE}"
|
||||||
|
sed -i -e "s,^initrd.*,initrd /boot/initramfs-0-rescue-${MACHINE_ID}.img,g" "${BLS_RESCUE}"
|
||||||
|
sed -i -e "s#^options.*#options ${BOOT_OPTIONS[*]}#g" "${BLS_RESCUE}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
15
91-zipl.install
Executable file
15
91-zipl.install
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ ! -f /etc/zipl.conf ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
COMMAND="$1"
|
||||||
|
|
||||||
|
case "$COMMAND" in
|
||||||
|
add|remove)
|
||||||
|
zipl > /dev/null
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
21
Makefile
21
Makefile
@ -1,21 +0,0 @@
|
|||||||
# Makefile for source rpm: s390utils
|
|
||||||
# $Id$
|
|
||||||
NAME := s390utils
|
|
||||||
SPECFILE = $(firstword $(wildcard *.spec))
|
|
||||||
|
|
||||||
define find-makefile-common
|
|
||||||
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
|
||||||
endef
|
|
||||||
|
|
||||||
MAKEFILE_COMMON := $(shell $(find-makefile-common))
|
|
||||||
|
|
||||||
ifeq ($(MAKEFILE_COMMON),)
|
|
||||||
# attept a checkout
|
|
||||||
define checkout-makefile-common
|
|
||||||
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
|
||||||
endef
|
|
||||||
|
|
||||||
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(MAKEFILE_COMMON)
|
|
4
ccw.udev
Normal file
4
ccw.udev
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
ACTION!="add|bind|change", GOTO="ccw_end"
|
||||||
|
SUBSYSTEM!="ccw", GOTO="ccw_end"
|
||||||
|
DRIVER=="ctcm|lcs|qeth", RUN+="ccw_init"
|
||||||
|
LABEL="ccw_end"
|
200
ccw_init
Normal file
200
ccw_init
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
#! /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
|
||||||
|
}
|
||||||
|
|
||||||
|
# borrowed from network-scrips, initscripts along with the get_config_by_subchannel
|
||||||
|
[ -z "$__sed_discard_ignored_files" ] && __sed_discard_ignored_files='/\(~\|\.bak\|\.old\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
|
||||||
|
|
||||||
|
get_config_by_subchannel ()
|
||||||
|
{
|
||||||
|
LANG=C grep -E -i -l \
|
||||||
|
"^[[:space:]]*SUBCHANNELS=['\"]?([0-9]\.[0-9]\.[a-f0-9]+,){0,2}${1}(,[0-9]\.[0-9]\.[a-f0-9]+){0,2}['\"]?([[:space:]]+#|[[:space:]]*$)" \
|
||||||
|
/etc/sysconfig/network-scripts/ifcfg-* \
|
||||||
|
| LC_ALL=C sed -e "$__sed_discard_ignored_files"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_config_by_subchannel_nm ()
|
||||||
|
{
|
||||||
|
LANG=C grep -E -i -l \
|
||||||
|
"^s390-subchannels=([0-9]\.[0-9]\.[a-f0-9]+;){0,2}${1};([0-9]\.[0-9]\.[a-f0-9]+;){0,2}$" \
|
||||||
|
/etc/NetworkManager/system-connections/*.nmconnection \
|
||||||
|
| LC_ALL=C sed -e "$__sed_discard_ignored_files"
|
||||||
|
}
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
CONFIG_FILE=$(get_config_by_subchannel $CHANNEL)
|
||||||
|
|
||||||
|
if [ -n "$CONFIG_FILE" ]; then
|
||||||
|
. $CONFIG_FILE
|
||||||
|
else
|
||||||
|
CONFIG_FILE=$(get_config_by_subchannel_nm $CHANNEL)
|
||||||
|
if [ -n "$CONFIG_FILE" ]; then
|
||||||
|
NETTYPE=$(sed -nr "/^\[ethernet\]/ { :l /^s390-nettype[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" $CONFIG_FILE)
|
||||||
|
SUBCHANNELS=$(sed -nr "/^\[ethernet\]/ { :l /^s390-subchannels[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" $CONFIG_FILE | sed -e "s/;/,/g" -e "s/,$//")
|
||||||
|
LAYER2=$(sed -nr "/^\[ethernet-s390-options\]/ { :l /^layer2[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" $CONFIG_FILE)
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
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=$CTCPROT"
|
||||||
|
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
|
@ -1,12 +0,0 @@
|
|||||||
diff -urN cmsfs-1.1.8/cmsfssed.sh cmsfs-1.1.8_/cmsfssed.sh
|
|
||||||
--- cmsfs-1.1.8/cmsfssed.sh 2003-02-28 17:52:59.000000000 -0500
|
|
||||||
+++ cmsfs-1.1.8_/cmsfssed.sh 2004-05-28 16:36:22.000000000 -0400
|
|
||||||
@@ -85,7 +85,7 @@
|
|
||||||
DRIVER_SOURCE="cmsfs22x.c"
|
|
||||||
MODULES_DIRECTORY="/lib/modules/`uname -r`/fs"
|
|
||||||
;;
|
|
||||||
- 2.4*|2.5*)
|
|
||||||
+ 2.4*|2.5*|2.6*)
|
|
||||||
LINUX_RELEASE="2.4"
|
|
||||||
# ln -s cmsfs24x.c cmsfsvfs.c
|
|
||||||
INCLUDES="-I/lib/modules/`uname -r`/build/include"
|
|
@ -1,11 +0,0 @@
|
|||||||
--- cmsfs-1.1.8/cmsfsvol.c.warnings 2003-07-18 01:38:57.000000000 +0200
|
|
||||||
+++ cmsfs-1.1.8/cmsfsvol.c 2005-09-06 16:57:15.000000000 +0200
|
|
||||||
@@ -52,7 +52,7 @@
|
|
||||||
|
|
||||||
/* print a header; looks like CMS */
|
|
||||||
(void) printf("LABEL VDEV M STAT CYL TYPE \
|
|
||||||
-BLKSZ FILES BLKS USED-(%) BLKS LEFT BLK TOTAL\n");
|
|
||||||
+BLKSZ FILES BLKS USED-(%%) BLKS LEFT BLK TOTAL\n");
|
|
||||||
|
|
||||||
for ( ; i < argc ; i++)
|
|
||||||
{
|
|
130
cpi.initd
130
cpi.initd
@ -1,130 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Copyright 2009 Red Hat, Inc.
|
|
||||||
# License: GPLv2
|
|
||||||
# Author: Dan Horák <dhorak@redhat.com>
|
|
||||||
#
|
|
||||||
# cpi Set Control Program Identification on IBM zSeries
|
|
||||||
#
|
|
||||||
# chkconfig: 12345 80 20
|
|
||||||
# description: Set Control Program Identification on IBM zSeries \
|
|
||||||
# that's reported from Linux guest to a LPAR or z/VM
|
|
||||||
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: cpi
|
|
||||||
# Required-Start:
|
|
||||||
# Required-Stop:
|
|
||||||
# Should-Start:
|
|
||||||
# Should-Stop:
|
|
||||||
# Default-Start: 1 2 3 4 5
|
|
||||||
# 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
|
|
||||||
### END INIT INFO
|
|
||||||
|
|
||||||
# Source function library.
|
|
||||||
. /etc/init.d/functions
|
|
||||||
|
|
||||||
prog="cpi"
|
|
||||||
|
|
||||||
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
|
|
||||||
|
|
||||||
cpipath=/sys/firmware/cpi
|
|
||||||
|
|
||||||
start() {
|
|
||||||
[ `id -u` -eq 0 ] || return 4
|
|
||||||
|
|
||||||
echo -n $"Starting $prog: "
|
|
||||||
|
|
||||||
if [ -d $cpipath ]; then
|
|
||||||
retval=0
|
|
||||||
echo LINUX > $cpipath/system_type 2> /dev/null || retval=1
|
|
||||||
[ $retval -eq 0 ] && echo "$SYSTEM_NAME" > $cpipath/system_name 2> /dev/null || retval=1
|
|
||||||
[ $retval -eq 0 ] && echo "$SYSPLEX_NAME" > $cpipath/sysplex_name 2> /dev/null || retval=1
|
|
||||||
level_maj=`uname -r | cut -d '-' -f 1 | cut -d '.' -f 1`
|
|
||||||
level_min=`uname -r | cut -d '-' -f 1 | cut -d '.' -f 2`
|
|
||||||
level_mic=`uname -r | cut -d '-' -f 1 | cut -d '.' -f 3`
|
|
||||||
level=`printf '%02x%02x%02x' $level_maj $level_min $level_mic`
|
|
||||||
[ $retval -eq 0 ] && echo $level > $cpipath/system_level 2> /dev/null || retval=1
|
|
||||||
|
|
||||||
[ $retval -eq 0 ] && echo 1 > $cpipath/set 2> /dev/null || retval=1
|
|
||||||
else
|
|
||||||
retval=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ $retval -eq 0 ] && success || failure
|
|
||||||
echo
|
|
||||||
return $retval
|
|
||||||
}
|
|
||||||
|
|
||||||
stop() {
|
|
||||||
echo -n $"Stopping $prog: "
|
|
||||||
|
|
||||||
# nothing to do
|
|
||||||
success
|
|
||||||
echo
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
restart() {
|
|
||||||
stop
|
|
||||||
start
|
|
||||||
}
|
|
||||||
|
|
||||||
reload() {
|
|
||||||
restart
|
|
||||||
}
|
|
||||||
|
|
||||||
force_reload() {
|
|
||||||
restart
|
|
||||||
}
|
|
||||||
|
|
||||||
rh_status() {
|
|
||||||
if [ -d $cpipath ]; then
|
|
||||||
echo -n "System type: "; cat $cpipath/system_type
|
|
||||||
echo -n "System level: "; cat $cpipath/system_level
|
|
||||||
echo -n "System name: "; cat $cpipath/system_name
|
|
||||||
echo -n "Sysplex name: "; cat $cpipath/sysplex_name
|
|
||||||
retval=0
|
|
||||||
else
|
|
||||||
echo "Control Program Identification system interface doesn't exist."
|
|
||||||
retval=1
|
|
||||||
fi
|
|
||||||
return $retval
|
|
||||||
}
|
|
||||||
|
|
||||||
rh_status_q() {
|
|
||||||
rh_status >/dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
$1
|
|
||||||
;;
|
|
||||||
stop)
|
|
||||||
$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 $?
|
|
@ -1,5 +0,0 @@
|
|||||||
# Define a system name (8 chars maximum)
|
|
||||||
SYSTEM_NAME=
|
|
||||||
|
|
||||||
# Define a sysplex name (8 chars maximum)
|
|
||||||
SYSPLEX_NAME=
|
|
@ -14,7 +14,7 @@
|
|||||||
CHANNEL=${DEVPATH##*/}
|
CHANNEL=${DEVPATH##*/}
|
||||||
|
|
||||||
CONFIG=/etc/dasd.conf
|
CONFIG=/etc/dasd.conf
|
||||||
PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
PATH=/sbin:/bin
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
warn() {
|
warn() {
|
||||||
@ -27,7 +27,7 @@ if [ -f "$CONFIG" ]; then
|
|||||||
#warn "No dasd-eckd or dasd-eckd loaded"
|
#warn "No dasd-eckd or dasd-eckd loaded"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
tr "A-Z" "a-z" < $CONFIG | while read line; do
|
sed 'y/ABCDEF/abcdef/' < $CONFIG | while read line; do
|
||||||
case $line in
|
case $line in
|
||||||
\#*) ;;
|
\#*) ;;
|
||||||
*)
|
*)
|
||||||
|
338
device_cio_free
338
device_cio_free
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# Copyright 2009 Red Hat, Inc.
|
# Copyright 2009, 2010 Red Hat, Inc.
|
||||||
# License: GPLv2
|
# License: GPLv2
|
||||||
# Author: Dan Horák <dhorak@redhat.com>
|
# Author: Dan Horák <dhorak@redhat.com>
|
||||||
#
|
#
|
||||||
@ -14,53 +14,68 @@
|
|||||||
#
|
#
|
||||||
# also processes the system ccw config file and network interface configurations
|
# 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
|
DASDCONFIG=/etc/dasd.conf
|
||||||
ZFCPCONFIG=/etc/zfcp.conf
|
ZFCPCONFIG=/etc/zfcp.conf
|
||||||
ZNETCONFIG=/etc/ccw.conf
|
ZNETCONFIG=/etc/ccw.conf
|
||||||
BLACKLIST=/proc/cio_ignore
|
BLACKLIST=/proc/cio_ignore
|
||||||
|
CIO_SETTLE=/proc/cio_settle
|
||||||
VERBOSE=
|
VERBOSE=
|
||||||
PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
PATH=/bin:/sbin
|
||||||
ALL_DEVICES=
|
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_TIMEOUT=60 # maximum time to wait for all devices to appear
|
||||||
WAITING_TOTAL=0 # actual time spent waiting for devices
|
WAITING_TOTAL=0 # actual time spent waiting for devices
|
||||||
|
|
||||||
usage()
|
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
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# accepts single device, comma-separated lists and dash separated ranges and their combinations
|
# 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()
|
free_device()
|
||||||
{
|
{
|
||||||
local DEV
|
local DEV DEV_LIST
|
||||||
|
|
||||||
[ -z "$1" ] && return
|
[ -z "$1" ] && return
|
||||||
|
|
||||||
DEV=$(echo $1 | tr "A-Z" "a-z")
|
DEV_LIST=$(echo "$1" | sed 'y/ABCDEF/abcdef/' | sed 's/,/ /g')
|
||||||
|
|
||||||
[ $VERBOSE ] && echo "Freeing device(s) $DEV"
|
for DEV in $DEV_LIST; do
|
||||||
if ! echo "free $DEV" > $BLACKLIST 2> /dev/null ; then
|
[ $VERBOSE ] && echo "Freeing device(s) $DEV"
|
||||||
echo "Error: can't free device(s) $DEV"
|
if ! echo "free $DEV" > $BLACKLIST 2> /dev/null ; then
|
||||||
else
|
echo "Error: can't free device(s) $DEV"
|
||||||
if [ -z $ALL_DEVICES ]; then
|
|
||||||
ALL_DEVICES=$DEV
|
|
||||||
else
|
else
|
||||||
ALL_DEVICES="$ALL_DEVICES,$DEV"
|
if [ -z $ALL_DEVICES ]; then
|
||||||
|
ALL_DEVICES="$DEV"
|
||||||
|
else
|
||||||
|
ALL_DEVICES="$ALL_DEVICES,$DEV"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# wait until a device appears on the ccw bus
|
# wait until a device appears on the ccw bus
|
||||||
wait_on_device()
|
wait_on_single_device()
|
||||||
{
|
{
|
||||||
local DEVICE_ONLINE DEV
|
local DEVICE_ONLINE DEV
|
||||||
|
|
||||||
[ -z "$1" ] && return
|
[ -z "$1" ] && return
|
||||||
|
|
||||||
DEV=$1
|
DEV="$1"
|
||||||
DEVICE_ONLINE=/sys/bus/ccw/devices/$DEV/online
|
DEVICE_ONLINE="/sys/bus/ccw/devices/$DEV/online"
|
||||||
|
|
||||||
[ $VERBOSE ] && echo "Waiting on device $DEV"
|
[ $VERBOSE ] && echo "Waiting on device $DEV"
|
||||||
[ -f "$DEVICE_ONLINE" ] && return
|
[ -f "$DEVICE_ONLINE" ] && return
|
||||||
@ -79,52 +94,81 @@ wait_on_device()
|
|||||||
echo "Error: device $DEV still not ready"
|
echo "Error: device $DEV still not ready"
|
||||||
}
|
}
|
||||||
|
|
||||||
# check how we were called
|
# wait until recently unblocked devices are ready
|
||||||
CMD=$(basename "$0")
|
# at this point we know the content of ALL_DEVICES is syntacticly correct
|
||||||
case $CMD in
|
wait_on_devices()
|
||||||
"dasd_cio_free")
|
{
|
||||||
CONFIG=$DASDCONFIG
|
if [ -w $CIO_SETTLE ]; then
|
||||||
MODE=dasd
|
[ $VERBOSE ] && echo "Waiting until all pending CIO requests are processed"
|
||||||
;;
|
echo 1 > $CIO_SETTLE
|
||||||
"zfcp_cio_free")
|
return
|
||||||
CONFIG=$ZFCPCONFIG
|
fi
|
||||||
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
|
OLD_IFS=$IFS
|
||||||
if [ $# -gt 0 ]; then
|
IFS=","
|
||||||
case $1 in
|
set $ALL_DEVICES
|
||||||
-V|--verbose)
|
for DEV in $*
|
||||||
VERBOSE=yes
|
do
|
||||||
shift
|
IFS="."
|
||||||
;;
|
|
||||||
-h|--help)
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Error: unknown option $1"
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $BLACKLIST ]; then
|
# get the lower bound for range or get the single device
|
||||||
echo "Error: $BLACKLIST kernel interface doesn't exist"
|
LOWER=${DEV%%-*}
|
||||||
exit 2
|
set $LOWER
|
||||||
fi
|
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
|
||||||
|
|
||||||
if [ $MODE = "dasd" -o $MODE = "zfcp" ]; then
|
# get the upper bound for range or get the single device
|
||||||
# process the config file
|
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
|
if [ -f "$CONFIG" ]; then
|
||||||
while read line; do
|
while read line; do
|
||||||
case $line in
|
case $line in
|
||||||
@ -135,93 +179,143 @@ if [ $MODE = "dasd" -o $MODE = "zfcp" ]; then
|
|||||||
free_device $1
|
free_device $1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done < $CONFIG
|
done < "$CONFIG"
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# check how we were called
|
||||||
|
CMD=${0##*/}
|
||||||
|
DIR=${0%/*}
|
||||||
|
ARGS=$@
|
||||||
|
case $CMD in
|
||||||
|
"dasd_cio_free")
|
||||||
|
MODE_DASD="yes"
|
||||||
|
;;
|
||||||
|
"zfcp_cio_free")
|
||||||
|
MODE_ZFCP="yes"
|
||||||
|
;;
|
||||||
|
"znet_cio_free")
|
||||||
|
MODE_ZNET="yes"
|
||||||
|
;;
|
||||||
|
"device_cio_free")
|
||||||
|
MODE_DASD="yes"
|
||||||
|
MODE_ZFCP="yes"
|
||||||
|
MODE_ZNET="yes"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
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
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case $1 in
|
||||||
|
-V|--verbose)
|
||||||
|
VERBOSE=yes
|
||||||
|
;;
|
||||||
|
-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
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ! -f $BLACKLIST ]; then
|
||||||
|
echo "Error: $BLACKLIST kernel interface doesn't exist"
|
||||||
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $MODE = "dasd" ]; then
|
if [ "$DEVICE" ]; then
|
||||||
|
[ $VERBOSE ] && echo "Freeing specific devices"
|
||||||
|
free_device $DEVICE
|
||||||
|
wait_on_devices
|
||||||
|
udevadm settle
|
||||||
|
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
|
||||||
|
|
||||||
|
[ $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
|
# 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' \
|
sed -e 's/.*[[:space:]]dasd=\([^[:space:]]*\).*/\1/' -e 's/([^)]*)//g' \
|
||||||
-e 's/nopav\|nofcx\|autodetect\|probeonly//g' -e 's/,,/,/g' -e 's/^,//' -e 's/,$//')
|
-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
|
free_device $DEVRANGE
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $MODE = "znet" ]; then
|
if [ $MODE_ZNET ]; then
|
||||||
# process the config file
|
# process the config file
|
||||||
if [ -f "$CONFIG" ]; then
|
if [ -f "$ZNETCONFIG" ]; then
|
||||||
while read line; do
|
while read line; do
|
||||||
case $line in
|
case $line in
|
||||||
\#*) ;;
|
\#*) ;;
|
||||||
*)
|
*)
|
||||||
[ -z "$line" ] && continue
|
[ -z "$line" ] && continue
|
||||||
# grep 2 or 3 channels from beginning of each line
|
# grep 2 or 3 channels from each "<nettype>,<subchannels>,<options>" line
|
||||||
DEVICES=$(echo $line | grep -E -i -o "^([0-9]\.[0-9]\.[a-f0-9]+,){1,2}([0-9]\.[0-9]\.[a-f0-9]+)")
|
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
|
free_device $DEVICES
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done < $CONFIG
|
done < "$ZNETCONFIG"
|
||||||
fi
|
fi
|
||||||
# process channels from network interface configurations
|
# 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
|
do
|
||||||
eval "$line"
|
eval "$line"
|
||||||
free_device $SUBCHANNELS
|
free_device $SUBCHANNELS
|
||||||
done
|
done
|
||||||
|
for line in $(LANG=C grep -E -i -h \
|
||||||
|
"^s390-subchannels=([0-9]\.[0-9]\.[a-f0-9]+;){2,3}$" \
|
||||||
|
$( (ls /etc/NetworkManager/system-connections/*.nmconnection 2> /dev/null || echo "__no_config_file") | \
|
||||||
|
LC_ALL=C sed -e "$__sed_discard_ignored_files") 2> /dev/null)
|
||||||
|
do
|
||||||
|
SUBCHANNELS="$(echo $line | sed -e "s/s390-subchannels=//" -e "s/;/,/g")"
|
||||||
|
free_device $SUBCHANNELS
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# wait until recently unblocked devices are ready
|
[ -z "$ALL_DEVICES" ] && exit 0
|
||||||
# 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
|
wait_on_devices
|
||||||
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
|
|
||||||
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
|
|
||||||
|
12
device_cio_free.service
Normal file
12
device_cio_free.service
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Free all devices on startup
|
||||||
|
DefaultDependencies=no
|
||||||
|
Before=sysinit.target systemd-udev-trigger.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/usr/sbin/device_cio_free
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sysinit.target
|
@ -1,25 +0,0 @@
|
|||||||
diff -up lib-zfcp-hbaapi-2.0/Makefile.am.orig lib-zfcp-hbaapi-2.0/Makefile.am
|
|
||||||
--- lib-zfcp-hbaapi-2.0/Makefile.am.orig 2009-11-05 17:22:58.000000000 +0100
|
|
||||||
+++ lib-zfcp-hbaapi-2.0/Makefile.am 2009-11-09 14:07:17.000000000 +0100
|
|
||||||
@@ -66,6 +66,9 @@ libzfcphbaapi_la_LDFLAGS = \
|
|
||||||
-lpthread -Wl,-init,_initvlib,-fini,_finivlib \
|
|
||||||
-export-symbols $(SYMFILE)
|
|
||||||
|
|
||||||
+if VENDORLIB
|
|
||||||
+libzfcphbaapi_la_LDFLAGS += -module -avoid-version -release $(VERSION)
|
|
||||||
+endif
|
|
||||||
|
|
||||||
if DOCS
|
|
||||||
man_MANS = libzfcphbaapi.3 dox/man/man3/SupportedHBAAPIs.3 \
|
|
||||||
diff -up lib-zfcp-hbaapi-2.0/Makefile.in.orig lib-zfcp-hbaapi-2.0/Makefile.in
|
|
||||||
--- lib-zfcp-hbaapi-2.0/Makefile.in.orig 2009-11-09 14:06:58.000000000 +0100
|
|
||||||
+++ lib-zfcp-hbaapi-2.0/Makefile.in 2009-11-09 14:08:40.000000000 +0100
|
|
||||||
@@ -254,6 +254,8 @@ libzfcphbaapi_la_LDFLAGS = \
|
|
||||||
-lpthread -Wl,-init,_initvlib,-fini,_finivlib \
|
|
||||||
-export-symbols $(SYMFILE)
|
|
||||||
|
|
||||||
+@VENDORLIB_TRUE@libzfcphbaapi_la_LDFLAGS += -module -avoid-version -release $(VERSION)
|
|
||||||
+
|
|
||||||
@DOCS_FALSE@man_MANS = libzfcphbaapi.3
|
|
||||||
@DOCS_TRUE@man_MANS = libzfcphbaapi.3 dox/man/man3/SupportedHBAAPIs.3 \
|
|
||||||
@DOCS_TRUE@ dox/man/man3/UnSupportedHBAAPIs.3 dox/man/man3/hbaapi.h.3
|
|
@ -1,36 +0,0 @@
|
|||||||
diff -Nrup lib-zfcp-hbaapi-2.0.orig/Makefile.am lib-zfcp-hbaapi-2.0/Makefile.am
|
|
||||||
--- lib-zfcp-hbaapi-2.0.orig/Makefile.am 2008-11-21 15:08:13.000000000 +0100
|
|
||||||
+++ lib-zfcp-hbaapi-2.0/Makefile.am 2009-09-25 12:30:07.000000000 +0200
|
|
||||||
@@ -60,7 +60,7 @@ lib_LTLIBRARIES = libzfcphbaapi.la
|
|
||||||
|
|
||||||
libzfcphbaapi_la_SOURCES = vlib.c vlib_callbacks.c vlib_aux.c vlib_sysfs.c \
|
|
||||||
vlib_sg.c
|
|
||||||
-libzfcphbaapi_la_LIBADD = -lsysfs -lsgutils
|
|
||||||
+libzfcphbaapi_la_LIBADD = -lsysfs -lsgutils2
|
|
||||||
libzfcphbaapi_la_LDFLAGS = \
|
|
||||||
-version-info $(LIB_CURRENT):$(LIB_REVISION):$(LIB_AGE) \
|
|
||||||
-lpthread -Wl,-init,_initvlib,-fini,_finivlib \
|
|
||||||
diff -Nrup lib-zfcp-hbaapi-2.0.orig/Makefile.in lib-zfcp-hbaapi-2.0/Makefile.in
|
|
||||||
--- lib-zfcp-hbaapi-2.0.orig/Makefile.in 2008-11-21 15:08:18.000000000 +0100
|
|
||||||
+++ lib-zfcp-hbaapi-2.0/Makefile.in 2009-09-25 13:22:04.000000000 +0200
|
|
||||||
@@ -248,7 +248,7 @@ lib_LTLIBRARIES = libzfcphbaapi.la
|
|
||||||
libzfcphbaapi_la_SOURCES = vlib.c vlib_callbacks.c vlib_aux.c vlib_sysfs.c \
|
|
||||||
vlib_sg.c
|
|
||||||
|
|
||||||
-libzfcphbaapi_la_LIBADD = -lsysfs -lsgutils
|
|
||||||
+libzfcphbaapi_la_LIBADD = -lsysfs -lsgutils2
|
|
||||||
libzfcphbaapi_la_LDFLAGS = \
|
|
||||||
-version-info $(LIB_CURRENT):$(LIB_REVISION):$(LIB_AGE) \
|
|
||||||
-lpthread -Wl,-init,_initvlib,-fini,_finivlib \
|
|
||||||
diff -Nrup lib-zfcp-hbaapi-2.0.orig/vlib_sg.c lib-zfcp-hbaapi-2.0/vlib_sg.c
|
|
||||||
--- lib-zfcp-hbaapi-2.0.orig/vlib_sg.c 2008-11-20 10:23:34.000000000 +0100
|
|
||||||
+++ lib-zfcp-hbaapi-2.0/vlib_sg.c 2009-09-25 13:21:52.000000000 +0200
|
|
||||||
@@ -19,6 +19,8 @@
|
|
||||||
* @brief All calls that use sg_utils library.
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#include <scsi/sg_lib.h>
|
|
||||||
+#include <scsi/sg_cmds.h>
|
|
||||||
#include "vlib.h"
|
|
||||||
|
|
||||||
#define INTERVAL 10000000
|
|
120
normalize_dasd_arg
Normal file
120
normalize_dasd_arg
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright 2012 Red Hat, Inc.
|
||||||
|
# License: GPLv2
|
||||||
|
# Author: Jesse Keating <jkeating@redhat.com>
|
||||||
|
#
|
||||||
|
# Normalize DASD data into valid dasd.conf format
|
||||||
|
#
|
||||||
|
# Standard input should be the DASD argument
|
||||||
|
# Standard otuput is the properly formatted content
|
||||||
|
#
|
||||||
|
# it is used in
|
||||||
|
# dracut generated initramfs
|
||||||
|
#
|
||||||
|
# Much of this code was salvaged from linuxrc.s390 from Anaconda:
|
||||||
|
#
|
||||||
|
# License GPLv2+
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000-2004 by
|
||||||
|
# Bernhard Rosenkraenzer <bero@redhat.com>
|
||||||
|
# Oliver Paukstadt <opaukstadt@millenux.com>
|
||||||
|
# Karsten Hopp <karsten@redhat.de>
|
||||||
|
# Florian La Roche <laroche@redhat.com>
|
||||||
|
# Nils Philippsen <nils@redhat.de>
|
||||||
|
# Helge Deller <hdeller@redhat.de>
|
||||||
|
# David Sainty <dsainty@redhat.com>
|
||||||
|
# Copyright (C) IBM Corp. 2008,2009
|
||||||
|
# Author: Steffen Maier <maier@de.ibm.com>
|
||||||
|
|
||||||
|
|
||||||
|
function canonicalize_devno()
|
||||||
|
{
|
||||||
|
case ${#1} in
|
||||||
|
3) echo "0.0.0${1}" ;;
|
||||||
|
4) echo "0.0.${1}" ;;
|
||||||
|
*) echo "${1}" ;;
|
||||||
|
esac
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
read DASD
|
||||||
|
# See if we've gotten a format like <dev>,feature or <dev>,<dev>,<dev>
|
||||||
|
[[ "$DASD" =~ (\,*=[[:digit:]]) ]]
|
||||||
|
case $? in
|
||||||
|
# case of 0 is features, just turn the comma into a space
|
||||||
|
0) echo $DASD |sed 's/,/ /g';;
|
||||||
|
*) # We've got no features, do things normally
|
||||||
|
for dasditem in $(echo $DASD |sed 's/,/ /g')
|
||||||
|
do
|
||||||
|
unset range features lo hi attrs devno lodevno hidevno devbusid sys
|
||||||
|
case $dasditem in
|
||||||
|
autodetect|probeonly|nopav|nofcx|"") continue ;; # these don't gen a config
|
||||||
|
*)
|
||||||
|
IFS='('
|
||||||
|
read range features <<< "$dasditem"
|
||||||
|
unset IFS
|
||||||
|
lo=${range%%-*}
|
||||||
|
[[ "$lo" =~ (^[[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4}$)|(^[[:xdigit:]]{3,4}$) ]]
|
||||||
|
case $? in
|
||||||
|
0) # string matched the pattern
|
||||||
|
lo=$(canonicalize_devno $lo) ;;
|
||||||
|
1) # string did not match the pattern
|
||||||
|
echo $"Incorrect format for lower bound of DASD range $range: $lo" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
2) echo "l.$LINENO: syntax error in regex of match operator =~, code needs to be fixed" 1>&2 ;;
|
||||||
|
*) echo "l.$LINENO: unexpected return code of regex match operator =~, code needs to be fixed" 1>&2 ;;
|
||||||
|
esac
|
||||||
|
if [ "${range//*-*/}" = "" ]; then
|
||||||
|
hi=${range##*-}
|
||||||
|
[[ "$hi" =~ (^[[:xdigit:]]+\.[0-3]\.[[:xdigit:]]{4}$)|(^[[:xdigit:]]{3,4}$) ]]
|
||||||
|
case $? in
|
||||||
|
0) # string matched the pattern
|
||||||
|
hi=$(canonicalize_devno $hi)
|
||||||
|
if [ "${lo%.*}" != "${hi%.*}" ]; then
|
||||||
|
echo $"Prefixes of DASD range $range do not match: ${lo%.*} != ${hi%.*}" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
1) # string did not match the pattern
|
||||||
|
echo $"Incorrect format for upper bound of DASD range $range: $hi" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
2) echo "l.$LINENO: syntax error in regex of match operator =~, code needs to be fixed" 1>&2 ;;
|
||||||
|
*) echo "l.$LINENO: unexpected return code of regex match operator =~, code needs to be fixed" 1>&2 ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if [ "${features//*)/}" != "" ]; then
|
||||||
|
echo $"Missing closing parenthesis at features of DASD range $range: ($features" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -n "$features" ]; then
|
||||||
|
attrs=""
|
||||||
|
features="${features%)}"
|
||||||
|
for feature in $(echo $features |sed 's/:/\n/g'); do
|
||||||
|
case $feature in
|
||||||
|
ro) attrs=$attrs" readonly" ;;
|
||||||
|
diag) attrs=$attrs" use_diag" ;;
|
||||||
|
erplog|failfast) attrs=$attrs" "$feature ;;
|
||||||
|
*) echo $"Unknown DASD feature for device range $range: $feature" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
[ -z "$hi" ] && hi=$lo
|
||||||
|
lodevno=$((0x${lo##*.}))
|
||||||
|
hidevno=$((0x${hi##*.}))
|
||||||
|
for ((devno=$lodevno; $devno <= $hidevno; ++devno)); do
|
||||||
|
devbusid=$(printf "%s.%04x" ${lo%.*} $devno)
|
||||||
|
echo -n "$devbusid"
|
||||||
|
for attr in $attrs; do
|
||||||
|
echo -n " $attr=1"
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
8
rpminspect.yaml
Normal file
8
rpminspect.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
pathmigration:
|
||||||
|
excluded_paths:
|
||||||
|
- /lib/s390-tools
|
||||||
|
|
||||||
|
badfuncs:
|
||||||
|
ignore:
|
||||||
|
- /usr/sbin/qethqoat
|
348
s390-tools-zipl-blscfg-rpm-nvr-sort.patch
Normal file
348
s390-tools-zipl-blscfg-rpm-nvr-sort.patch
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
From b2daaa34776ba6afec879e362378f6f7563590a6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
||||||
|
Date: Mon, 20 Jun 2022 17:43:05 +0200
|
||||||
|
Subject: [PATCH 1/2] Revert "zipl/src: Implement sorting bls entries by
|
||||||
|
versions"
|
||||||
|
|
||||||
|
This reverts commit a0dba6bfdb50ff373fa710ffe2a307cc0748f18b.
|
||||||
|
---
|
||||||
|
zipl/src/scan.c | 139 ++----------------------------------------------
|
||||||
|
1 file changed, 3 insertions(+), 136 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
||||||
|
index 0cea1d4..9352f76 100644
|
||||||
|
--- a/zipl/src/scan.c
|
||||||
|
+++ b/zipl/src/scan.c
|
||||||
|
@@ -10,7 +10,6 @@
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
-static const char *VERSION_KEYWORD = "version";
|
||||||
|
|
||||||
|
/* Need ISOC99 function isblank() in ctype.h */
|
||||||
|
#ifndef __USE_ISOC99
|
||||||
|
@@ -646,7 +645,7 @@ scan_file(const char* filename, struct scan_token** token)
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
-bls_filter_by_names(const struct dirent *ent)
|
||||||
|
+bls_filter(const struct dirent *ent)
|
||||||
|
{
|
||||||
|
int offset = strlen(ent->d_name) - strlen(".conf");
|
||||||
|
|
||||||
|
@@ -656,111 +655,13 @@ bls_filter_by_names(const struct dirent *ent)
|
||||||
|
return strncmp(ent->d_name + offset, ".conf", strlen(".conf")) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-struct version {
|
||||||
|
- char *line; /* pointer to a line with version keyword */
|
||||||
|
- int offset; /* offset of version value in the line */
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
-/*
|
||||||
|
- * Locate version in bls file represented by ENT
|
||||||
|
- */
|
||||||
|
-static void get_version(const struct dirent *ent, struct version *v)
|
||||||
|
-{
|
||||||
|
- char *line = NULL;
|
||||||
|
- size_t len = 0;
|
||||||
|
- char *d_name;
|
||||||
|
- FILE *stream;
|
||||||
|
- ssize_t read;
|
||||||
|
-
|
||||||
|
- memset(v, 0, sizeof(*v));
|
||||||
|
- d_name = misc_make_path((char *)blsdir, (char *)ent->d_name);
|
||||||
|
- if (!d_name)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- stream = fopen(d_name, "r");
|
||||||
|
- free(d_name);
|
||||||
|
- if (!stream)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- while ((read = getline(&line, &len, stream)) != -1) {
|
||||||
|
- if (line[read - 1] == '\n') {
|
||||||
|
- line[read - 1] = '\0';
|
||||||
|
- read--;
|
||||||
|
- }
|
||||||
|
- if ((size_t)read <= strlen(VERSION_KEYWORD) + 1)
|
||||||
|
- continue;
|
||||||
|
- if (strcmp(VERSION_KEYWORD, line) > 0)
|
||||||
|
- continue;
|
||||||
|
- if (!isblank(line[strlen(VERSION_KEYWORD)]))
|
||||||
|
- continue;
|
||||||
|
- /* skip blanks */
|
||||||
|
- v->offset = strlen(VERSION_KEYWORD) + 1;
|
||||||
|
- while (v->offset < read - 1 && isblank(line[v->offset]))
|
||||||
|
- v->offset++;
|
||||||
|
- if (isblank(line[v->offset]))
|
||||||
|
- /*
|
||||||
|
- * all characters after the keyword
|
||||||
|
- * are blanks. Invalid version
|
||||||
|
- */
|
||||||
|
- continue;
|
||||||
|
- v->line = line;
|
||||||
|
- fclose(stream);
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
- free(line);
|
||||||
|
- fclose(stream);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void put_version(struct version *v)
|
||||||
|
-{
|
||||||
|
- free(v->line);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-/**
|
||||||
|
- * Check version in bls file represented by ENT.
|
||||||
|
- * Return 1 if version is valid. Otherwise return 0
|
||||||
|
- */
|
||||||
|
-static int bls_filter_by_versions(const struct dirent *ent)
|
||||||
|
-{
|
||||||
|
- struct version v;
|
||||||
|
-
|
||||||
|
- if (bls_filter_by_names(ent) == 0)
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
- get_version(ent, &v);
|
||||||
|
- if (v.line) {
|
||||||
|
- put_version(&v);
|
||||||
|
- return 1;
|
||||||
|
- }
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
|
||||||
|
static int
|
||||||
|
-bls_sort_by_names(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||||
|
+bls_sort(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||||
|
{
|
||||||
|
return strverscmp((*ent_a)->d_name, (*ent_b)->d_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int
|
||||||
|
-bls_sort_by_versions(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||||
|
-{
|
||||||
|
- struct version v1, v2;
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- get_version(*ent_a, &v1);
|
||||||
|
- get_version(*ent_b, &v2);
|
||||||
|
- /*
|
||||||
|
- * Both versions are valid.
|
||||||
|
- * It is guaranteed by bls_filter_by_versions()
|
||||||
|
- */
|
||||||
|
- ret = strverscmp(v1.line + v1.offset, v2.line + v2.offset);
|
||||||
|
-
|
||||||
|
- put_version(&v1);
|
||||||
|
- put_version(&v2);
|
||||||
|
-
|
||||||
|
- return ret;
|
||||||
|
-}
|
||||||
|
|
||||||
|
static int
|
||||||
|
scan_append_section_heading(struct scan_token* scan, int* index, char* name);
|
||||||
|
@@ -1110,40 +1011,6 @@ scan_count_target_keywords(char* keyword[])
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int bls_scandir(struct dirent ***bls_entries)
|
||||||
|
-{
|
||||||
|
- struct dirent **entries1;
|
||||||
|
- struct dirent **entries2;
|
||||||
|
- int n1, n2;
|
||||||
|
-
|
||||||
|
- /* arrange by names */
|
||||||
|
- n1 = scandir(blsdir, &entries1,
|
||||||
|
- bls_filter_by_names, bls_sort_by_names);
|
||||||
|
- if (n1 <= 0)
|
||||||
|
- return n1;
|
||||||
|
- /* arrange by versions */
|
||||||
|
- n2 = scandir(blsdir, &entries2,
|
||||||
|
- bls_filter_by_versions, bls_sort_by_versions);
|
||||||
|
-
|
||||||
|
- if (n2 <= 0 || n2 < n1) {
|
||||||
|
- /*
|
||||||
|
- * failed to sort by versions,
|
||||||
|
- * fall back to sorting by filenames
|
||||||
|
- */
|
||||||
|
- *bls_entries = entries1;
|
||||||
|
- while (n2--)
|
||||||
|
- free(entries2[n2]);
|
||||||
|
- free(entries2);
|
||||||
|
- return n1;
|
||||||
|
- }
|
||||||
|
- /* use arrangement by versions */
|
||||||
|
- *bls_entries = entries2;
|
||||||
|
- while (n1--)
|
||||||
|
- free(entries1[n1]);
|
||||||
|
- free(entries1);
|
||||||
|
- return n2;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
int
|
||||||
|
scan_check_target_data(char* keyword[], int* line)
|
||||||
|
{
|
||||||
|
@@ -1464,7 +1331,7 @@ int scan_bls(struct scan_token **token, int scan_size)
|
||||||
|
if (!(stat(blsdir, &sb) == 0 && S_ISDIR(sb.st_mode)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- n = bls_scandir(&bls_entries);
|
||||||
|
+ n = scandir(blsdir, &bls_entries, bls_filter, bls_sort);
|
||||||
|
if (n <= 0)
|
||||||
|
return n;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
||||||
|
|
||||||
|
From 692e70bcfc32a05e30146bd7077c41e0eaceff03 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Jones <pjones@redhat.com>
|
||||||
|
Date: Mon, 20 Jun 2022 17:46:59 +0200
|
||||||
|
Subject: [PATCH 2/2] blscfg: sort like rpm nvr, not like a single version
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||||
|
Signed-off-by: Dan Horák <dan@danny.cz>
|
||||||
|
---
|
||||||
|
zipl/src/Makefile | 1 +
|
||||||
|
zipl/src/scan.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++-
|
||||||
|
2 files changed, 95 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/zipl/src/Makefile b/zipl/src/Makefile
|
||||||
|
index cab5655..7ec215d 100644
|
||||||
|
--- a/zipl/src/Makefile
|
||||||
|
+++ b/zipl/src/Makefile
|
||||||
|
@@ -9,6 +9,7 @@ ALL_LDFLAGS += -Wl,-z,noexecstack $(NO_PIE_LDFLAGS)
|
||||||
|
|
||||||
|
libs = $(rootdir)/libutil/libutil.a \
|
||||||
|
$(rootdir)/libvtoc/libvtoc.a \
|
||||||
|
+ -lrpmio -lrpm
|
||||||
|
|
||||||
|
objects = misc.o error.o scan.o job.o boot.o bootmap.o fs-map.o disk.o \
|
||||||
|
bootmap_header.o envblk.o install.o zipl.o
|
||||||
|
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
||||||
|
index 9352f76..3327e2d 100644
|
||||||
|
--- a/zipl/src/scan.c
|
||||||
|
+++ b/zipl/src/scan.c
|
||||||
|
@@ -35,6 +35,8 @@
|
||||||
|
|
||||||
|
#include "lib/util_base.h"
|
||||||
|
|
||||||
|
+#include <rpm/rpmlib.h>
|
||||||
|
+
|
||||||
|
#include "boot.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "misc.h"
|
||||||
|
@@ -655,13 +657,103 @@ bls_filter(const struct dirent *ent)
|
||||||
|
return strncmp(ent->d_name + offset, ".conf", strlen(".conf")) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* returns name/version/release */
|
||||||
|
+/* NULL string pointer returned if nothing found */
|
||||||
|
+static void
|
||||||
|
+split_package_string (char *package_string, char **name,
|
||||||
|
+ char **version, char **release)
|
||||||
|
+{
|
||||||
|
+ char *package_version, *package_release;
|
||||||
|
+
|
||||||
|
+ /* Release */
|
||||||
|
+ package_release = strrchr (package_string, '-');
|
||||||
|
+
|
||||||
|
+ if (package_release != NULL)
|
||||||
|
+ *package_release++ = '\0';
|
||||||
|
+
|
||||||
|
+ *release = package_release;
|
||||||
|
+
|
||||||
|
+ /* Version */
|
||||||
|
+ package_version = strrchr(package_string, '-');
|
||||||
|
+
|
||||||
|
+ if (package_version != NULL)
|
||||||
|
+ *package_version++ = '\0';
|
||||||
|
+
|
||||||
|
+ *version = package_version;
|
||||||
|
+ /* Name */
|
||||||
|
+ *name = package_string;
|
||||||
|
+
|
||||||
|
+ /* Bubble up non-null values from release to name */
|
||||||
|
+ if (name != NULL && *name == NULL) {
|
||||||
|
+ *name = (*version == NULL ? *release : *version);
|
||||||
|
+ *version = *release;
|
||||||
|
+ *release = NULL;
|
||||||
|
+ }
|
||||||
|
+ if (*version == NULL) {
|
||||||
|
+ *version = *release;
|
||||||
|
+ *release = NULL;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
|
||||||
|
static int
|
||||||
|
-bls_sort(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||||
|
+split_cmp(char *nvr0, char *nvr1, int has_name)
|
||||||
|
+{
|
||||||
|
+ int ret = 0;
|
||||||
|
+ char *name0, *version0, *release0;
|
||||||
|
+ char *name1, *version1, *release1;
|
||||||
|
+
|
||||||
|
+ split_package_string(nvr0, has_name ? &name0 : NULL, &version0, &release0);
|
||||||
|
+ split_package_string(nvr1, has_name ? &name1 : NULL, &version1, &release1);
|
||||||
|
+
|
||||||
|
+ if (has_name) {
|
||||||
|
+ ret = rpmvercmp(name0 == NULL ? "" : name0,
|
||||||
|
+ name1 == NULL ? "" : name1);
|
||||||
|
+ if (ret != 0)
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ret = rpmvercmp(version0 == NULL ? "" : version0,
|
||||||
|
+ version1 == NULL ? "" : version1);
|
||||||
|
+ if (ret != 0)
|
||||||
|
+ return ret;
|
||||||
|
+
|
||||||
|
+ ret = rpmvercmp(release0 == NULL ? "" : release0,
|
||||||
|
+ release1 == NULL ? "" : release1);
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* return 1: filename0 is newer than filename1 */
|
||||||
|
+/* 0: filename0 and filename1 are the same version */
|
||||||
|
+/* -1: filename1 is newer than filename0 */
|
||||||
|
+static int bls_cmp(const char *filename0, const char *filename1)
|
||||||
|
{
|
||||||
|
- return strverscmp((*ent_a)->d_name, (*ent_b)->d_name);
|
||||||
|
+ char *id0, *id1;
|
||||||
|
+ int l, r;
|
||||||
|
+
|
||||||
|
+ id0 = strdup(filename0);
|
||||||
|
+ id1 = strdup(filename1);
|
||||||
|
+
|
||||||
|
+ l = strlen(id0);
|
||||||
|
+ if (l > 5 && strcmp(id0 + l - 5, ".conf"))
|
||||||
|
+ id0[l-5] = '\0';
|
||||||
|
+
|
||||||
|
+ l = strlen(id1);
|
||||||
|
+ if (l > 5 && strcmp(id1 + l - 5, ".conf"))
|
||||||
|
+ id1[l-5] = '\0';
|
||||||
|
+
|
||||||
|
+ r = split_cmp(id0, id1, 1);
|
||||||
|
+
|
||||||
|
+ free(id0);
|
||||||
|
+ free(id1);
|
||||||
|
+
|
||||||
|
+ return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int
|
||||||
|
+bls_sort(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||||
|
+{
|
||||||
|
+ return bls_cmp((*ent_a)->d_name, (*ent_b)->d_name);
|
||||||
|
+}
|
||||||
|
|
||||||
|
static int
|
||||||
|
scan_append_section_heading(struct scan_token* scan, int* index, char* name);
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
84
s390-tools-zipl-invert-script-options.patch
Normal file
84
s390-tools-zipl-invert-script-options.patch
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
From 2faae5cf51c49e3f166b8526eee276dab2fe7308 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
|
Date: Wed, 30 May 2018 14:33:25 +0200
|
||||||
|
Subject: [PATCH] zipl-switch-to-blscfg: invert ignore-default and
|
||||||
|
use-version-name options
|
||||||
|
|
||||||
|
These options were added because the zipl maintainers wanted a different
|
||||||
|
default behaviour for the migration script than the one we use. Instead
|
||||||
|
of requiring to always use these options, just invert the logic for us.
|
||||||
|
|
||||||
|
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
|
---
|
||||||
|
scripts/zipl-switch-to-blscfg | 16 +++++++++-------
|
||||||
|
scripts/zipl-switch-to-blscfg.1 | 8 ++++----
|
||||||
|
2 files changed, 13 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/scripts/zipl-switch-to-blscfg b/scripts/zipl-switch-to-blscfg
|
||||||
|
index 871935c783f..d8d5eca5867 100755
|
||||||
|
--- a/scripts/zipl-switch-to-blscfg
|
||||||
|
+++ b/scripts/zipl-switch-to-blscfg
|
||||||
|
@@ -57,14 +57,14 @@ Options:
|
||||||
|
--backup-suffix=SUFFIX suffix used for backup files, defaults to .bak
|
||||||
|
--bls-directory=DIR path to generate BLS files, defaults to /boot/loader/entries
|
||||||
|
--config-file=FILE path to zipl configuration file, defaults to /etc/zipl.conf
|
||||||
|
- --ignore-default ignore the default option from the zipl configuration file
|
||||||
|
- --use-version-name use the section kernel version as the BLS file name
|
||||||
|
+ --leave-default leave the default option from the zipl configuration file
|
||||||
|
+ --use-section-name use the section name as the BLS file name
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
OPTS="$(getopt -o hv --long help,version,backup-suffix:,bls-directory:,config-file:,\
|
||||||
|
-ignore-default,use-version-name -n \'$SCRIPTNAME\' -- "$@")"
|
||||||
|
+leave-default,use-section-name -n \'$SCRIPTNAME\' -- "$@")"
|
||||||
|
eval set -- "$OPTS"
|
||||||
|
|
||||||
|
BACKUP_SUFFIX=.bak
|
||||||
|
@@ -73,6 +73,8 @@ CMDLINE_LINUX_DEBUG=" systemd.log_level=debug systemd.log_target=kmsg"
|
||||||
|
LINUX_DEBUG_VERSION_POSTFIX="_with_debugging"
|
||||||
|
LINUX_DEBUG_TITLE_POSTFIX=" with debugging"
|
||||||
|
CONFIG="/etc/zipl.conf"
|
||||||
|
+ignore_default=true
|
||||||
|
+version_name=true
|
||||||
|
|
||||||
|
while [ ${#} -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
@@ -96,11 +98,11 @@ while [ ${#} -gt 0 ]; do
|
||||||
|
CONFIG=${2}
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
- --ignore-default)
|
||||||
|
- ignore_default=true
|
||||||
|
+ --leave-default)
|
||||||
|
+ ignore_default=false
|
||||||
|
;;
|
||||||
|
- --use-version-name)
|
||||||
|
- version_name=true
|
||||||
|
+ --use-section-name)
|
||||||
|
+ version_name=false
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
diff --git a/scripts/zipl-switch-to-blscfg.8 b/scripts/zipl-switch-to-blscfg.8
|
||||||
|
index 6bd14d00d14..71b904ffd1c 100644
|
||||||
|
--- a/scripts/zipl-switch-to-blscfg.8
|
||||||
|
+++ b/scripts/zipl-switch-to-blscfg.8
|
||||||
|
@@ -37,9 +37,9 @@ The DIRECTORY where the BLS fragments will be generated. The directory is create
|
||||||
|
The FILE used for zipl configuration file, defaults to /etc/zipl.conf.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
-\fB\-\-ignore-default\fP
|
||||||
|
-Ignore the default option from the zipl configuration file
|
||||||
|
+\fB\-\-leave-default\fP
|
||||||
|
+Leave the default option from the zipl configuration file
|
||||||
|
|
||||||
|
.TP
|
||||||
|
-\fB\-\-use-version-name\fP
|
||||||
|
-Use the section kernel version as the BLS file name
|
||||||
|
+\fB\-\-use-section-name\fP
|
||||||
|
+Use the section name as the BLS file name
|
||||||
|
--
|
||||||
|
2.17.0
|
||||||
|
|
5
s390.csh
5
s390.csh
@ -1,5 +0,0 @@
|
|||||||
# /etc/profile.d/s390.csh - set TERM variable
|
|
||||||
|
|
||||||
if ( `/sbin/consoletype stdout` == "serial" ) then
|
|
||||||
setenv TERM dumb
|
|
||||||
endif
|
|
6
s390.sh
6
s390.sh
@ -1,6 +0,0 @@
|
|||||||
# /etc/profile.d/s390.sh - set TERM variable
|
|
||||||
|
|
||||||
contype=`/sbin/consoletype stdout`
|
|
||||||
if [ "$contype" == "serial" ]; then
|
|
||||||
export TERM=dumb
|
|
||||||
fi
|
|
0
s390utils-2.31.0-fedora.patch
Normal file
0
s390utils-2.31.0-fedora.patch
Normal file
1735
s390utils.spec
1735
s390utils.spec
File diff suppressed because it is too large
Load Diff
6
sources
6
sources
@ -1,4 +1,2 @@
|
|||||||
856ecdd42ad358433eb3fcc886b58a89 s390-tools-1.8.2.tar.bz2
|
SHA512 (s390-tools-2.31.0.tar.gz) = d05722dff760605baad92b25a7a9264b3c936ff851b87a02ab39604a74d02ae4e14632d9b3d83eb9cb82a14bfcbb0d40bb4797896051ed3dd36d7690abfb1c64
|
||||||
71a8ee5918f2c44c385fcfe8350cdc98 cmsfs-1.1.8c.tar.gz
|
SHA512 (s390-tools-2.31.0-rust-vendor.tar.xz) = f9dc2887bb2502ba6f71ef7ea807380c322a46df8c65f0fc7993f3fb4eec4da120369d3e380dbcca9b6250307da0f6236a649504d542f44730e8009ace8ed450
|
||||||
2cbfffca3f07c61420899f45d221d451 lib-zfcp-hbaapi-2.0.tar.gz
|
|
||||||
ba42772e5b305b5e147344442cd70826 src_vipa-2.0.4.tar.gz
|
|
||||||
|
@ -1,74 +0,0 @@
|
|||||||
From b2f1bf78400c686bbdbcf4c29fbbb93367abe409 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Wed, 25 Mar 2009 09:36:08 +0100
|
|
||||||
Subject: [PATCH] fix location of the library
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile | 7 +++----
|
|
||||||
1 files changed, 3 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
index 669b6c6..d395fa8 100644
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -20,7 +20,8 @@ INSTALL=install
|
|
||||||
VERSION=2.0.4
|
|
||||||
|
|
||||||
# the path to the .so
|
|
||||||
-SRC_VIPA_PATH=$(INSTROOT)/usr/lib
|
|
||||||
+LIBDIR=/usr/lib
|
|
||||||
+SRC_VIPA_PATH=$(INSTROOT)$(LIBDIR)
|
|
||||||
# the path to the starter script
|
|
||||||
SRC_VIPA_STARTER_PATH=$(INSTROOT)/usr/sbin
|
|
||||||
# path to man page
|
|
||||||
@@ -34,8 +35,7 @@ src_vipa.so: src_vipa.c
|
|
||||||
|
|
||||||
src_vipa.sh:
|
|
||||||
echo '#!/bin/bash' > src_vipa.sh
|
|
||||||
- echo 'export LD_LIBRARY_PATH=$(SRC_VIPA_PATH):$$LD_LIBRARY_PATH' >> src_vipa.sh
|
|
||||||
- echo 'export LD_PRELOAD=$(SRC_VIPA_PATH)/src_vipa.so' >> src_vipa.sh
|
|
||||||
+ echo 'export LD_PRELOAD=$(LIBDIR)/src_vipa.so' >> src_vipa.sh
|
|
||||||
echo 'exec $$@' >> src_vipa.sh
|
|
||||||
chmod 755 src_vipa.sh
|
|
||||||
|
|
||||||
@@ -44,7 +44,6 @@ install: src_vipa.so src_vipa.sh
|
|
||||||
$(INSTALL) -m 755 src_vipa.so $(SRC_VIPA_PATH)
|
|
||||||
$(INSTALL) -m 755 src_vipa.sh $(SRC_VIPA_STARTER_PATH)
|
|
||||||
$(INSTALL) -m 644 src_vipa.8 $(SRC_VIPA_MANPAGE_PATH)/man8
|
|
||||||
- ldconfig
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f src_vipa.{i,s,o,sh,so} core src_vipa-$(VERSION).tar.gz
|
|
||||||
--
|
|
||||||
1.6.0.6
|
|
||||||
|
|
||||||
From 5c21f29f4d9e82942a997775c111280b85d01bb8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?utf-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
|
||||||
Date: Wed, 22 Apr 2009 12:53:55 +0200
|
|
||||||
Subject: [PATCH] make the man page path and script path configurable
|
|
||||||
|
|
||||||
---
|
|
||||||
Makefile | 6 ++++--
|
|
||||||
1 files changed, 4 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
index d395fa8..365472b 100644
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -23,9 +23,11 @@ VERSION=2.0.4
|
|
||||||
LIBDIR=/usr/lib
|
|
||||||
SRC_VIPA_PATH=$(INSTROOT)$(LIBDIR)
|
|
||||||
# the path to the starter script
|
|
||||||
-SRC_VIPA_STARTER_PATH=$(INSTROOT)/usr/sbin
|
|
||||||
+SBINDIR=/usr/sbin
|
|
||||||
+SRC_VIPA_STARTER_PATH=$(INSTROOT)$(SBINDIR)
|
|
||||||
# path to man page
|
|
||||||
-SRC_VIPA_MANPAGE_PATH=$(INSTROOT)/usr/share/man
|
|
||||||
+MANDIR=/usr/share/man
|
|
||||||
+SRC_VIPA_MANPAGE_PATH=$(INSTROOT)$(MANDIR)
|
|
||||||
|
|
||||||
all: src_vipa.so src_vipa.sh
|
|
||||||
|
|
||||||
--
|
|
||||||
1.6.0.6
|
|
||||||
|
|
@ -1 +1 @@
|
|||||||
KERNEL=="zfcp_cfdc", RUN+="/sbin/zfcpconf.sh"
|
KERNEL=="zfcp", RUN+="/sbin/zfcpconf.sh"
|
||||||
|
62
zfcpconf.sh
62
zfcpconf.sh
@ -1,11 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
|
|
||||||
# config file syntax:
|
# config file syntax:
|
||||||
# deviceno WWPN FCPLUN
|
# deviceno WWPN FCPLUN
|
||||||
|
# deviceno # allowed when auto LUN scan is enabled and port is in NPIV mode
|
||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
# 0.0.4000 0x5005076300C213e9 0x5022000000000000
|
# 0.0.4000 0x5005076300C213e9 0x5022000000000000
|
||||||
# 0.0.4001 0x5005076300c213e9 0x5023000000000000
|
# 0.0.4001 0x5005076300c213e9 0x5023000000000000
|
||||||
|
# 0.0.5000
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# manual setup:
|
# manual setup:
|
||||||
@ -19,25 +21,57 @@
|
|||||||
# echo 0x5022000000000000 > /sys/bus/ccw/drivers/zfcp/0.0.4000/0x5005076300c213e9/unit_add
|
# echo 0x5022000000000000 > /sys/bus/ccw/drivers/zfcp/0.0.4000/0x5005076300c213e9/unit_add
|
||||||
|
|
||||||
CONFIG=/etc/zfcp.conf
|
CONFIG=/etc/zfcp.conf
|
||||||
PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
PATH=/bin:/sbin
|
||||||
|
|
||||||
|
set_online()
|
||||||
|
{
|
||||||
|
DEVICE=$1
|
||||||
|
|
||||||
|
[ `cat /sys/bus/ccw/drivers/zfcp/${DEVICE}/online` = "0" ] \
|
||||||
|
&& echo 1 > /sys/bus/ccw/drivers/zfcp/${DEVICE}/online
|
||||||
|
}
|
||||||
|
|
||||||
if [ -f "$CONFIG" ]; then
|
if [ -f "$CONFIG" ]; then
|
||||||
|
|
||||||
if [ ! -d /sys/bus/ccw/drivers/zfcp ]; then
|
if [ ! -d /sys/bus/ccw/drivers/zfcp ]; then
|
||||||
modprobe zfcp
|
modprobe zfcp
|
||||||
fi
|
fi
|
||||||
if [ ! -d /sys/bus/ccw/drivers/zfcp ]; then
|
if [ ! -d /sys/bus/ccw/drivers/zfcp ]; then
|
||||||
return
|
exit 1
|
||||||
fi
|
fi
|
||||||
cat $CONFIG | grep -v "^#" | tr "A-Z" "a-z" | while read line; do
|
sed 'y/ABCDEF/abcdef/' < $CONFIG | while read line; do
|
||||||
numparams=$(echo $line | wc -w)
|
case $line in
|
||||||
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"
|
[ -z "$line" ] && continue
|
||||||
elif [ $numparams == 3 ]; then
|
set $line
|
||||||
read DEVICE WWPN FCPLUN < <(echo $line)
|
if [ $# -eq 1 ]; then
|
||||||
fi
|
DEVICE=${1##*0x}
|
||||||
echo 1 > /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/online
|
if [ `cat /sys/module/zfcp/parameters/allow_lun_scan` = "Y" ]; then
|
||||||
[ ! -d /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/$WWPN/$FCPLUN ] && echo $FCPLUN > /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/$WWPN/unit_add
|
set_online ${DEVICE}
|
||||||
|
grep -q NPIV /sys/bus/ccw/devices/${DEVICE}/host*/fc_host/host*/port_type || \
|
||||||
|
echo "Error: Only device ID (${DEVICE}) given, but port not in NPIV mode"
|
||||||
|
else
|
||||||
|
echo "Error: Only device ID (${DEVICE}) given, but LUN scan is disabled for the zfcp module"
|
||||||
|
fi
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
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
|
||||||
|
set_online ${DEVICE}
|
||||||
|
[ ! -d /sys/bus/ccw/drivers/zfcp/${DEVICE}/${WWPN}/${FCPLUN} ] \
|
||||||
|
&& echo $FCPLUN > /sys/bus/ccw/drivers/zfcp/${DEVICE}/${WWPN}/unit_add
|
||||||
|
;;
|
||||||
|
esac
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
exit 0
|
||||||
|
Loading…
Reference in New Issue
Block a user