Merge branch 'master' into gfio

Conflicts:
	Makefile
	backend.c
	client.c
	fio.c
	fio.h
	ioengine.h
	options.c
	os/os-linux.h
	server.c

Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/memory.c b/memory.c
index 5293af9..e969221 100644
--- a/memory.c
+++ b/memory.c
@@ -117,14 +117,16 @@
 
 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 @@
 			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);