--- /dev/null
+#!/bin/sh
+
+set -e
+
+LUSTRE=${LUSTRE:-`dirname $0`/..}
+LTESTDIR=${LTESTDIR:-$LUSTRE/../ltest}
+PATH=$PATH:$LUSTRE/utils:$LUSTRE/tests
+
+RLUSTRE=${RLUSTRE:-$LUSTRE}
+RPWD=${RPWD:-$PWD}
+
+. $LTESTDIR/functional/llite/common/common.sh
+
+# XXX I wish all this stuff was in some default-config.sh somewhere
+MOUNTPT=${MOUNTPT:-/mnt/lustre}
+MDSDEV=${MDSDEV:-/tmp/mds-`hostname`}
+MDSSIZE=${MDSSIZE:-100000}
+OSTDEV=${OSTDEV:-/tmp/ost-`hostname`}
+OSTSIZE=${OSTSIZE:-100000}
+UPCALL=${UPCALL:-$PWD/replay-single-upcall.sh}
+FSTYPE=${FSTYPE:-ext3}
+TIMEOUT=${TIMEOUT:-5}
+
+start() {
+ facet=$1
+ shift
+ lconf --node ${facet}_facet $@ replay-single.xml
+}
+
+stop() {
+ facet=$1
+ shift
+ lconf --node ${facet}_facet $@ -d replay-single.xml
+}
+
+replay_barrier() {
+ local dev=$1
+ sync
+ lctl --device %${dev}1 readonly
+ lctl --device %${dev}1 notransno
+}
+
+fail() {
+ stop mds
+ start mds
+ df $MOUNTPT
+}
+
+do_lmc() {
+ lmc -m replay-single.xml $@
+}
+
+add_facet() {
+ local facet=$1
+ shift
+ do_lmc --add node --node ${facet}_facet $@ --timeout $TIMEOUT
+ do_lmc --add net --node ${facet}_facet --nid localhost --nettype tcp
+}
+
+gen_config() {
+ rm -f replay-single.xml
+ add_facet mds
+ add_facet ost
+ add_facet client --lustre_upcall $UPCALL
+ do_lmc --add mds --node mds_facet --mds mds1 --dev $MDSDEV --size $MDSSIZE
+ do_lmc --add ost --node ost_facet --ost ost1 --dev $OSTDEV --size $OSTSIZE
+ do_lmc --add mtpt --node client_facet --path $MOUNTPT --mds mds1 --ost ost1
+}
+
+gen_config
+start mds
+start ost
+start client
+
+touch $MOUNTPT/lustre-works
+replay_barrier mds
+touch $MOUNTPT/lustre-does-not-work
+
+stop client
+stop ost
+stop mds