#include #include #include #include #include #include /* * mmap a preallocated file and write to a set of offsets * in it. We'll check to see if the underlying extents are * converted correctly on writeback. */ int main(int argc, char **argv) { unsigned long long o; int fd, i; struct xfs_flock64 space; unsigned char *buf; if(argc < 3) { fprintf(stderr, "%s \n", argv[0]); exit(1); } errno = 0; o = strtoull(argv[1], NULL, 0); if (errno) { perror("strtoull"); exit(errno); } for(i = 2; i < argc; i++) { unlink(argv[i]); fd = open(argv[i], O_RDWR|O_CREAT|O_LARGEFILE, 0666); if(fd < 0) { perror("open"); exit(2); } if(ftruncate64(fd, o) < 0) { perror("ftruncate64"); exit(3); } space.l_whence = SEEK_SET; space.l_start = 0; space.l_len = o; if(ioctl(fd, XFS_IOC_RESVSP64, &space)) { perror("ioctl()"); exit(4); } buf = mmap(NULL, (int)o, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if(buf == MAP_FAILED) { perror("mmap()"); exit(5); } else { buf[o-1] = 0; buf[o/2] = 0; buf[0] = 0; munmap(buf, o); } fsync(fd); if(close(fd) == -1) { perror("close"); exit(6); } } exit(0); }