--- /dev/null
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define T1 "write data before unlink\n"
+#define T2 "write data after unlink\n"
+char buf[128];
+
+char usage[] =
+"Usage: %s filename command-sequence\n"
+" command-sequence items:\n"
+" o open(O_RDONLY)\n"
+" O open(O_CREAT|O_RDWR)\n"
+" u unlink\n"
+" m mknod\n"
+" c close\n"
+" _ wait for signal\n"
+" s stat\n"
+" S fstat\n";
+
+int main(int argc, char **argv)
+{
+ char *fname, *commands;
+ struct stat st;
+ int fd;
+
+ if (argc != 3) {
+ fprintf(stderr, usage, argv[0]);
+ exit(1);
+ }
+
+ fname = argv[1];
+ commands = argv[2];
+
+ while (*commands) {
+ switch (*commands) {
+ case 'o':
+ fd = open(fname, O_RDONLY);
+ if (fd == -1) {
+ perror("open(O_RDONLY)");
+ exit(1);
+ }
+ break;
+ case 'O':
+ fd = open(fname, O_CREAT|O_RDWR, 0644);
+ if (fd == -1) {
+ perror("open(O_RDWR|O_CREAT");
+ exit(1);
+ }
+ break;
+ case 'm':
+ if (mknod(fname, S_IFREG | 0644, 0) == -1) {
+ perror("mknod(S_IFREG|0644, 0)");
+ exit(1);
+ }
+ break;
+ case 'u':
+ if (unlink(fname) == -1) {
+ perror("unlink");
+ exit(1);
+ }
+ break;
+ case 'c':
+ if (close(fd) == -1) {
+ perror("close");
+ exit(1);
+ }
+ break;
+ case '_':
+ pause();
+ break;
+ case 's':
+ if (stat(fname, &st) == -1) {
+ perror("stat");
+ exit(1);
+ }
+ break;
+ case 'S':
+ if (fstat(fd, &st) == -1) {
+ perror("fstat");
+ exit(1);
+ }
+ break;
+ default:
+ fprintf(stderr, "unknown command \"%c\"\n", *commands);
+ fprintf(stderr, usage, argv[0]);
+ exit(1);
+ }
+
+ commands++;
+ }
+
+ return 0;
+}
message=$2
# Pretty tests run faster.
- echo '=====' $testnum: $message
+ echo -n '=====' $testnum: $message
local suffixlen=$((65 - `echo -n $2 | wc -c | awk '{print $1}'`))
- printf '%.*s\n' $suffixlen $EQUALS
+ printf ' %.*s\n' $suffixlen $EQUALS
test_${testnum} || error "test_$testnum failed with $?"
}
replay_barrier mds
mcreate $MOUNTPT/f1
fail
+ ls $MOUNTPT/f1
rm $MOUNTPT/f1
}
run_test 1 "simple create"
mkdir $MOUNTPT/d2
mcreate $MOUNTPT/d2/f2
fail
+ ls $MOUNTPT/d2/fs
rm -fr $MOUNTPT/d2
}
run_test 2 "mkdir + contained create"
replay_barrier mds
mcreate $MOUNTPT/d3/f3
fail
+ ls $MOUNTPT/d3/f3
rm -fr $MOUNTPT/d3
}
run_test 3 "mkdir |X| contained create"
+test_4() {
+ multiop $MOUNTPT/f4 mo_c &
+ MULTIPID=$!
+ sleep 1
+ fail
+ ls $MOUNTPT/f4
+ kill -USR1 $MULTIPID
+ wait
+ rm $MOUNTPT/f4
+}
+run_test 4 "open |X| close"
+
stop client $CLIENTLCONFARGS
stop ost
-stop mds
+stop mds $MDSLCONFARGS