[PATCH v2 1/1] Calculate offset to field 'init_uts_ns.name'

HAGIO KAZUHITO(萩尾 一仁) k-hagio-ab at nec.com
Thu Sep 17 01:34:41 EDT 2020


Hi Alexander,

-----Original Message-----
> The offset has changed in linux-next (v5.9.0) from 4 to 0 because
> there is no more 'kref' member variable at the beginning of 'init_uts_ns'.
> The change was introduced with commit 9a56493f6942c0e2df1579986128721da96e00d8.
> To handle both cases correctly, calculate the offset at run time instead.

Thank you for catching this and the patch.

but do you know the kernel patch corresponding to this patch, i.e. adds
the OFFSET(init_uts_ns.name) (strictly, OFFSET(uts_namespace.name) probably)
entry to vmcoreinfo?  The makedumpfile usually just read it from vmcore,
so cannot calculate without debug info in vmlinux.

If it has not been posted yet, we need to do.  The best situation is
that the patch is merged into linux-next first and then merged into
mainline together with the commit 9a56493f6942.

Is it possible for you?  otherwise, anyone or I might try.

Thanks,
Kazu

> 
> Signed-off-by: Alexander Egorenkov <egorenar at linux.ibm.com>
> ---
>  makedumpfile.c | 8 ++++++--
>  makedumpfile.h | 4 ++++
>  2 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/makedumpfile.c b/makedumpfile.c
> index 4c4251e..2d62db8 100644
> --- a/makedumpfile.c
> +++ b/makedumpfile.c
> @@ -1159,7 +1159,7 @@ check_release(void)
>  	if (SYMBOL(system_utsname) != NOT_FOUND_SYMBOL) {
>  		utsname = SYMBOL(system_utsname);
>  	} else if (SYMBOL(init_uts_ns) != NOT_FOUND_SYMBOL) {
> -		utsname = SYMBOL(init_uts_ns) + sizeof(int);
> +		utsname = SYMBOL(init_uts_ns) + OFFSET(init_uts_ns.name);
>  	} else {
>  		ERRMSG("Can't get the symbol of system_utsname.\n");
>  		return FALSE;
> @@ -2077,7 +2077,7 @@ get_str_osrelease_from_vmlinux(void)
>  	if (SYMBOL(system_utsname) != NOT_FOUND_SYMBOL) {
>  		utsname = SYMBOL(system_utsname);
>  	} else if (SYMBOL(init_uts_ns) != NOT_FOUND_SYMBOL) {
> -		utsname = SYMBOL(init_uts_ns) + sizeof(int);
> +		utsname = SYMBOL(init_uts_ns) + OFFSET(init_uts_ns.name);
>  	} else {
>  		ERRMSG("Can't get the symbol of system_utsname.\n");
>  		return FALSE;
> @@ -2285,6 +2285,8 @@ write_vmcoreinfo_data(void)
>  	WRITE_MEMBER_OFFSET("mmu_psize_def.shift", mmu_psize_def.shift);
>  	WRITE_MEMBER_OFFSET("cpu_spec.mmu_features", cpu_spec.mmu_features);
> 
> +	WRITE_MEMBER_OFFSET("init_uts_ns.name", init_uts_ns.name);
> +
>  	if (SYMBOL(node_data) != NOT_FOUND_SYMBOL)
>  		WRITE_ARRAY_LENGTH("node_data", node_data);
>  	if (SYMBOL(pgdat_list) != NOT_FOUND_SYMBOL)
> @@ -2697,6 +2699,8 @@ read_vmcoreinfo(void)
>  		READ_MEMBER_OFFSET("log.text_len", printk_log.text_len);
>  	}
> 
> +	READ_MEMBER_OFFSET("init_uts_ns.name", init_uts_ns.name);
> +
>  	READ_ARRAY_LENGTH("node_data", node_data);
>  	READ_ARRAY_LENGTH("pgdat_list", pgdat_list);
>  	READ_ARRAY_LENGTH("mem_section", mem_section);
> diff --git a/makedumpfile.h b/makedumpfile.h
> index 03fb4ce..7d8c54d 100644
> --- a/makedumpfile.h
> +++ b/makedumpfile.h
> @@ -1880,6 +1880,10 @@ struct offset_table {
>  	struct cpu_spec_s {
>  		long	mmu_features;
>  	} cpu_spec;
> +
> +	struct init_uts_ns_s {
> +		long	name;
> +	} init_uts_ns;
>  };
> 
>  /*
> --
> 2.26.2
> 
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec



More information about the kexec mailing list