/proc/vmcore mmap() failure issue

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Mon Nov 25 03:09:47 EST 2013


Hello WANG,

On 2013/11/21 16:15:22, kexec <kexec-bounces at lists.infradead.org> wrote:
> > How about this fail back structure instead of such an extra option ?
> > 
> > Thanks
> > Atsushi Kumagai
> > 
> > From: Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp>
> > Date: Wed, 20 Nov 2013 14:10:19 +0900
> > Subject: [PATCH] Fall back to read() when mmap() fails.
> > 
> > Signed-off-by: Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp>
> > ---
> >  makedumpfile.c | 10 +++++++++-
> >  1 file changed, 9 insertions(+), 1 deletion(-)
> > 
> > diff --git a/makedumpfile.c b/makedumpfile.c
> > index ca03440..f583602 100644
> > --- a/makedumpfile.c
> > +++ b/makedumpfile.c
> > @@ -324,7 +324,15 @@ read_from_vmcore(off_t offset, void *bufptr, unsigned long size)
> >  		if (!read_with_mmap(offset, bufptr, size)) {
> >  			ERRMSG("Can't read the dump memory(%s) with mmap().\n",
> >  			       info->name_memory);
> > -			return FALSE;
> > +
> > +			ERRMSG("This kernel might have some problems about mmap().\n");
> > +			ERRMSG("read() will be used instead of mmap() from now.\n");
> > +
> > +			/*
> > +			 * Fall back to read().
> > +			 */
> > +			info->flag_usemmap = FALSE;
> > +			read_from_vmcore(offset, bufptr, size);
> 
> Hi, Atsushi
> 
> I've got such a workstation too. And I confirm this patch works for me.

Thanks for your testing !

> However, I have a question:
> Why not switch to mmap() back after read()?

I made this patch as a general safety net, not only for the partial page
issue.
When facing unknown issues related mmap(), the kernel may have some bugs
and mmap() can fail for every pages. In the worst case, most all mmap()
will fail and try read() with error messages after every fail, but this
patch will prevent the chattering of the switch and so many error messages.


Thanks
Atsushi Kumagai

> Thanks
> WANG Chao
> 
> >  		}
> >  	} else {
> >  		if (lseek(info->fd_memory, offset, SEEK_SET) == failed) {
> > -- 
> > 1.8.0.2
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec
> 



More information about the kexec mailing list