- added device-mapper support into zipl (#546280)
- added missing check and print NSS name in case an NSS has been IPLed (#546297)
This commit is contained in:
parent
5d6a4c5806
commit
1729ef40b7
2716
0015-s390tools-1.8.2-zipl-dm.patch
Normal file
2716
0015-s390tools-1.8.2-zipl-dm.patch
Normal file
File diff suppressed because it is too large
Load Diff
376
0016-s390tools-1.8.2-lsreipl-nss.patch
Normal file
376
0016-s390tools-1.8.2-lsreipl-nss.patch
Normal file
@ -0,0 +1,376 @@
|
||||
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
|
||||
|
@ -46,6 +46,8 @@ Patch11: 0011-update-readahead-value-for-better-performance.patch
|
||||
Patch12: 0012-fix-multipath-device-detection-in-ziomon.patch
|
||||
Patch13: 0013-zipl-handle-status-during-ipl.patch
|
||||
Patch14: 0014-dasdview-fdasd-fix-floating-point-error-for-unformat.patch
|
||||
Patch15: 0015-s390tools-1.8.2-zipl-dm.patch
|
||||
Patch16: 0016-s390tools-1.8.2-lsreipl-nss.patch
|
||||
|
||||
Patch100: cmsfs-1.1.8-warnings.patch
|
||||
Patch101: cmsfs-1.1.8-kernel26.patch
|
||||
@ -117,6 +119,12 @@ be used together with the zSeries (s390) Linux kernel and device drivers.
|
||||
# Fix floating point error for unformatted devices in fdasd and dasdview (#537144)
|
||||
%patch14 -p1 -b .dasd-zero-division
|
||||
|
||||
# Add device-mapper support into zipl (#546280)
|
||||
%patch15 -p1 -b .zipl-dm
|
||||
|
||||
# Add missing check and print NSS name in case an NSS has been IPLed (#546297)
|
||||
%patch16 -p1 -b .lsreipl-nss
|
||||
|
||||
#
|
||||
# cmsfs
|
||||
#
|
||||
@ -798,9 +806,11 @@ User-space development files for the s390/s390x architecture.
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Dec 1 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-6
|
||||
* Thu Dec 10 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-6
|
||||
- fixed return value in cpi initscript (#541389)
|
||||
- updated zfcpconf.sh script from dracut
|
||||
- added device-mapper support into zipl (#546280)
|
||||
- added missing check and print NSS name in case an NSS has been IPLed (#546297)
|
||||
|
||||
* Fri Nov 13 2009 Dan Horák <dan[at]danny.cz> 2:1.8.2-5
|
||||
- added multiple fixes from IBM (#533955, #537142, #537144)
|
||||
|
Loading…
Reference in New Issue
Block a user