From: Paolo Bonzini <pbonzini@redhat.com>
To: Pavel Fedin <p.fedin@samsung.com>, qemu-devel@nongnu.org
Cc: 'Igor Mammedov' <imammedo@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2] backends/hostmem-file: Allow to specify full pathname for backing file
Date: Mon, 2 Nov 2015 15:56:17 +0100 [thread overview]
Message-ID: <56377991.6010809@redhat.com> (raw)
In-Reply-To: <004301d11166$9672fe30$c358fa90$@samsung.com>
On 28/10/2015 10:54, Pavel Fedin wrote:
> This allows to explicitly specify file name to use with the backend. This
> is important when using it together with ivshmem in order to make it backed
> by hugetlbfs. By default filename is autogenerated using mkstemp(), and the
> file is unlink()ed after creation, effectively making it anonymous. This is
> not very useful with ivshmem because it ends up in a memory which cannot be
> accessed by something else.
>
> Distinction between directory and file name is done by stat() check. If an
> existing directory is given, the code keeps old behavior. Otherwise it
> creates or opens a file with the given pathname.
>
> Signed-off-by: Pavel Fedin <p.fedin@samsung.com>
> Tested-by: Igor Skalkin <i.skalkin@samsung.com>
> ---
> v1 => v2:
> - Changed title to more generic one
> - Do not introduce new property, check whether the given path is a
> directory instead
> ---
> exec.c | 34 +++++++++++++++++++++-------------
> qemu-doc.texi | 2 +-
> 2 files changed, 22 insertions(+), 14 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index 8af2570..3238c9a 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1205,6 +1205,7 @@ static void *file_ram_alloc(RAMBlock *block,
> const char *path,
> Error **errp)
> {
> + struct stat st;
> char *filename;
> char *sanitized_name;
> char *c;
> @@ -1233,26 +1234,33 @@ static void *file_ram_alloc(RAMBlock *block,
> goto error;
> }
>
> - /* Make name safe to use with mkstemp by replacing '/' with '_'. */
> - sanitized_name = g_strdup(memory_region_name(block->mr));
> - for (c = sanitized_name; *c != '\0'; c++) {
> - if (*c == '/')
> - *c = '_';
> - }
> + if (!stat(path, &st) && S_ISDIR(st.st_mode)) {
> + /* Make name safe to use with mkstemp by replacing '/' with '_'. */
> + sanitized_name = g_strdup(memory_region_name(block->mr));
> + for (c = sanitized_name; *c != '\0'; c++) {
> + if (*c == '/') {
> + *c = '_';
> + }
> + }
>
> - filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
> - sanitized_name);
> - g_free(sanitized_name);
> + filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
> + sanitized_name);
> + g_free(sanitized_name);
> +
> + fd = mkstemp(filename);
> + if (fd >= 0) {
> + unlink(filename);
> + }
> + g_free(filename);
> + } else {
> + fd = open(path, O_RDWR | O_CREAT, 0644);
> + }
>
> - fd = mkstemp(filename);
> if (fd < 0) {
> error_setg_errno(errp, errno,
> "unable to create backing store for hugepages");
> - g_free(filename);
> goto error;
> }
> - unlink(filename);
> - g_free(filename);
>
> memory = ROUND_UP(memory, hpagesize);
>
> diff --git a/qemu-doc.texi b/qemu-doc.texi
> index 3126abd..460ab71 100644
> --- a/qemu-doc.texi
> +++ b/qemu-doc.texi
> @@ -1299,7 +1299,7 @@ Instead of specifying the <shm size> using POSIX shm, you may specify
> a memory backend that has hugepage support:
>
> @example
> -qemu-system-i386 -object memory-backend-file,size=1G,mem-path=/mnt/hugepages,id=mb1
> +qemu-system-i386 -object memory-backend-file,size=1G,mem-path=/mnt/hugepages/my-shmem-file,id=mb1
> -device ivshmem,memdev=mb1
> @end example
>
>
Queued, thanks.
Paolo
prev parent reply other threads:[~2015-11-02 14:56 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-28 9:54 [Qemu-devel] [PATCH v2] backends/hostmem-file: Allow to specify full pathname for backing file Pavel Fedin
2015-11-02 14:56 ` Paolo Bonzini [this message]
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=56377991.6010809@redhat.com \
--to=pbonzini@redhat.com \
--cc=imammedo@redhat.com \
--cc=p.fedin@samsung.com \
--cc=qemu-devel@nongnu.org \
/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;
as well as URLs for NNTP newsgroup(s).