Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> --- exec.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-)
diff --git a/exec.c b/exec.c index 5f3b265..dcbe4e1 100644 --- a/exec.c +++ b/exec.c @@ -2353,11 +2353,34 @@ static long gethugepagesize(const char *path) return fs.f_bsize; } +/* Return FD to temporary file inside directory at 'path', + * truncated to size 'length' + */ +static int get_temp_fd(const char *path) +{ + int fd; + char *filename; + + if (asprintf(&filename, "%s/qemu_back_mem.XXXXXX", path) == -1) { + return -1; + } + + fd = mkstemp(filename); + if (fd < 0) { + perror("unable to create backing store for hugepages"); + free(filename); + return -1; + } + unlink(filename); + free(filename); + + return fd; +} + static void *file_ram_alloc(RAMBlock *block, size_t length, const char *path) { - char *filename; void *area; int fd; #ifdef MAP_POPULATE @@ -2379,18 +2402,10 @@ static void *file_ram_alloc(RAMBlock *block, return NULL; } - if (asprintf(&filename, "%s/qemu_back_mem.XXXXXX", path) == -1) { - return NULL; - } - - fd = mkstemp(filename); + fd = get_temp_fd(path); if (fd < 0) { - perror("unable to create backing store for hugepages"); - free(filename); return NULL; } - unlink(filename); - free(filename); length = (length+hpagesize-1) & ~(hpagesize-1); -- 1.7.10.4