[Crash-utility] add support for incomplete elf dump file

"Zhou, Wenjian/周文剑" zhouwj-fnst at cn.fujitsu.com
Tue Oct 28 06:17:04 UTC 2014


On 10/28/2014 01:35 AM, Dave Anderson wrote:

> A couple notes and questions re: your latest patch:
>
> diff --git a/diskdump.c b/diskdump.c
> index 1d6f7a5..850b174 100644
> --- a/diskdump.c
> +++ b/diskdump.c
> @@ -999,6 +999,17 @@ cache_page(physaddr_t paddr)
>   	if (FLAT_FORMAT()) {
>   		if (!read_flattened_format(dd->dfd, pd.offset, dd->compressed_page, pd.size))
>   			return READ_ERROR;
>
> What about FLAT_FORMAT()?  Should the (is_incomplete_dump()/pd.offset==0) test below be
> done before the FLAT_FORMAT() check?

In makedumpfile, we can't set incomplete flag in flat_format. So, the patch can't support the
flat_format.

>
> +	} else if (is_incomplete_dump()&&  (0 == pd.offset)) {
>
> Is this how the makedumpfile patch marks pages that have been truncated, i.e., by
> creating a page_desc_t that has a pd.offset == 0?

Actually, we just set incomplete flag in kdump part. When ENOSPACE happens, page_desc_t, haven't be
created, will not be created any more. And there is nothing in the position belong to it. When read
page_desc_t out at the position, pd.offset will == 0.

> +		/*
> +		 *  if --zero_excluded is specified and incomplete flag is set in dump file,
> +		 *  zero will be used to fill the lost part.
> +		 */
> +		if (!(*diskdump_flags&  ZERO_EXCLUDED))
> +			return READ_ERROR;
> +		error(WARNING, "%s: data may be lost\n"
> +			"                      pfn:%lld\n\n"
> +			,pc->dumpfile,pfn);
>
> When --zero_excluded is entered on the crash command line, then the user knows exactly
> what he is doing, and so there should not be any error/warning messages from the read
> command itself.  A message should only be displayed if debug mode is turned on.  For
> example, this is how it is done currently, but only if debug is set to 8:
>
>                  if (CRASHDEBUG(8))
>                          fprintf(fp, "read_diskdump: zero-fill: "
>                              "paddr/pfn: %llx/%lx\n",
>                                  (ulonglong)paddr, pfn);
>
>
> +		memset(dd->compressed_page, 0, dd->block_size);
>   	} else {
>   		if (lseek(dd->dfd, pd.offset, SEEK_SET) == failed)
>   			return SEEK_ERROR;
> diff --git a/netdump.c b/netdump.c
> index abc85e0..c8f057e 100644
> --- a/netdump.c
> +++ b/netdump.c
> @@ -608,7 +608,21 @@ read_netdump(int fd, void *bufptr, int cnt, ulong addr, physaddr_t paddr)
>   				    "offset: %llx\n", (ulonglong)offset);
>   			return SEEK_ERROR;
>   		}
> -		if (read(nd->ndfd, bufptr, cnt) != cnt) {
> +		/*
> + 		 *  if --zero_excluded is specified and incomplete flag is set in ELF file,
> +		 *  zero will be used to fill the lost part.
> +		 */
> +		ssize_t read_ret = read(nd->ndfd, bufptr, cnt);
> +		if (read_ret != cnt) {
> +			if (is_incomplete_dump()&&  (read_ret>= 0&&
> +					*diskdump_flags&  ZERO_EXCLUDED)) {
> +				error(WARNING, "%s: data may be lost\n"
> +					"                   offset:%llx\n\n",
> +					pc->dumpfile, offset);
>
> Same thing here... if a user enters --zero_excluded on the command line, he should
> expect strange behavior as a result.  Intermingling a bunch of WARNING messages
> like the one above will only make it more confusing.
>
> +				bufptr += read_ret;
> +				bzero(bufptr, cnt - read_ret);
> +				return cnt;
> +			}
>   			if (CRASHDEBUG(8))
>   				fprintf(fp, "read_netdump: READ_ERROR: "
>   				    "offset: %llx\n", (ulonglong)offset);
>

I fixed that. And add more descriptions to the option --zero_excluded.

Thanks
Zhou Wenjian


-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: SUPPROT_INCOMPLETE_DUMPFILE.patch
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20141028/ac5e6f4c/attachment.ksh>


More information about the Crash-utility mailing list