uint64_t actual = *(uint64_t*)(buf + i);
if (expected != actual) {
printf("error: offset %llu had %llu\n", expected, actual);
+ exit(1);
return -1;
}
}
close(fd);
fd = open("foo", O_RDONLY);
- pread(fd, buf, len, offset);
+ void *buf2 = malloc(len);
+ pread(fd, buf2, len, offset);
close(fd);
- unlink("foo");
- int r = verify_pattern(buf, len, offset);
+ int r = verify_pattern(buf2, len, offset);
+
+ unlink("foo");
free(rawbuf);
+ free(buf2);
return r;
}
close(fd);
fd = open("foo", O_RDONLY);
- pread(fd, buf, len, offset);
+ void *buf2 = malloc(len);
+ pread(fd, buf2, len, offset);
close(fd);
- unlink("foo");
- int r = verify_pattern(buf, len, offset);
+ int r = verify_pattern(buf2, len, offset);
+
+ unlink("foo");
+ free(buf2);
free(rawbuf);
return r;
}
char *buf;
int fd;
uint64_t i, j, k;
-
- write_pattern();
-
- for (i = 0; i < 4096; i += 512)
- for (j = 4*1024*1024 - 4096; j < 4*1024*1024 + 4096; j += 512)
- for (k = 1024; k <= 16384; k *= 2) {
- read_direct(i, j, k);
- read_sync(i, j, k);
- }
-
+ int read = 1;
+ int write = 1;
+
+ if (argc >= 2 && strcmp(argv[1], "read") == 0)
+ write = 0;
+ if (argc >= 2 && strcmp(argv[1], "write") == 0)
+ read = 0;
+
+ if (read) {
+ write_pattern();
+
+ for (i = 0; i < 4096; i += 512)
+ for (j = 4*1024*1024 - 4096; j < 4*1024*1024 + 4096; j += 512)
+ for (k = 1024; k <= 16384; k *= 2) {
+ read_direct(i, j, k);
+ read_sync(i, j, k);
+ }
+
+ }
unlink("foo");
-
- for (i = 0; i < 4096; i += 512)
- for (j = 4*1024*1024 - 4096; j < 4*1024*1024 + 4096; j += 512)
- for (k = 1024; k <= 16384; k *= 2) {
- write_direct(i, j, k);
- write_sync(i, j, k);
- }
-
+ if (write) {
+ for (i = 0; i < 4096; i += 512)
+ for (j = 4*1024*1024 - 4096 + 512; j < 4*1024*1024 + 4096; j += 512)
+ for (k = 1024; k <= 16384; k *= 2) {
+ write_direct(i, j, k);
+ write_sync(i, j, k);
+ }
+ }
return 0;