[PATCH] Use mmap for mlocked memory
diff --git a/fio.c b/fio.c
index 09f40af..f98cd5b 100644
--- a/fio.c
+++ b/fio.c
@@ -2240,24 +2240,23 @@
 
 	printf("Starting %d thread%s\n", thread_number, thread_number > 1 ? "s" : "");
 
+	signal(SIGINT, sig_handler);
+	signal(SIGALRM, sig_handler);
+
 	if (mlock_size) {
-		mlocked_mem = malloc(mlock_size);
+		mlocked_mem = mmap(NULL, mlock_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | OS_MAP_ANON, 0, 0);
 		if (!mlocked_mem) {
-			perror("malloc locked mem");
+			perror("mmap locked mem");
 			return;
 		}
 		if (mlock(mlocked_mem, mlock_size) < 0) {
-			free(mlocked_mem);
-			perror("mlock");
+			munmap(mlocked_mem, mlock_size);
 			return;
 		}
 	}
 
 	fflush(stdout);
 
-	signal(SIGINT, sig_handler);
-	signal(SIGALRM, sig_handler);
-
 	todo = thread_number;
 	nr_running = 0;
 	nr_started = 0;
@@ -2368,7 +2367,7 @@
 	if (mlocked_mem) {
 		if (munlock(mlocked_mem, mlock_size) < 0)
 			perror("munlock");
-		free(mlocked_mem);
+		munmap(mlocked_mem, mlock_size);
 	}
 }