Index: benchmark/io/readv.cfa
===================================================================
--- benchmark/io/readv.cfa	(revision 1c49dc5ffbc5dbacc38e4e02c0b193eea38d80a0)
+++ benchmark/io/readv.cfa	(revision 20ab637b8e80ddcd357d96ef68d5a48781f83372)
@@ -1,2 +1,4 @@
+#define _GNU_SOURCE
+
 #include <stdlib.h>
 #include <stdio.h>
@@ -22,4 +24,6 @@
 extern bool traceHeapOn();
 extern ssize_t cfa_preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags);
+extern ssize_t cfa_preadv2_fixed(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags);
+extern void register_fixed_files( cluster &, int *, unsigned count );
 
 int fd;
@@ -28,8 +32,18 @@
 
 unsigned long int buflen = 50;
+bool fixed_file = false;
 
 thread __attribute__((aligned(128))) Reader {};
 void ?{}( Reader & this ) {
 	((thread&)this){ "Reader Thread", *the_benchmark_cluster };
+}
+
+int do_read(int fd, struct iovec * iov) {
+	if(fixed_file) {
+		return cfa_preadv2_fixed(fd, iov, 1, 0, 0);
+	}
+	else {
+		return cfa_preadv2(fd, iov, 1, 0, 0);
+	}
 }
 
@@ -42,5 +56,5 @@
 
 	while(__atomic_load_n(&run, __ATOMIC_RELAXED)) {
-		int r = cfa_preadv2(fd, &iov, 1, 0, 0);
+		int r = do_read(fd, &iov);
 		if(r < 0) abort("%s\n", strerror(-r));
 
@@ -52,4 +66,5 @@
 	BENCH_DECL
 	unsigned flags = 0;
+	int file_flags = 0;
 	unsigned sublen = 16;
 
@@ -96,7 +111,9 @@
 			case 'k':
 				flags |= CFA_CLUSTER_IO_KERNEL_POLL_SUBMITS;
+				fixed_file = true;
 				break;
 			case 'i':
 				flags |= CFA_CLUSTER_IO_KERNEL_POLL_COMPLETES;
+				file_flags |= O_DIRECT;
 				break;
 			case 'l':
@@ -123,6 +140,6 @@
 	}
 
-	fd = open(__FILE__, 0);
-	if(fd < 0) {
+	int lfd = open(__FILE__, file_flags);
+	if(lfd < 0) {
 		fprintf(stderr, "Could not open source file\n");
 		exit(EXIT_FAILURE);
@@ -134,4 +151,13 @@
 		Time start, end;
 		BenchCluster cl = { flags, CFA_STATS_READY_Q | CFA_STATS_IO };
+
+		if(fixed_file) {
+			fd = 0;
+			register_fixed_files( cl.self, &lfd, 1 );
+		}
+		else {
+			fd = lfd;
+		}
+
 		{
 			BenchProc procs[nprocs];
@@ -161,4 +187,4 @@
 	}
 
-	close(fd);
+	close(lfd);
 }
