[PATCH] Use mmap for mlocked memory
authorJens Axboe <axboe@suse.de>
Wed, 31 May 2006 09:56:49 +0000 (11:56 +0200)
committerJens Axboe <axboe@suse.de>
Wed, 31 May 2006 09:56:49 +0000 (11:56 +0200)
fio.c

diff --git a/fio.c b/fio.c
index 09f40afe4d8cbfac612aeb79a03f037a55a4e40a..f98cd5b8e147b79cb487f9646519027b755e213f 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -2240,24 +2240,23 @@ static void run_threads(void)
 
        printf("Starting %d thread%s\n", thread_number, thread_number > 1 ? "s" : "");
 
 
        printf("Starting %d thread%s\n", thread_number, thread_number > 1 ? "s" : "");
 
+       signal(SIGINT, sig_handler);
+       signal(SIGALRM, sig_handler);
+
        if (mlock_size) {
        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) {
                if (!mlocked_mem) {
-                       perror("malloc locked mem");
+                       perror("mmap locked mem");
                        return;
                }
                if (mlock(mlocked_mem, mlock_size) < 0) {
                        return;
                }
                if (mlock(mlocked_mem, mlock_size) < 0) {
-                       free(mlocked_mem);
-                       perror("mlock");
+                       munmap(mlocked_mem, mlock_size);
                        return;
                }
        }
 
        fflush(stdout);
 
                        return;
                }
        }
 
        fflush(stdout);
 
-       signal(SIGINT, sig_handler);
-       signal(SIGALRM, sig_handler);
-
        todo = thread_number;
        nr_running = 0;
        nr_started = 0;
        todo = thread_number;
        nr_running = 0;
        nr_started = 0;
@@ -2368,7 +2367,7 @@ static void run_threads(void)
        if (mlocked_mem) {
                if (munlock(mlocked_mem, mlock_size) < 0)
                        perror("munlock");
        if (mlocked_mem) {
                if (munlock(mlocked_mem, mlock_size) < 0)
                        perror("munlock");
-               free(mlocked_mem);
+               munmap(mlocked_mem, mlock_size);
        }
 }
 
        }
 }