73 lines
1.8 KiB
Diff
73 lines
1.8 KiB
Diff
From: Petr Tesarik <ptesarik@suse.cz>
|
|
Subject: Automatically detect compressed booted kernel
|
|
References: bnc#777516, bnc#828260
|
|
Upstream: not yet
|
|
|
|
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
|
|
|
|
---
|
|
filesys.c | 26 ++++++++++++++++++++++----
|
|
1 file changed, 22 insertions(+), 4 deletions(-)
|
|
|
|
Index: b/filesys.c
|
|
===================================================================
|
|
--- a/filesys.c
|
|
+++ b/filesys.c
|
|
@@ -588,6 +588,7 @@ static int
|
|
find_booted_kernel(void)
|
|
{
|
|
char kernel[BUFSIZE];
|
|
+ char *real_kernel;
|
|
char buffer[BUFSIZE];
|
|
char **searchdirs;
|
|
int i, preferred, wrapped;
|
|
@@ -637,16 +638,24 @@ find_booted_kernel(void)
|
|
sprintf(kernel, "%s%s", searchdirs[i], dp->d_name);
|
|
|
|
if (mount_point(kernel) ||
|
|
- !file_readable(kernel) ||
|
|
- !is_kernel(kernel))
|
|
+ !file_readable(kernel))
|
|
continue;
|
|
|
|
+ if (!is_compressed_kernel(kernel, &real_kernel))
|
|
+ real_kernel = kernel;
|
|
+
|
|
if (CRASHDEBUG(1))
|
|
fprintf(fp, "find_booted_kernel: check: %s\n",
|
|
kernel);
|
|
|
|
- found = match_file_string(kernel, kt->proc_version, buffer);
|
|
-
|
|
+ if (!is_kernel(real_kernel)) {
|
|
+ if (real_kernel != kernel)
|
|
+ free(real_kernel);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ found = match_file_string(real_kernel, kt->proc_version, buffer);
|
|
+
|
|
if (found)
|
|
break;
|
|
}
|
|
@@ -666,10 +675,19 @@ find_booted_kernel(void)
|
|
if (CRASHDEBUG(1))
|
|
fprintf(fp, "find_booted_kernel: found: %s\n",
|
|
pc->namelist);
|
|
+ if (real_kernel != kernel) {
|
|
+ pc->namelist_orig = pc->namelist;
|
|
+ pc->namelist = real_kernel;
|
|
+ }
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
+ if (real_kernel != kernel) {
|
|
+ remove(real_kernel);
|
|
+ free(real_kernel);
|
|
+ }
|
|
+
|
|
error(INFO,
|
|
"cannot find booted kernel -- please enter namelist argument\n\n");
|
|
return FALSE;
|