The attached test reproduces the problem on a loop-back mounted file containing a UDF filesystem. The key appears to be the consecutive DIOs to the same page. David --- #define __USE_GNU #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <err.h> # define O_DIRECT 040000 static char buf[256 * 1024] __attribute__((aligned(512))); static char *filename; static void cleanup(void) { if (unlink(filename) == -1) err(1, "unlink"); } int main(int argc, char **argv) { size_t page = 4096; int fd; if (argc != 2) { fprintf(stderr, "Format: %s <file>\n", argv[1]); exit(2); } filename = argv[1]; fd = open(filename, O_RDWR | O_CREAT | O_EXCL | O_DIRECT, 0666); if (fd == -1) err(1, "%s", filename); atexit(cleanup); if (pwrite(fd, buf, page, 0) != page) err(1, "pwrite/1"); if (pwrite(fd, buf, page, page) != page) err(1, "pwrite/2"); if (close(fd) == -1) err(1, "close"); return 0; }