/* * used by Felix to test xfs_fsr filesystem corruption, * source originally from http://froebe.net/blog/wp-content/uploads/2007/05/dio.c */ #include #include #include #include #include #include #include #include #include #define _GNU_SOURCE #define __USE_GNU #define __USE_LARGEFILE64 #define BUFFER_SIZE 1048576 #include int main(int argc, char **argv) { int test_fd; int input_fd; int bytes_read; long long bytes_written = 0; int i; int pagesize = getpagesize(); char *realbuff = malloc(BUFFER_SIZE + pagesize); char *alignedbuff = ((( (int unsigned)realbuff + pagesize - 1) / pagesize) * pagesize); input_fd = open("/dev/zero", O_RDONLY); test_fd = open("./test.dat", O_CREAT|O_WRONLY|O_DIRECT|O_ASYNC|O_LARGEFILE, 0666); if (test_fd < 0) { printf("couldn't open test.dat\n"); exit(1); } for (i=0; i < 20480; i++) { bytes_read = read(input_fd, alignedbuff, BUFFER_SIZE); bytes_written += write(test_fd, alignedbuff, bytes_read); if (errno == 0) { printf("%lu MBytes written\n", (long)(bytes_written / 1048576)); } else { fprintf(stderr, "write failed (err %d): %s\n", errno, strerror(errno)); } } return 0; }