--- /dev/null
+Clearing orphaned inode 60 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 38 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 55 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 40 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 49 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 28 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 84 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 83 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 110 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 54 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 36 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 72 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 106 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 70 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 81 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 29 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 103 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 107 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 53 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 50 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 85 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 20 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 102 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 74 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 32 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 77 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 46 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 25 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 93 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 89 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 14 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 52 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 42 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 44 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 58 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 17 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 31 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 13 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 48 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 33 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 59 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 30 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 67 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 90 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 23 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 34 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 24 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 80 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 26 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 63 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 87 (uid=0, gid=0, mode=0100600, size=0)
+Clearing orphaned inode 69 (uid=0, gid=0, mode=0100600, size=0)
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 53/2048 files (1.9% non-contiguous), 1304/8192 blocks
+Exit status is 1
--- /dev/null
+/*
+ * random_exercise.c --- Test program which exercises an ext2
+ * filesystem. It creates a lot of random files in the current
+ * directory, while holding some files open while they are being
+ * deleted. This exercises the orphan list code, as well as
+ * creating lots of fodder for the ext3 journal.
+ *
+ * Copyright (C) 2000 Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define MAXFDS 128
+
+struct state {
+ char name[16];
+ int state;
+};
+
+#define STATE_CLEAR 0
+#define STATE_CREATED 1
+#define STATE_DELETED 2
+
+struct state state_array[MAXFDS];
+
+void clear_state_array()
+{
+ int i;
+
+ for (i = 0; i < MAXFDS; i++)
+ state_array[i].state = STATE_CLEAR;
+}
+
+int get_random_fd()
+{
+ int fd;
+
+ while (1) {
+ fd = ((int) random()) % MAXFDS;
+ if (fd > 2)
+ return fd;
+ }
+}
+
+void create_random_file()
+{
+ char template[16] = "EX.XXXXXX";
+ int fd;
+
+ mktemp(template);
+ fd = open(template, O_CREAT|O_RDWR, 0600);
+ if (fd < 0)
+ return;
+ printf("Created temp file %s, fd = %d\n", template, fd);
+ state_array[fd].state = STATE_CREATED;
+ strcpy(state_array[fd].name, template);
+}
+
+void unlink_file(int fd)
+{
+ char *filename = state_array[fd].name;
+
+ printf("Unlinking %s, fd = %d\n", filename, fd);
+
+ unlink(filename);
+ state_array[fd].state = STATE_DELETED;
+}
+
+void close_file(int fd)
+{
+ char *filename = state_array[fd].name;
+
+ printf("Closing %s, fd = %d\n", filename, fd);
+
+ close(fd);
+ state_array[fd].state = STATE_CLEAR;
+}
+
+
+main(int argc, char **argv)
+{
+ int i, fd;
+
+
+ for (i=0; i < 100000; i++) {
+ fd = get_random_fd();
+ switch (state_array[fd].state) {
+ case STATE_CLEAR:
+ create_random_file();
+ break;
+ case STATE_CREATED:
+ unlink_file(fd);
+ break;
+ case STATE_DELETED:
+ close_file(fd);
+ break;
+ }
+ }
+}
+
+