Re: /proc/vmcore mmap() failure issue

From: Atsushi Kumagai
Date: Mon Nov 25 2013 - 03:13:56 EST


Hello WANG,

On 2013/11/21 16:15:22, kexec <kexec-bounces@xxxxxxxxxxxxxxxxxxx> wrote:
> > How about this fail back structure instead of such an extra option ?
> >
> > Thanks
> > Atsushi Kumagai
> >
> > From: Atsushi Kumagai <kumagai-atsushi@xxxxxxxxxxxxxxxxx>
> > 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@xxxxxxxxxxxxxxxxx>
> > ---
> > 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@xxxxxxxxxxxxxxxxxxx
> http://lists.infradead.org/mailman/listinfo/kexec
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/