在 2020年10月02日 00:00, crash-utility-request(a)redhat.com 写道:
 Message: 2
 Date: Thu,  1 Oct 2020 15:19:59 +0200
 From: Alexander Egorenkov <egorenar(a)linux.ibm.com>
 To: crash-utility(a)redhat.com, k-hagio-ab(a)nec.com
 Subject: [Crash-utility] [PATCH v2 1/1] Support member offset
 	uts_namespace.name
 Message-ID: <20201001131959.456735-1-egorenar(a)linux.ibm.com>
 Content-Type: text/plain; charset="US-ASCII"
 
 The offset of the field 'init_uts_ns.name' has changed
 since commit 9a56493f6942 ("uts: Use generic ns_common::count").
 
 Link:
https://lore.kernel.org/r/159644978167.604812.1773586504374412107.stgit@l...
 
 Read the offset from VMCOREINFO if present. This requires a linux version
 which exports the requisite offset in VMCOREINFO.
 
 Signed-off-by: Alexander Egorenkov <egorenar(a)linux.ibm.com>
 ---
 
 v1 -> v2:
  * Use offset from VMCOREINFO
  * Initialize corresponding entry in offset_table
 For the v2: 
Acked-by: Lianbo Jiang <lijiang(a)redhat.com>
Thanks.
  defs.h    |  1 +
  kernel.c  | 15 ++++++++++-----
  symbols.c |  3 +++
  3 files changed, 14 insertions(+), 5 deletions(-)
 
 diff --git a/defs.h b/defs.h
 index c899fe2..9a8030a 100644
 --- a/defs.h
 +++ b/defs.h
 @@ -2104,6 +2104,7 @@ struct offset_table {                    /* stash of commonly-used
offsets */
  	long inode_i_sb_list;
  	long irq_common_data_affinity;
  	long irq_desc_irq_common_data;
 +	long uts_namespace_name;
  };
  
  struct size_table {         /* stash of commonly-used sizes */
 diff --git a/kernel.c b/kernel.c
 index 5ae8cf1..9871637 100644
 --- a/kernel.c
 +++ b/kernel.c
 @@ -230,16 +230,21 @@ kernel_init()
  		fprintf(fp, "%s\n\n", ctime_tz(&kt->date.tv_sec));
  		clean_exit(0);
  	}
 -	
 +
 +	MEMBER_OFFSET_INIT(uts_namespace_name, "uts_namespace", "name");
  	if (symbol_exists("system_utsname"))
          	readmem(symbol_value("system_utsname"), KVADDR, &kt->utsname,
                  	sizeof(struct new_utsname), "system_utsname", 
  			RETURN_ON_ERROR);
 -	else if (symbol_exists("init_uts_ns"))
 -		readmem(symbol_value("init_uts_ns") + sizeof(int),
 -			KVADDR,  &kt->utsname, sizeof(struct new_utsname), 
 +	else if (symbol_exists("init_uts_ns")) {
 +		long offset = sizeof(int);
 +		if (VALID_MEMBER(uts_namespace_name))
 +			offset = OFFSET(uts_namespace_name);
 +
 +		readmem(symbol_value("init_uts_ns") + offset,
 +			KVADDR,  &kt->utsname, sizeof(struct new_utsname),
  			"init_uts_ns", RETURN_ON_ERROR);
 -	else
 +	} else
  		error(INFO, "cannot access utsname information\n\n");
  
  	if (CRASHDEBUG(1)) {
 diff --git a/symbols.c b/symbols.c
 index d22fb1d..3dd5fa1 100644
 --- a/symbols.c
 +++ b/symbols.c
 @@ -10585,6 +10585,9 @@ dump_offset_table(char *spec, ulong makestruct)
  	fprintf(fp, "                 xa_node_shift: %ld\n",
  		OFFSET(xa_node_shift));
  
 +	fprintf(fp, "            uts_namespace_name: %ld\n",
 +		OFFSET(uts_namespace_name));
 +
  	fprintf(fp, "\n                    size_table:\n");
  	fprintf(fp, "                          page: %ld\n", SIZE(page));
  	fprintf(fp, "                    page_flags: %ld\n", SIZE(page_flags));
 -- 2.26.2