You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.6 KiB
124 lines
3.6 KiB
From 08e08d1330f5d4dd0989bfb1558d85c82254654e Mon Sep 17 00:00:00 2001 |
|
From: Bhupesh Sharma <bhsharma@redhat.com> |
|
Date: Fri, 17 Nov 2017 06:30:41 +0900 |
|
Subject: [PATCH 2/2] [PATCH 2/2] Fix 'kernel_version' variable being |
|
uninitialized & introduce minor reorganization |
|
|
|
On executing `makedumpfile --mem-usage /proc/kcore`, it |
|
fails currently with the following error message on newer Linux kernels |
|
like 4.13.0 or 4.14.0: |
|
|
|
mem-usage not supported for this kernel. |
|
You can try with -f if your kernel's kcore has valid p_paddr |
|
makedumpfile Failed. |
|
|
|
This happens because 'info->kernel_version' is uninitialized in function |
|
main(). So when we perform the following check, it fails even though the |
|
kernel version is greater than 4.11.0: |
|
|
|
if (info->kernel_version < KERNEL_VERSION(4, 11, 0) && |
|
!info->flag_force) { |
|
|
|
Fix this by reorganizing the code to: |
|
- Add an API to populate the kernel version. |
|
- Call this API rather than replicating the open code across other APIs |
|
across 'makedumpfile.c' |
|
|
|
After this patch, '--mem-usage' can be used properly with makedumpfile. |
|
Here are the logs I observe on a Fedora 26 ppc64le system: |
|
|
|
The kernel version is not supported. |
|
The makedumpfile operation may be incomplete. |
|
|
|
TYPE PAGES EXCLUDABLE DESCRIPTION |
|
---------------------------------------------------------------------- |
|
ZERO 99 yes Pages filled with zero |
|
NON_PRI_CACHE 7817 yes Cache pages without private flag |
|
PRI_CACHE 63603 yes Cache pages with private flag |
|
USER 4105 yes User process pages |
|
FREE 165446 yes Free pages |
|
KERN_DATA 6738 no Dumpable kernel data |
|
|
|
page size: 65536 |
|
Total pages on system: 247808 |
|
Total size on system: 16240345088 Byte |
|
|
|
Signed-off-by: Bhupesh Sharma <bhsharma@redhat.com> |
|
--- |
|
makedumpfile.c | 31 ++++++++++++++++++++----------- |
|
1 file changed, 20 insertions(+), 11 deletions(-) |
|
|
|
diff --git a/makedumpfile-1.6.2/makedumpfile.c b/makedumpfile-1.6.2/makedumpfile.c |
|
index 7ce0c6d648aa..4bde542b4f0c 100644 |
|
--- a/makedumpfile-1.6.2/makedumpfile.c |
|
+++ b/makedumpfile-1.6.2/makedumpfile.c |
|
@@ -1089,6 +1089,21 @@ fallback_to_current_page_size(void) |
|
return TRUE; |
|
} |
|
|
|
+static int populate_kernel_version(void) |
|
+{ |
|
+ struct utsname utsname; |
|
+ |
|
+ if (uname(&utsname)) { |
|
+ ERRMSG("Cannot get name and information about current kernel : %s\n", |
|
+ strerror(errno)); |
|
+ return FALSE; |
|
+ } |
|
+ |
|
+ info->kernel_version = get_kernel_version(utsname.release); |
|
+ |
|
+ return TRUE; |
|
+} |
|
+ |
|
int |
|
check_release(void) |
|
{ |
|
@@ -1120,11 +1135,8 @@ check_release(void) |
|
} |
|
} |
|
|
|
- info->kernel_version = get_kernel_version(info->system_utsname.release); |
|
- if (info->kernel_version == FALSE) { |
|
- ERRMSG("Can't get the kernel version.\n"); |
|
+ if (!populate_kernel_version()) |
|
return FALSE; |
|
- } |
|
|
|
return TRUE; |
|
} |
|
@@ -10973,20 +10985,14 @@ int is_crashkernel_mem_reserved(void) |
|
|
|
static int get_page_offset(void) |
|
{ |
|
- struct utsname utsname; |
|
- if (uname(&utsname)) { |
|
- ERRMSG("Cannot get name and information about current kernel : %s", |
|
- strerror(errno)); |
|
+ if (!populate_kernel_version()) |
|
return FALSE; |
|
- } |
|
|
|
- info->kernel_version = get_kernel_version(utsname.release); |
|
get_versiondep_info(); |
|
|
|
return TRUE; |
|
} |
|
|
|
- |
|
/* Returns the physical address of start of crash notes buffer for a kernel. */ |
|
static int get_sys_kernel_vmcoreinfo(uint64_t *addr, uint64_t *len) |
|
{ |
|
@@ -11363,6 +11369,9 @@ main(int argc, char *argv[]) |
|
MSG("Try `makedumpfile --help' for more information.\n"); |
|
goto out; |
|
} |
|
+ if (!populate_kernel_version()) |
|
+ goto out; |
|
+ |
|
if (info->kernel_version < KERNEL_VERSION(4, 11, 0) && |
|
!info->flag_force) { |
|
MSG("mem-usage not supported for this kernel.\n"); |
|
-- |
|
2.7.4 |
|
|
|
|