X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=memory.c;h=e969221f36f86a8a1c74b502152a97e75f81c219;hp=5293af96b226240117d312f24875f0406ceff5fd;hb=836fcc0fceb233ebcc41ee63b4ea5cae20b678a4;hpb=4aaefbfa2b7a7a70ff6c6851dc3cee01b5993149 diff --git a/memory.c b/memory.c index 5293af96..e969221f 100644 --- a/memory.c +++ b/memory.c @@ -117,14 +117,16 @@ static void free_mem_shm(struct thread_data *td) static int alloc_mem_mmap(struct thread_data *td, size_t total_mem) { - int flags = MAP_PRIVATE; + int flags = 0; td->mmapfd = 1; if (td->o.mem_type == MEM_MMAPHUGE) { unsigned long mask = td->o.hugepage_size - 1; - flags |= MAP_HUGETLB; + /* TODO: make sure the file is a real hugetlbfs file */ + if (!td->o.mmapfile) + flags |= MAP_HUGETLB; total_mem = (total_mem + mask) & ~mask; } @@ -136,13 +138,18 @@ static int alloc_mem_mmap(struct thread_data *td, size_t total_mem) td->orig_buffer = NULL; return 1; } - if (ftruncate(td->mmapfd, total_mem) < 0) { + if (td->o.mem_type != MEM_MMAPHUGE && + ftruncate(td->mmapfd, total_mem) < 0) { td_verror(td, errno, "truncate mmap file"); td->orig_buffer = NULL; return 1; } + if (td->o.mem_type == MEM_MMAPHUGE) + flags |= MAP_SHARED; + else + flags |= MAP_PRIVATE; } else - flags |= OS_MAP_ANON; + flags |= OS_MAP_ANON | MAP_PRIVATE; td->orig_buffer = mmap(NULL, total_mem, PROT_READ | PROT_WRITE, flags, td->mmapfd, 0);