[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] backends/hostmem-file: Allow to specify full
From: |
Paolo Bonzini |
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 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 |
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 <address@hidden>
> Tested-by: Igor Skalkin <address@hidden>
> ---
> 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 in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v2] backends/hostmem-file: Allow to specify full pathname for backing file,
Paolo Bonzini <=