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.
125 lines
3.6 KiB
125 lines
3.6 KiB
6 years ago
|
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
|
||
|
|