echo $LOOP_DEV
}
-cleanup_loop() {
- local LOOP_DEV=$1
- local LOOP_FILE=$2
- local LOOP_MNTPT=$3
-
- chmod u-s $LOOP_MNTPT >/dev/null 2>&1
- umount $LOOP_MNTPT >/dev/null 2>&1
- losetup -d $LOOP_DEV >/dev/null 2>&1
- rm -fr $LOOP_FILE >/dev/null 2>&1
- rm -fr $LOOP_MNTPT >/dev/null 2>&1
-}
-
setup_loop() {
local LOOP_DEV=$1
local LOOP_FILE=$2
losetup $LOOP_DEV $LOOP_FILE || {
rc=$?
- cleanup_mount $LOOP_DEV $LOOP_FILE $DIR/gns_test_1a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
return $rc
}
mke2fs -F $LOOP_DEV >/dev/null 2>&1 || {
rc=$?
- cleanup_mount $LOOP_DEV $LOOP_FILE $DIR/gns_test_1a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
echo "cannot create test ext2 fs on $LOOP_DEV"
return $?
}
return 0
}
-prep_upcall() {
+cleanup_loop() {
+ local LOOP_DEV=$1
+ local LOOP_FILE=$2
+
+ losetup -d $LOOP_DEV >/dev/null 2>&1
+ rm -fr $LOOP_FILE >/dev/null 2>&1
+}
+
+setup_upcall() {
local INJECTION=""
local UPCALL=$1
local MODE=$2
return $?
}
+cleanup_upcall() {
+ local UPCALL=$1
+ rm -fr $UPCALL
+}
+
check_gns() {
local LOG="/tmp/gns-log"
local UPCALL_PATH=""
UPCALL_PATH="/tmp/gns-upcall-$UPCALL.sh"
echo "generating upcall $UPCALL_PATH"
- prep_upcall $UPCALL_PATH $UPCALL $LOG || return $rc
+ setup_upcall $UPCALL_PATH $UPCALL $LOG || return $rc
echo "======================== upcall script ==========================="
cat $UPCALL_PATH 2>/dev/null || return $?
echo "=================================================================="
} || {
echo "upcall log file $LOG is not found"
}
+ cleanup_upcall $UPCALL_PATH
return 1
}
echo "success"
cat /proc/mounts | grep -q "$ENTRY" && {
echo "failed"
+ cleanup_upcall $UPCALL_PATH
return 2
}
echo "success"
+ cleanup_upcall $UPCALL_PATH
return 0
}
+setup_object() {
+ local OBJPATH=$1
+ local OBJECT=$2
+ local CONTENT=$3
+
+ mkdir -p $OBJPATH || return $?
+ echo -n $CONTENT > $OBJPATH/$OBJECT || return $?
+
+ echo "======================== mount object ==========================="
+ cat $OBJPATH/$OBJECT
+ echo ""
+ echo "================================================================="
+
+ chmod u+s $OBJPATH
+ return $?
+}
+
+cleanup_object() {
+ local OBJPATH=$1
+
+ chmod u-s $OBJPATH >/dev/null 2>&1
+ umount $OBJPATH >/dev/null 2>&1
+ rm -fr $OBJPATH >/dev/null 2>&1
+}
+
+setup_gns() {
+ local OBJECT=$1
+ local TIMOUT=$2
+ local TICK=$3
+
+ echo "$OBJECT" > /proc/fs/lustre/llite/fs0/gns_object_name || error
+ echo "$TIMOUT" > /proc/fs/lustre/llite/fs0/gns_timeout || error
+ echo "$TICK" > /proc/fs/lustre/llite/fs0/gns_tick || error
+
+ echo ""
+ echo "timeout: $(cat /proc/fs/lustre/llite/fs0/gns_timeout)s"
+ echo "object: $(cat /proc/fs/lustre/llite/fs0/gns_object_name)"
+ echo "tick: $(cat /proc/fs/lustre/llite/fs0/gns_tick)s"
+ echo ""
+
+}
+
test_1a() {
local LOOP_DEV=$(find_free_loop 2>/dev/null)
local UPCALL="/tmp/gns-upcall.sh"
- local LOOP_FILE="/tmp/gns_loop"
+ local LOOP_FILE="/tmp/gns_loop_1a"
local OBJECT=".mntinfo"
local TIMOUT=5
local TICK=1
error "can't find free loop device"
echo "preparing loop device $LOOP_DEV <-> $LOOP_FILE..."
- cleanup_loop $LOOP_DEV $LOOP_FILE $DIR/gns_test_1a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
setup_loop $LOOP_DEV $LOOP_FILE || error
echo "setting up GNS timeouts and mount object..."
- echo "$OBJECT" > /proc/fs/lustre/llite/fs0/gns_object_name || error
- echo "$TIMOUT" > /proc/fs/lustre/llite/fs0/gns_timeout || error
- echo "$TICK" > /proc/fs/lustre/llite/fs0/gns_tick || error
-
- echo ""
- echo "timeout: $(cat /proc/fs/lustre/llite/fs0/gns_timeout)s"
- echo "object: $(cat /proc/fs/lustre/llite/fs0/gns_object_name)"
- echo "tick: $(cat /proc/fs/lustre/llite/fs0/gns_tick)s"
- echo ""
+ setup_gns $OBJECT $TIMOUT $TICK || error
echo "preparing mount object at $DIR/gns_test_1a/$OBJECT..."
- mkdir -p $DIR/gns_test_1a || error
- echo -n "-t ext2 $LOOP_DEV" > $DIR/gns_test_1a/$OBJECT
- echo "======================== mount object ==========================="
- cat $DIR/gns_test_1a/$OBJECT
- echo ""
- echo "================================================================="
- chmod u+s $DIR/gns_test_1a || error
+ setup_object $DIR/gns_test_1a $OBJECT "-t ext2 $LOOP_DEV" || error
echo ""
- echo "testing GNS with GENERIC upcall 2 times on the row"
- for ((i=0;i<2;i++)); do
+ echo "testing GNS with GENERIC upcall 3 times on the row"
+ for ((i=0;i<3;i++)); do
check_gns GENERIC $DIR/gns_test_1a $TIMOUT $TICK || {
- cleanup_loop $LOOP_DEV $LOOP_FILE $DIR/gns_test_1a
+ cleanup_object $DIR/gns_test_1a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
error
}
done
+ cleanup_object $DIR/gns_test_1a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
+}
+
+run_test 1a " general GNS test - mounting/umount (GENERIC) ============="
+
+test_2a() {
+ local LOOP_DEV=$(find_free_loop 2>/dev/null)
+ local UPCALL="/tmp/gns-upcall.sh"
+ local LOOP_FILE="/tmp/gns_loop_2a"
+ local OBJECT=".mntinfo"
+ local TIMOUT=5
+ local TICK=1
+
+ test "x$LOOP_DEV" != "x" && test -b $LOOP_DEV ||
+ error "can't find free loop device"
+
+ echo "preparing loop device $LOOP_DEV <-> $LOOP_FILE..."
+ cleanup_loop $LOOP_DEV $LOOP_FILE
+ setup_loop $LOOP_DEV $LOOP_FILE || error
+
+ echo "setting up GNS timeouts and mount object..."
+ setup_gns $OBJECT $TIMOUT $TICK || error
+
+ echo "preparing mount object at $DIR/gns_test_2a/$OBJECT..."
+ setup_object $DIR/gns_test_2a $OBJECT "-t ext2 $LOOP_DEV" || error
+
echo ""
- echo "testing GNS with DEADLOCK upcall 2 times on the row"
- for ((i=0;i<2;i++)); do
- check_gns DEADLOCK $DIR/gns_test_1a $TIMOUT $TICK || {
- cleanup_loop $LOOP_DEV $LOOP_FILE $DIR/gns_test_1a
+ echo "testing GNS with DEADLOCK upcall 3 times on the row"
+ for ((i=0;i<3;i++)); do
+ check_gns DEADLOCK $DIR/gns_test_2a $TIMOUT $TICK || {
+ cleanup_object $DIR/gns_test_2a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
error
}
done
- cleanup_loop $LOOP_DEV $LOOP_FILE $DIR/gns_test_1a
+ cleanup_object $DIR/gns_test_2a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
+}
+
+run_test 2a " general GNS test - mounting/umount (DEADLOCK) ============"
+
+test_3a() {
+ local LOOP_DEV=$(find_free_loop 2>/dev/null)
+ local UPCALL="/tmp/gns-upcall.sh"
+ local LOOP_FILE="/tmp/gns_loop_3a"
+ local OBJECT=".mntinfo"
+ local TIMOUT=5
+ local TICK=1
+
+ test "x$LOOP_DEV" != "x" && test -b $LOOP_DEV ||
+ error "can't find free loop device"
+
+ echo "preparing loop device $LOOP_DEV <-> $LOOP_FILE..."
+ cleanup_loop $LOOP_DEV $LOOP_FILE
+ setup_loop $LOOP_DEV $LOOP_FILE || error
+
+ echo "setting up GNS timeouts and mount object..."
+ setup_gns $OBJECT $TIMOUT $TICK || error
+
+ echo "preparing mount object at $DIR/gns_test_3a/$OBJECT..."
+ setup_object $DIR/gns_test_3a $OBJECT "-t ext2 $LOOP_DEV" || error
+
+ echo ""
+ echo "testing GNS with DEADLOCK upcall 4 times on the row"
+ for ((i=0;i<4;i++)); do
+ local MODE="GENERIC"
+
+ test $(($i%2)) -eq 1 && MODE="DEADLOCK"
+
+ check_gns $MODE $DIR/gns_test_3a $TIMOUT $TICK || {
+ cleanup_object $DIR/gns_test_3a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
+ error
+ }
+ done
+
+ cleanup_object $DIR/gns_test_3a
+ cleanup_loop $LOOP_DEV $LOOP_FILE
+}
+
+run_test 3a " general GNS test - mounting/umount (GENERIC/DEADLOCK) ====="
+
+test_4a() {
+ echo "Not implemented yet!"
}
-run_test 1a " general GNS test - mounting/umount ===================="
+run_test 4a " general GNS test - concurrent mounting/umount ============="
TMPDIR=$OLDTMPDIR
TMP=$OLDTMP