Hello, This is for whoever is doing the QA suite (not it!), it tests the orphan code to make sure two threads unlinking/linking a file doesn''t blow up. A successfull run of this should result in no output at all. Thanks, Josef #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <errno.h> static int link_thread() { int i, ret; for (i = 0; i < 1000; i++) { int fd; ret = link("foo", "bar"); if (ret) { if (errno == ENOENT) continue; fprintf(stderr, "FAILED: could not link foo to bar: " "%d\n", errno); break; } fd = open("bar", O_RDWR); if (fd < 0) { fprintf(stderr, "FAILED: could not open bar: %d\n", errno); break; } ret = unlink("bar"); if (ret) { fprintf(stderr, "FAILED: could not unlink bar: %d\n", errno); break; } ret = fsync(fd); if (ret) { fprintf(stderr, "FAILED: could not fsync bar: %d\n", errno); break; } ret = close(fd); if (ret) { fprintf(stderr, "FAILED: could not close bar: %d\n", errno); break; } } } static void unlink_thread() { int fd, i, ret; for (i = 0; i < 1000; i++) { fd = open("foo", O_CREAT | O_RDWR, 0666); if (fd < 0) { fprintf(stderr, "FAILED: could not create foo: %d\n", errno); break; } ret = fsync(fd); if (ret) { fprintf(stderr, "FAILED: could not fsync foo after " "create: %d\n", errno); break; } ret = unlink("foo"); if (ret) { fprintf(stderr, "FAILED: could not unlink foo: %d\n", errno); break; } ret = fsync(fd); if (ret) { fprintf(stderr, "FAILED: could not fsync foo after " "unlink: %d\n", errno); break; } ret = close(fd); if (ret) { fprintf(stderr, "FAILED: could not close foo: %d\n", errno); break; } } } int main(int argc, char **argv) { pid_t child; int ret; child = fork(); if (!child) { link_thread(); } else if (child > 0) { int status; unlink_thread(); ret = waitpid(child, &status, 0); } else { fprintf(stderr, "Error forking child: %d\n", errno); } return 0; } -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html