From: Geoff Levand <geoff@infradead.org>
To: Michael Holzheu <holzheu@linux.vnet.ibm.com>,
Simon Horman <horms@verge.net.au>
Cc: stefan.roscher@de.ibm.com, kexec@lists.infradead.org
Subject: Re: [PATCH] kexec: use mmap instead of read for slurp_file()
Date: Wed, 14 Oct 2015 17:05:52 -0700 [thread overview]
Message-ID: <1444867552.3929.7.camel@infradead.org> (raw)
In-Reply-To: <20150904141159.182c2f08@holzheu>
Hi,
On Fri, 2015-09-04 at 14:11 +0200, Michael Holzheu wrote:
> The slurp_fd() function allocates memory and uses the read() system call.
> This results in double memory consumption for image and initrd:
>
> 1) Memory allocated in user space by the kexec tool
> 2) Memory allocated in kernel by the kexec() system call
>
> Therefore use mmap() for non-character devices to reduce the runtime
> memory consumption of the kexec tool.
>
> The following use case illustrates the usefulness of this patch a bit more:
>
> 1) Boot a 4 GB Linux system
> 2) Read kernel and 1,5 GB ramdisk from external source into local tmpfs (ram)
> 3) kexec the kernel and ramdisk
>
> Without this patch for the kexec runtime we need:
>
> 1,5 GB (tmpfs) + 1,5 GB (kexec malloc) + 1,5 GB (kernel memory) = 4,5 GB
>
> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
> ---
> kexec/kexec.c | 8 +++++---
>
> if (err < 0)
> > > > > die("Can not seek to the begin of file %s: %s\n",
> > > > > > > filename, strerror(errno));
> +> > > buf = slurp_fd(fd, filename, size, &nread);
> > > } else {
> -> > > size = stats.st_size;
> +> > > size = nread = stats.st_size;
> +> > > buf = mmap(NULL, size,
With this change the caller can't tell if buf was malloc'ed or mmaped. The
only safe thing it can do is to not call free() on the returned buf, this will
lead to memory leakage for malloc'ed buffers.
-Geoff
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
next prev parent reply other threads:[~2015-10-15 0:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-18 16:17 [RFC PATCH] kexec: use mmap instead of read for slurp_file() Michael Holzheu
2015-08-28 14:26 ` PING: " Michael Holzheu
2015-09-02 1:07 ` Simon Horman
2015-09-02 8:48 ` Michael Holzheu
2015-09-04 9:45 ` Simon Horman
2015-09-04 12:11 ` [PATCH] " Michael Holzheu
2015-09-07 6:44 ` Simon Horman
2015-10-15 0:05 ` Geoff Levand [this message]
2015-10-15 12:31 ` Michael Holzheu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1444867552.3929.7.camel@infradead.org \
--to=geoff@infradead.org \
--cc=holzheu@linux.vnet.ibm.com \
--cc=horms@verge.net.au \
--cc=kexec@lists.infradead.org \
--cc=stefan.roscher@de.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox